EEPROM的实际寿命是多少?


21

ATMEL说,EEPROM单元的单元寿命约为每单元100,000个写入周期。这实际上是EEPROM在野外的表现吗?

如果我不更改单元格的值,这会延长寿命吗?例如,如果我写的价值0xFF一次又一次同一个小区,这是任何不同的写作0x000xFF0x00等。

Answers:


19

如您陈述的那样,内部EEPROM的寿命为100,000个写周期。这不是猜测-很大一部分ATmega328可以毫无问题地达到这个数字。我之前测试了三个处理器,所有处理器均达到了150,000个周期,没有任何问题。

重要的是要注意EEPROM的故障模式。大多数“ EEPROM破坏器”项目会反复进行读/写操作,直到完全不写入数据为止。在此之前,EEPROM仍然会损坏。这将通过在合理的时间内未保留数据来体现。由于这个原因,依靠超过100,000个写周期是不明智的。

EEPROM与ATmega上的RAM不同。编写它不是简单或快速的,但是将它包装在一个友好的Arduino库中,向用户隐藏了这种复杂性。

间接寻址的第一层是EEPROM库,这很简单],仅调用另外两个函数进行读写。这将调用eeprom_write_byte,位于此处

此功能使用内联汇编,因此可能不容易理解。有一个很容易理解的评论:

设置编程模式:擦除和写入

这暗示了处理EEPROM的复杂性之一-要写入EEPROM,首先需要擦除它。这意味着,如果您调用EEPROM.write(),则无论您要写入的值如何,它都会执行一个写周期。

这意味着重复写入0xFF可能与写入0xFF,0x00,0xFF,0x00等具有相同的效果。

有多种方法可以解决此问题-您可以尝试在EEPROM.write()之前调用EEPROM.read()以查看该值是否已经相同,但这会花费更多时间。

还有其他技术可以避免EEPROM过度磨损,但是其使用方式取决于您的应用程序。



9

我曾经在最大额定周期为一百万的外部EEPROM上进行过实验。大约花费了600万个周期才成为严重的腐败,在此之前,它已经发生了零星的腐败。

当您说不更改值时,我假设您多次将同一数据写入一个地址。尽管几乎不会给周围的细胞带来压力,但这几乎可以肯定会给生命带来压力。


2

http://hackaday.com/2011/05/16/destroying-an-arduinos-eeprom/

Arduino插入壁式疣中并坐在“在沙发后面几个月了”。EEPROM在47天和1,230,163个周期后看到了第一次写入错误。这比atmel数据表上的规格好一个数量级,但与类似实验的结果类似。


这似乎太高了。我以前听说过15万到20万,但是从来没有听说过:o
asheeshr 2014年

5
问题在于这不能检测到所有故障模式。当EEPROM损坏时,将保持数据的时间逐渐减少。在100,000个周期内,Atmel保证20年的数据保留。除此之外,数据保留减少了。当达到1.2m个周期时,您会看到一个错误,这是一个立即错误。在1,230,160个周期中,可能没有立即出现错误,但是数据可能只保留了几天。
Cyber​​gibbons

0

神奇的解决方案-EEPROM.update()函数,如果您不想在编写之前就对Cyber​​gibbons所说的阅读进行编码。它确实做到了:

EEPROM.update(地址,值);

仅当值与已存储的值不同时,才会对内存进行写操作并对其施加压力。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.