天天看點

【IoT】CC254X 片上 flash 讀寫操作解析

在開發中,希望資料掉電不丢失,有兩種方法:

1)通過 I2C 或者 SPI 總線外接存儲,比如 E2PROM 或 FLASH;

2)操作片上 flash。

要想操作片上 flash,首先要搞清楚片上 flash 的存儲結構以及尋址方式。

例如:

CC2541F256 這個晶片,我們查一下技術手冊,介紹片上 flash 存儲組織結構的部分如下:

【IoT】CC254X 片上 flash 讀寫操作解析

梳理如下:

1)内部 flash 由 page 組成,每一個頁有 2K=2048byte;

2)最小可擦除單元為一個 page;

3)最小可寫入單元為 32bit(一個 word);

4)尋址位址大小為 16bit。

以上這些涵蓋了我們操作 flash 時必須的資訊。

CC2541F256一共有256KB的片上flash空間,那麼一共有256/2=128個page。

在寫入flash之前,我們通常會先對要寫入的區域進行擦除操作,由于最小可擦除單元為一個page,那麼我們隻需要定義好要擦除的頁即可,例如,我們把一個标志位flag寫入第120個page,這時可以直接調用HAL層的HAL_FLASH提供的操作API,HalFlashErase(0x78)。

擦除完畢後,我們需要在相應的位址寫入flag的值,那麼如何确定位址?可以通過page進行換算,120*2048為總的byte數,最小可寫入單元大小為32bit也就是4個byte,也就是說每個位址對應的是4個byte,是以120*2048/4=0xF000即第120頁的首位址。

讀寫參考代碼如下:

uint8 newValue[10];
uint8 newChar1[2];
......
HalFlashErase(0x78);
while( FCTL & 0x80 ); // wait for erase to complete
HalFlashWrite(0xF000,newValue,1);
HalFlashRead(0x78,0,newChar1,2);
           

refer:

https://blog.csdn.net/happytomyoung/article/details/48895217