本文主要介绍了 沁恒蓝牙芯片 CH58x 的 DataFlash 分区以及读写操作以及原理
📋 个人简介
参考博文:
【沁恒蓝牙mesh】CH58x flash分区与数据存储管理
MCU
中的 Flash
中专门用于存储数据的区域叫做 DataFlash
Dataflash
的最小单位,ch582
最小该单位为 1字节Dataflash
的最小单位,ch582
最小该单位为 256 字节读取该地址的数据,若为0xff 则认为该地址没有被写入过数据
//读取数据
//传入的地址是相对地址,0对应dataflash的起始地址
EEPROM_READ(StartAddr,Buffer,Length)
//擦除数据
//这里的length 是字节,但是实际的擦除是按照256字节高位对齐,比如传入257字节,实际是擦除了512字节.
//擦除后的区域,使用EEPROM_READ读出来默认是0xff,使用指针方式绝对地址读取,非0xff
//传入的地址是相对地址,0对应dataflash的起始地址
EEPROM_ERASE(StartAddr,Length)
//写入数据
//这里的buffer是需要写入的指针数据,不需要进行4字节对齐,数据长度是1的倍数,数据需要在RAM里面
//传入的地址是相对地址,0对应dataflash的起始地址
EEPROM_WRITE(StartAddr,Buffer,Length)
问题:如果我只想写几个 byte
,每次写之前就要擦除一整个 sector
,效率比较低,不方便。如何解决?
将 dataflash
划分为两个逻辑分区, logical sector1
和 logical sector2
使用之前,先擦除分区1,然后才能在分区1写操作
,为了提高flash 的寿命可以:擦除分区1后,接下来擦除分区2,不要连续擦除分区1,然后在分区2进行操作,使用完分区2后们再次回到分区1使用,循环使用