避免EEPROM磨损
摘要:如果每隔几分钟(或几秒钟)定期更新EEPROM中的值,则可能会遇到EEPROM单元磨损的问题。为避免这种情况,您需要减少单元格中条目的频率。对于某些类型的EEPROM,甚至每小时超过一次的记录速度也可能是个问题。记录数据时,时间过得很快
EEPROM通常用于在嵌入式系统中保存设置和操作日志。例如,您可能希望黑匣子功能在发生事故或断电时记录最新数据。我已经看到需要每隔几秒钟记录一次此类数据的规范。但是问题是EEPROM的记录号资源有限。在记录100,000或一百万(取决于特定的芯片)之后,您的某些系统将开始遇到EEPROM故障的问题。 (在数据表中查找特定数量。如果要发布大量设备,“最坏情况”可能比“典型”情况更为重要)。一百万条记录看似庞大,但实际上它将很快结束。让我们看一个例子,假设我们需要每15秒将测得的电压存储在一个电池中。1,000,000条记录和15秒内的一条记录给出了每分钟记录:1,000,000 /(4 * 60分钟/小时* 24小时/天)= 173.6天。换句话说,您的EEPROM将在不到6个月的时间内用完一百万条记录。下图显示了基于特定EEPROM单元更新时间的磨损时间(以年为单位)。对于具有100万条记录资源的芯片,预期寿命为10年的产品的极限线是每5分钟15秒更新一次。对于具有100K资源的EEPROM,您每52分钟最多只能更新一次特定的单元。这意味着,如果您希望产品可以使用数年而不是数月,则不希望每隔几秒钟更新一次单元。上面的数值成线性比例,但是,在该设备中,还有其他因素,例如温度和访问模式。
降低频率
解决问题的最轻松的方法就是减少写频率。在某些情况下,系统要求允许这样做。或者,您只能记录任何重大更改。但是,对于与事件相关的条目,请注意一个可能的情况,在该情况下该值将不断波动并引起一系列事件,这些事件将导致EEPROM磨损。(如果您可以确定已记录EEPROM的次数,那就太好了。但这将需要一个计数器,该计数器将存储在EEPROM中……问题变成了计数器磨损问题。)营养减少中断
一些处理器具有低功耗中断,可用于将最后一个值写入EEPROM,而系统由于断电而关闭。通常,您将感兴趣的值存储在RAM中,并且仅在关闭电源时才将其保存到EEPROM中。或者,您可能会不时写入EEPROM,并作为关闭过程的一部分将另一个副本写入EEPROM,以确保写入了最新数据。重要的是要确保有一个大功率电容器,该电容器将维持足以对EEPROM进行编程的电压足够长的时间。如果您需要写入一个或两个值,而不是大数据块,则此方法可能有用。注意,错误的余地很大!环形缓冲区
磨损问题的经典解决方案是使用包含N个最后值条目的FIFO环形缓冲区。您还需要在EEPROM中保存一个指向缓冲区末尾的指针。这样可以减少EEPROM损耗,该值与该缓冲区中的副本数成比例。例如,如果缓冲区通过10个不同的地址来保存单个值,则每个特定单元的修改量将减少10倍,而写入资源将增加10倍。您还需要为10个副本中的每个副本分别设置一个计数器或时间戳,以便您可以确定关闭时最后一个副本。换句话说,您需要两个缓冲区,一个用于值,一个用于计数器。 (如果将计数器保存在相同的地址,则会导致其性能下降,因为它会随着每个记录周期的增加而增加。)此方法的缺点是您需要10倍的空间才能获得10倍的使用寿命。您可以很聪明,并在计数器中放入数据。如果您写入大量数据,则向计数器添加几个字节并不是什么大问题。但是无论如何,都需要大量的EEPROM。Atmel准备了一个包含所有血腥细节的Appnote:AVR-101:高耐用性EEPROM存储:www.atmel.com/images/doc2526.pdf计数器数量的特殊情况
有时您需要保存计数器,而不是自身的值。例如,您可能想知道设备打开的次数或设备的运行时间。计数器最糟糕的事情是它们不断更改最低有效位,从而更快地耗尽了较低的EEPROM单元。但是这里可以应用一些技巧。 Microchip的applet中有几个聪明的主意,例如使用格雷代码,以便当计数器值更改时,多字节计数器中只有一位发生更改。他们还建议使用校正代码来补偿磨损。 (我不知道这种代码的使用将有多有效,因为它将取决于计数器字节中的位的错误的独立程度,大约由作者自担风险)。请参阅Appnote:ww1.microchip.com/downloads/zh-CN/AppNotes/01449A.pdf注:对于那些想了解更多的人,Microchip编写了一个文档,其中包含有关EEPROM单元的布置及其磨损的详细信息,并带有图表:ftp.microchip.com/tools /memory/total50/tutorial.html如果您对抗磨损EEPROM有任何有趣的想法,请告诉我。来源:Phil Koopman,更好的嵌入式系统软件Betterembsw.blogspot.ru/2015/07/avoiding-eeprom-wearout.html译者注:近年来,EEPROM芯片与页面擦除组织一起出现(类似于FLASH芯片),在该组织中可以逐字节逻辑寻址单元(读,写和擦除),但该芯片对用户无形擦除整个页面并用新数据覆盖它。那些。擦除了地址0的单元之后,我们实际上擦除并重写了地址0 ... 255(页面大小为256字节)的单元,因此在这种情况下,缓冲区技巧将无济于事。当这种微电路的记录资源用尽时,不是一个单元发生故障,而是整个页面。在此类微电路的数据表中,记录资源是针对页面而不是针对特定电池的。例如,参见Microchip的25LC1024 数据手册。 Source: https://habr.com/ru/post/zh-CN385213/
All Articles