CH32X035 Flash延长使用寿命的方法
CH32X035 Flash操作注意事项
对于Flash支持半字/字编程的MCU来说,遇到有数据需要频繁存储时,基本都会采用均衡擦写的方式来以空间换取flash寿命的延长。也就是开辟一块区域专门用于数据存储,每次有数据需要保存的时候,只要找到当前区域中最靠前的内容为0xFF的区域即可。待整个区域都找不到0xFF的区域之后,整块全都擦除掉,再从头开始。这样存储区域可以使用的寿命长度就是flash寿命乘以存储区域长度除以待保存数据的长度:
N = n*(L/l)
N:flash理论寿命,n:flash实际寿命,L:存储区域长度,L:每次使用的长度
但是对于CH32X035这样的MCU来说,因为其Flash的特性,只支持页擦页写,并且无论前一次写入了什么,即使与擦除后的默认值一致(0xFF),下一次再次写入前也要先擦除,否则读取数据时会得到非预期的内容。
那么怎么延长flash寿命以达到与支持半字操作的单片机一样的寿命长度呢?这里推荐两种方式。
第一种,利用芯片的PVD中断,在检测到Vdd电压有跌落时,对需要保存的数据进行写flash操作,将数据保存到flash中去。这样对flash的操作只会发生在每次系统掉电之前,为了防止掉电时间过短来不及保存数据,可以在单片机的Vdd引脚增加一个47uF的电解电容,确保发生掉电时单片机有足够的时间保存数据。
第二种,将每一页当作一个存储单元,多分配几页用于存储,这样相当于传统方式的放大版,存储空间稍有浪费,对于固件体积较大的方案来说会有不便。
具体使用哪种方式需要根据项目的实际情况选择,甚至可以两个方法结合在一起使用。