精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

CW32L052 FLASH存儲器

CW32生態社區 ? 來源:CW32生態社區 ? 作者:CW32生態社區 ? 2024-02-28 17:43 ? 次閱讀

BD網盤鏈接:

https://pan.baidu.com/s/1dmtMWcK1TII-vutsS8X0Og?pwd=5wwy
提取碼:5wwy

概述

CW32L052內部集成了64KB嵌入式FLASH供用戶使用,可用來存儲應用程序和用戶數據

芯片支持對 FLASH 存儲器的讀、擦除和寫操作,支持 擦寫保護和讀保護

芯片內置 FLASH 編程所需的高壓 BOOST 電路, 無須額外提供編程電壓

FLASH存儲器組織

  • 總容量64KB,分頁管理
  • 每頁 512 字節
  • 共 128 頁

FLASH存儲器保護

FLASH 存儲器具有擦寫保護讀保護功能。

  • 擦寫保護

包括鎖定頁擦寫保護和PC 地址頁擦寫保護,處于保護狀態的頁面不能被擦寫,可避免 FLASH 內容被意外改寫。

  • 讀保護

整片FLASH為保護對象,不支持單頁保護,可避免用戶代碼被非法讀取。

FLASH存儲器操作

FLASH 存儲器操作包括:讀操作、擦除、寫(編程)操作。

頁擦除

FLASH 的頁擦除操作的最小單位為 1 頁,即 512 字節。頁擦除操作完成后,該頁所有地址空間的數據內容均為 0xFF

如果對未解鎖的 FLASH 頁面進行頁擦除操作,或者對*正在運行的程序[^1]*進行擦除操作,會操作失敗,產生 錯誤中斷標志

CW32L052 內部 FLASH 存儲器被劃分為 128 頁,每 8 頁對應擦寫鎖定寄存器1 個鎖定位 。擦寫鎖定寄存器的各位域與 FLASH 鎖定頁面的對應關系如下表所示:
0fcb76c86bd5b5d35365f25a6895bb0a3493144165354211_.jpg

寫操作

基于嵌入式 FLASH 的特性,寫操作只能將 FLASH 存儲器中位數據 由'1'改寫為'0' ,不能由'0'改寫為'1', 因此在寫數據之前先要對對應地址所在頁進行擦除操作。

基于以上陳述,總結出以下三個原則:

  • 不可對數據位內容為'0'的地址寫入
  • 不可對鎖定區域內的地址寫入
  • 不可對 PC(程序指針)所在的頁的地址寫入

讀操作

CW32L052 對 FLASH 的讀操作支持 3 種不同位寬,可采用直接訪問絕對地址方式讀取,讀取的數據位寬必 須和對應地址邊界對齊。

核心代碼

//單片機頭文件
#include "main.h"
//硬件驅動
#include "gpio.h"
#include "delay.h"

//子程序
void LCD_Configuration(void);       //段式LCD配置函數
void LCD_Display(uint16_t dispdata);     //段式LCD顯示函數
uint8_t FLASH_Erase(void);         //FLASH頁擦除函數
uint8_t FLASH_Write(uint8_t *ByteData,uint16_t amount); //FLASH寫操作函數

int main(void)
{
 int i;
 int temp8;
 uint8_t cnt=0;
 uint8_t WriteBuf[256];

    LED_Init();    //初始化程序運行情況指示燈
 LCD_Configuration();    //配置LCD液晶顯示屏

 FLASH_Erase();          //頁擦除操作
 for(i=0;i< 256;i++)      //驗證是否擦除成功
 {
  temp8=*((volatile uint8_t*)(512*127+i));
  if(temp8!=0xff)
  {
   while(1)
   {
    LED2_ON();       //LED2閃爍
    Delay_ms(300);
    LED2_OFF();
    Delay_ms(300);
   }
  }
 }

 for(i=0;i< 256;i++)      //準備寫入FLASH存儲器的數據
 {
  WriteBuf[i]=i;
 }
 FLASH_Write(WriteBuf,256); //寫操作
 for(i=0;i< 255;i++)           //驗證是否寫入正確
 {
  temp8=*((volatile uint8_t*)(512*127+i));
  if(temp8!=i)
  {
   while(1)
   {
    LED1_ON();     //LED1、LED2同時閃爍指示寫入失敗
    LED2_ON();
    Delay_ms(300);
    LED1_OFF();
    LED2_OFF();
    Delay_ms(300);
   }
  }
 }

 LED1_ON();       //指示擦除、讀、寫均成功
 LED2_ON();
    while(1)
    {
  LCD_Display(*((volatile uint8_t*)(512*127+cnt)));  //LCD上依次顯示寫入的數據
  Delay_ms(500);
  cnt++;
    }
}

uint8_t FLASH_Erase(void)    //頁擦除
{
 int flag=1;

 FLASH_UnlockPages(512*127,512*127);
 flag=FLASH_ErasePages(512*127,512*127);
 FLASH_LockAllPages();
 if(flag!=0)
 {
  while(1)
  {
   LED1_ON();
   Delay_ms(300);
   LED1_OFF();
   Delay_ms(300);
  }
 }

 return 0;
}

uint8_t FLASH_Write(uint8_t *ByteData,uint16_t amount)  //寫操作
{
 int flag=1;

 FLASH_UnlockPages(512*127,512*127);
 flag=FLASH_WriteBytes(512*127,ByteData,amount);
 FLASH_LockAllPages();
 if(flag!=0)
 {
  while(1)
  {
   LED2_ON();
   Delay_ms(300);
   LED2_OFF();
   Delay_ms(300);
  }
 }

 return 0;
}

void LCD_Configuration(void)      //段式LCD配置
{
    __RCC_LCD_CLK_ENABLE();
 RCC_LSI_Enable();

    LCD_InitTypeDef LCD_InitStruct = {0};

    LCD_InitStruct.LCD_Bias = LCD_Bias_1_3;
    LCD_InitStruct.LCD_ClockSource = LCD_CLOCK_SOURCE_LSI;
    LCD_InitStruct.LCD_Duty = LCD_Duty_1_4;
    LCD_InitStruct.LCD_ScanFreq = LCD_SCAN_FREQ_256HZ;
    LCD_InitStruct.LCD_VoltageSource = LCD_VoltageSource_Internal;

    LCD_Init(&LCD_InitStruct);
 LCD_COMConfig(LCD_COM0 | LCD_COM1 | LCD_COM2 | LCD_COM3, ENABLE);
    LCD_SEG0to23Config(LCD_SEG0|LCD_SEG1|LCD_SEG2|LCD_SEG3|LCD_SEG4|LCD_SEG5|LCD_SEG6|LCD_SEG7, ENABLE);

 LCD_Cmd(ENABLE);
}

void LCD_Display(uint16_t dispdata)   //LCD顯示
{
 uint16_t DisBuf[10]={NUM0,NUM1,NUM2,NUM3,NUM4,NUM5,NUM6,NUM7,NUM8,NUM9};

 LCD_Write(LCD_RAMRegister_0,0x00000000);
 LCD_Write(LCD_RAMRegister_1,0x00000000);

 if(dispdata< 10)
  LCD_Write(LCD_RAMRegister_0,DisBuf[dispdata]);
 else if(dispdata< 100)
  LCD_Write(LCD_RAMRegister_0,DisBuf[dispdata/10]|DisBuf[dispdata%10]< 16);
 else if(dispdata< 1000)
 {
  LCD_Write(LCD_RAMRegister_0,DisBuf[dispdata/100]|DisBuf[dispdata/10%10]< 16);
  LCD_Write(LCD_RAMRegister_1,DisBuf[dispdata%10]);
 }
 else
 {
  LCD_Write(LCD_RAMRegister_0,0xffffffff);
  LCD_Write(LCD_RAMRegister_1,0xffffffff);
 }

}

視頻演示
2月28日 00_00_00-00_00_30.gif

補充
FLASH存儲器和EEPROM存儲器對比

一般性的總結:
7e689d56eb93c13b4fa97e4d66a8bc803493144165354211_.jpg

使用場景側重:

  • EEPROM:頻繁的擦寫操作,如存儲計數器、傳感器數據等
  • FLASH:大容量、高速讀寫,如存儲程序代碼和固件等

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 芯片
    +關注

    關注

    454

    文章

    50460

    瀏覽量

    421967
  • FlaSh
    +關注

    關注

    10

    文章

    1623

    瀏覽量

    147781
  • 存儲器
    +關注

    關注

    38

    文章

    7455

    瀏覽量

    163622
  • CW32
    +關注

    關注

    1

    文章

    196

    瀏覽量

    592
收藏 人收藏

    評論

    相關推薦

    使用SD Flash為TMS320C28x器件編程外部非易失性存儲器

    電子發燒友網站提供《使用SD Flash為TMS320C28x器件編程外部非易失性存儲器.pdf》資料免費下載
    發表于 10-15 11:48 ?0次下載
    使用SD <b class='flag-5'>Flash</b>為TMS320C28x器件編程外部非易失性<b class='flag-5'>存儲器</b>

    存儲器分為隨機存儲器和什么

    存儲器是計算機系統中用于臨時存儲數據和程序的關鍵部件,它直接影響到計算機的運行速度和性能。內存儲器主要分為兩大類:隨機存儲器(RAM,Random Access Memory)和只讀
    的頭像 發表于 10-14 09:54 ?642次閱讀

    CW32L010安全低功耗MCU,樹立M0+產品行業新標桿!

    是基于eFlash的單芯片低功耗微控制,集成了主頻高達48MHz的ARM?Cortex?-M0+內核、高速嵌入式存儲器(多至64K字節FLASH和多至4K字節SRAM)以及
    的頭像 發表于 10-09 10:12 ?456次閱讀
    <b class='flag-5'>CW32L</b>010安全低功耗MCU,樹立M0+產品行業新標桿!

    CW32L010安全低功耗MCU,樹立M0+產品行業新標桿!

    是基于 eFlash 的單芯片低功耗微控制,集成了主頻高達 48MHz 的 ARM? Cortex?-M0+ 內核、高速嵌入式存儲器(多至 64K 字節 FLASH 和多至 4K 字節 SRAM)以及一系列
    發表于 10-09 10:08

    鐵電存儲器Flash的區別

    鐵電存儲器(Ferroelectric RAM, FRAM)與閃存(Flash)是兩種不同類型的非易失性存儲器,它們在工作原理、性能特點、應用場景等方面存在顯著的差異。
    的頭像 發表于 09-29 15:25 ?736次閱讀

    NAND Flash與其他類型存儲器的區別

    NAND Flash作為一種基于NAND技術的非易失性存儲器,具有多個顯著優點,這些優點使其在數據存儲領域得到了廣泛應用。以下是對NAND Flash優點的詳細闡述,并簡要探討與其他類
    的頭像 發表于 08-20 10:24 ?657次閱讀

    ram存儲器和rom存儲器的區別是什么

    定義: RAM(Random Access Memory):隨機存取存儲器,是一種易失性存儲器,主要用于計算機和其他設備的臨時存儲。 ROM(Read-Only Memory):只讀存儲器
    的頭像 發表于 08-06 09:17 ?582次閱讀

    昂科燒錄支持MindMotion靈動微電子的32位微控制MM32L052NT

    。 MM32L052NT使用高性能的ARM? Cortex?-M0為內核的32位微控制,最高工作頻率可達48MHz,內置高速存儲器,豐富的增強型I/O端口和外設連接到外部總線。MM32L05
    的頭像 發表于 07-04 14:49 ?442次閱讀
    昂科燒錄<b class='flag-5'>器</b>支持MindMotion靈動微電子的32位微控制<b class='flag-5'>器</b>MM32<b class='flag-5'>L052</b>NT

    EEPROM與Flash存儲器的區別

    可編程只讀存儲器)和Flash存儲器是兩種常見的非易失性存儲器,它們具有各自的特點和應用場景。本文將深入分析和比較EEPROM與Flash
    的頭像 發表于 05-23 16:35 ?5602次閱讀

    STM32L053如何在FLASH程序存儲器模式下將程序燒錄成功?

    用的是STM32L053芯片,自舉模式為FLASH程序存儲器模式,此時如何燒錄程序?
    發表于 03-25 06:09

    CW32L052 DMA直接內存訪問

    CW32L052支持DMA(Direct Memory Access),即直接內存訪問,無需CPU干預,實現高速數據傳輸。數據的傳輸可以發生在: ? 外設和內存之間 :例如ADC采集數據到內存,這種
    的頭像 發表于 02-28 16:48 ?893次閱讀
    <b class='flag-5'>CW32L052</b> DMA直接內存訪問

    CW32L052單片機支持DMA實現高速數據傳輸

    CW32L052支持DMA(Direct Memory Access),即直接內存訪問,無需CPU干預,實現高速數據傳輸。
    的頭像 發表于 02-27 11:36 ?954次閱讀

    淺談flash存儲器的特點和優缺點

    Flash存儲器的寫操作具有特殊性,它只能將數據位從1寫成0,而不能從0寫成1。因此,在對存儲器進行寫入操作之前,必須先執行擦除操作,將預寫入的數據位初始化為1。
    的頭像 發表于 02-19 11:37 ?3151次閱讀
    淺談<b class='flag-5'>flash</b><b class='flag-5'>存儲器</b>的特點和優缺點

    stm32 flash寫數據怎么存儲

    stm32 flash寫數據怎么存儲的? STM32是一款廣泛應用于嵌入式系統開發的微控制,它的Flash存儲器是其中一個重要的組成部分。
    的頭像 發表于 01-31 15:46 ?2277次閱讀

    fpga配置flash怎么用來存儲數據

    要求使用其他存儲設備,如Flash存儲器,來存儲數據。 Flash存儲器是一種非易失性
    的頭像 發表于 12-15 15:42 ?2370次閱讀