CC254X片上flash读写解析
2015-10-04 12:00
260 查看
如果在开发中,希望个别数据掉电不丢失,那么有几种方法可以考虑,一种是通过I2C或者SPI总线外接存储,比如E2PROM或FLASH,如果数据不大,第二种方便的方法就是操作片上flash了,要想操作片上flash,首先要搞清楚片上flash的存储结构以及寻址方式。
例如CC2541F256这个芯片,我们查一下技术手册,介绍片上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页的首地址。
读写参考代码如下:
例如CC2541F256这个芯片,我们查一下技术手册,介绍片上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);
相关文章推荐
- 黑马程序员——Java基础日记——面向对象
- HDU 2012 素性
- 在Xcode中的textField中输入中文
- Vijos[1028]魔族密码
- iOS讲解迷惑深入浅出之block那点事
- iOS开发 —— MVVM设计模式
- 常用几个结构体
- 有关sql server 2008无法导入数据库mdf文件的处理方法
- 输出编译器预处理器的中间文件
- 20135306黄韧 信息安全系统设计基础第三周学习总结
- hdu1754 I hate it线段树模板 区间最值查询
- LintCode "Binary Representation"
- hdu1754 I hate it线段树模板 区间最值查询
- 证券基础--股票发行方式
- Odoo9发行说明
- 软件工程之面向过程的软件设计方法(二)
- J2EE学习路线
- 深入详解保护模式下的内存分页机制
- 证书
- andriod 实现新浪、QQ场地、朋友微信圈、微信朋友分享功能