天天看點

CC254X片上flash讀寫解析

        如果在開發中,希望個别資料掉電不丢失,那麼有幾種方法可以考慮,一種是通過I2C或者SPI總線外接存儲,比如E2PROM或FLASH,如果資料不大,第二種友善的方法就是操作片上flash了,要想操作片上flash,首先要搞清楚片上flash的存儲結構以及尋址方式。

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

CC254X片上flash讀寫解析

        我們可以梳理如下:

        1.内部flash由page組成,每一個頁有2048-byte;

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

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

        4.尋址位址大小為16-bit。

        以上這些涵蓋了我們操作flash時必須的資訊。CC2541F256一共有256KB的片上flash空間,那麼一共有多少page?答案是256/2=128個page。在寫入flash之前,我們通常會先對要寫入的區域進行擦除操作,由于最小可擦除單元為一個page,那麼我們隻需要定義好要擦除的頁即可,例如,我們把一個标志位flag寫入第120個page(這裡注意核對下代碼的大小,不要寫到代碼存儲區即可,尤其是OAD更要特别注意),這時可以直接調用HAL層的HAL_FLASH提供的操作API,HalFlashErase(0x78)。擦除完畢後,我們需要在相應的位址寫入flag的值,那麼如何确定位址?可以通過page進行換算,120*2048為總的byte數,最小可寫入單元大小為32-bit也就是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);
           

     歡迎大家掃描下方二維碼關注我的個人微信公衆号,一起交流學習,謝謝。

CC254X片上flash讀寫解析