前言:
此时看官们对“flash烧写算法”大概比较讲究,你们都想要知道一些“flash烧写算法”的相关文章。那么小编同时在网上网罗了一些对于“flash烧写算法””的相关内容,希望兄弟们能喜欢,小伙伴们一起来学习一下吧!一般32位单片机没有自带EEROM, 而是有相对丰富的FLASH,但是写FLASH之前必须先做擦除操作才能写入,一般按页擦除,且擦除寿命在10000次左右,因此,需要加一些读写算法,来避免经常性的擦除动作,提高FLASH的寿命。
我们可以开辟一片空间来做相应的处理,假设留出2K【2页】空间做存储。首先根据总存储区长度hislen和每次写入的数据长度datalen,计算出擦除一次可以写入数据的次数n, n = hislen/(datalen + 4 ),如果一次性按照64字节写入,每次写FLASH之前读取4字节校验码,并读取64字节数据计算出校验码,比对不成功后,则确定下来写入的索引值w_index,则进行数据写入以及将本次写入的数据进行计算,将校验值写入校验区,任何一次写入失败,都将w_index清0,FLASH存储BANK1擦除,重新写FLASH, 写到索引为0的位置,成功写入数据和校验后,再将BANK2擦除,具体流程图如下图:
FLASH存储结构如下所示:
读数据时,则从n开始,反向开始查找校验值和数据,并计算出数据校验值, 与校验区数据对比,校验通过则确定出索引值r_index, 则可以计算出地址,取出最新正确的数据。
实际开发中,需要确定可以用来数据存储的最大FLASH空间hislen,以及一次性需要存储的数据长度datalen, hislen越大,datalen越小,则FLASH使用寿命相对越长。
实现策略已介绍完毕,具体代码可自行实现,有需要参考代码的可联系博主。
标签: #flash烧写算法