关于FLASH延长写寿命算法
发布时间:2020-12-15 17:43:22 所属栏目:百科 来源:网络整理
导读:? ? 假定现在有一个产品,需要保存一些参数,参数的个数并不多,总共为10个字节,用EEPROM来保存就可以满足需求,我们选用了容量为256字节的 EEPROM,如果我们不做过多考虑,很有可能就是直接将这10个字节从EEPROM的首地址开始保存,每次改写也是直接修改这
? ? 假定现在有一个产品,需要保存一些参数,参数的个数并不多,总共为10个字节,用EEPROM来保存就可以满足需求,我们选用了容量为256字节的 EEPROM,如果我们不做过多考虑,很有可能就是直接将这10个字节从EEPROM的首地址开始保存,每次改写也是直接修改这部分内容,这样我们最多可 以保存参数10万次。只要我们做一点简单处理,就可以将保存参数的次数成倍增加,来看看我们应该如何实现。 ??????? 直接保存的最简方法: ??????? 地址 0x00?? 0x01?? 0x02?? ...? 0x09? ??????? 内容 data1 data2 data3? ...? data10 ??????? 改进的保存方法: ??????? 处理方法是将256字节按16字节大小分成16等份,按后面格式存储参数 ??????? 地址 0x10*n +0x00 +0x01? +0x02 ... +0x09? +0x0A? +0x0B +0x0C? +0x0D +0x0E +0x0F ??????? 内容????????????????? flag???? data1?data2 ...? data9? data10?保留1? 保留2??保留3?? 保留4? check_sum ???????? check_sum=(flag+data1+data2+...+data10+保留1+...+保留4?)&0xFF ??????? flag为0xA5表示当前16个字节为正在使用的记录,为其它值表示当前16字节已经丢弃 ??????? 读取参数的时候先从地址0x10*n+0x00读flag,如果为0xA5表明当前记录为正在使用中,读出全部内容,并按前面公式进行校验,如果校验出 错,则当前参数不可靠,直接使用默认参数,并将当前区域的flag改写为0,同时在地址0x10*(n+1)位置开始将默认参数写入,地址0x10* (n+1)写入内容为0xA5。如果所有区域都没有发现有效记录,在地址0写入默认参数。 ??????? 每次需要更改参数设定时,先将当前记录位置的flag改为0,然后再下一条记录位置写入新的参数,这个顺序可以做出适当改进,比如对写入时断电等意外情况 做出考虑,从而得到更可靠的写入结果,不过就按此方法也都可以满足应用需求。 ??????? 再来对比一下两种方法,最简方法只能保存10万次,改进的方法理论上增加了16倍,达到160万次,如果预估最简方法产品是3年内绝对不会出错,现在就增 加到了48年,一个电子产品使用超过3年还是有可能,但用48年的可能性就非常之小,可以视同为0。对于FLASH芯片也是同样道理,这里就不重复举例说 明,在应用中也应该做出同样的处理。
原文:http://blog.chinaunix.net/uid-20737871-id-1881191.html (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |