最新消息:

增加EEPROM的擦写次数

ZigBee 作者:刘明伟 作者的G+ 13571浏览 0评论

目前在做的一个应用,为了保证设备断电重启后连不上网络依然能维护时间,因此将UTC时间保存到EEPROM重启后读出。

考虑到EEPROM的擦写次数有限,因此需要一定的机制避免写坏。而保存的频率越高间隔越短,则重启后不能联网时获取的时间误差越小,精度越高。

目前使用的SOC芯片内的EEPROM擦写次数在比较高的温度下(85°)竟然只有5万次,这远远不能达到项目的需求,因此需要想办法增加擦写次数。

Atmel128RFA1/256RFR2片内的EEPROM擦写次数为:
The endurance of the entire data memory (EEPROM) is
• 125°C – 20,000 Write/Erase cycles
• 85°C – 50,000 Write/Erase cycles
• 25°C – 100,000 Write/Erase cycles

芯片是固定的,没办法更改,物理性能已经确定,只能在使用上想办法增加擦写次数。

于是想到一个简单的办法,牺牲空间来换时间,通过使用更多的EEPROM空间来换取更久的使用时间,方法很简单,就是把原本存取一个位置的数据使用更多的位置来存储,轮番存取各个位置,使擦写次数分散。

按照10年使用寿命,85°环境,每天运行12小时计算,如果重复读写一个位置保证不写坏,则读写的间隔为10*365*12*3600/50000,即约3153秒写一次。

因此采取使用多个位置轮换读写的方案,这样可以扩展EEPROM的寿命。因此在EEPROM内保存如下结构:

当前使用的block

Block1擦写次数

Block1数据

Block2擦写次数

Block2数据

这样,如果使用到200个block则可以在15秒写一次的情况下不至于将EEPROM写坏。

在代码中,现在采取200个block,每20秒保存一次时间,可使EEPROM使用寿命延长到十年以上,如果需要更久的寿命,则可以使用更多的block。

转载请注明:刘明伟的博客 » 增加EEPROM的擦写次数

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址