存储数据必然有读和写. Flash当然也有. 但是, Flash的写是非常特殊的, 会引出一系列问题.

  1. 首先, Flash数据只能从1改为0, 那就意味着写以前必须得先把要写的字节都变成0xFF. 还好, 一般都会提供一个erase擦除的函数.
  2. 然而, 擦除操作必须要擦除整个sector! sector(一般翻译为扇区)是flash的最小单位, 具体多大看设置, 从512B到4K不等. BL2028N上有一个_MAX_SS_MIN_SS的宏定义, 默认为512, SS是Sector Size的简称.
  3. 所以如果你要写, 那么你需要擦除整个扇区的数据. 如果你不擦除, 那么你写的结果事实上是和当前扇区上的值相与的结果
    参考这个STM32 Flash读写的说明, 写数据要经过解锁-擦除-写入-上锁四个步骤.

所以正常来说还是用一个flash的库比较好, 比如easyFlash.EasyFlash在2019年v4.0以前只支持字符串值的读写. BL2028N使用的easyFlash正好是2018年的, 只能读写字符串.

标签: none 阅读量: 384

添加新评论