【IoT】CC254X 片上 flash 读写操作解析

在开发中,希望数据掉电不丢失,有两种方法:

1)通过 I2C 或者 SPI 总线外接存储,比如 E2PROM 或 FLASH;

2)操作片上 flash。

要想操作片上 flash,首先要搞清楚片上 flash 的存储结构以及寻址方式。

例如:

CC2541F256 这个芯片,我们查一下技术手册,介绍片上 flash 存储组织结构的部分如下:

【IoT】CC254X 片上 flash 读写操作解析_第1张图片

梳理如下:

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 
 

你可能感兴趣的:(IoT产品设计理论)