EEPROM-Verschleiß vermeiden

Zusammenfassung: Wenn Sie einen Wert im EEPROM regelmäßig alle paar Minuten (oder einige Sekunden) aktualisieren, kann das Problem des Verschleißes der EEPROM-Zellen auftreten. Um dies zu vermeiden, müssen Sie die Häufigkeit der Einträge in der Zelle reduzieren. Bei einigen EEPROM-Typen können sogar Aufnahmegeschwindigkeiten von mehr als einmal pro Stunde ein Problem sein.



Wenn Sie Daten aufzeichnen, vergeht die Zeit schnell


EEPROM wird häufig zum Speichern von Einstellungen und Protokollen auf eingebetteten Systemen verwendet. Beispielsweise möchten Sie möglicherweise, dass die Black-Box-Funktion die neuesten Daten zum Zeitpunkt eines Unfalls oder eines Stromausfalls aufzeichnet. Ich habe Spezifikationen gesehen, die die Aufzeichnung solcher Daten alle paar Sekunden erfordern.

Das Problem ist jedoch, dass das EEPROM über eine begrenzte Ressource für Datensatznummern verfügt. Nach 100.000 oder einer Million Datensätzen (abhängig vom jeweiligen Chip) treten bei einigen Ihrer Systeme Probleme mit EEPROM-Fehlern auf. (Suchen Sie im Datenblatt nach einer bestimmten Nummer. Wenn Sie eine große Anzahl von Geräten freigeben möchten, ist der „Worst Case“ wahrscheinlich wichtiger als der „typische“.) Eine Million Datensätze scheinen eine große Zahl zu sein, aber tatsächlich wird sie sehr schnell enden. Schauen wir uns ein Beispiel an und nehmen an, dass wir die gemessene Spannung alle 15 Sekunden in einer Zelle speichern müssen.

1.000.000 Datensätze mit einem Datensatz in 15 Sekunden ergeben Datensätze pro Minute:
1.000.000 / (4 * 60 Minuten / Stunde * 24 Stunden / Tag) = 173,6 Tage.
Mit anderen Worten, Ihrem EEPROM gehen in weniger als 6 Monaten die Reserven von einer Million Datensätzen aus.

Unten sehen Sie eine Grafik, die die Tragezeit (in Jahren) basierend auf dem Aktualisierungszeitraum einer bestimmten EEPROM-Zelle zeigt. Die Grenzlinie für ein Produkt mit einer Lebenserwartung von 10 Jahren ist ein Update alle 5 Minuten und 15 Sekunden für einen Chip mit einer Ressource von 1 Million Datensätzen. Bei einem EEPROM mit einer 100K-Ressource können Sie eine bestimmte Zelle höchstens einmal alle 52 Minuten aktualisieren. Dies bedeutet, dass Sie nicht hoffen sollten, die Zelle alle paar Sekunden zu aktualisieren, wenn Ihr Produkt jahrelang und nicht monatelang funktionieren soll. Die obigen Skalen sind linear, bei diesem Gerät gibt es jedoch auch sekundäre Faktoren wie Temperatur und Zugriffsmodus.



Frequenz verringern


Der einfachste Weg, das Problem zu lösen, besteht darin, Daten seltener zu schreiben. In einigen Fällen ermöglichen dies die Systemanforderungen. Oder Sie können nur mit größeren Änderungen aufnehmen. Beachten Sie jedoch bei einem ereignisgebundenen Eintrag ein mögliches Szenario, in dem der Wert ständig schwankt und einen Strom von Ereignissen auslöst, die zu einem Verschleiß des EEPROM führen.
(Es ist schön, wenn Sie feststellen können, wie oft ein EEPROM aufgezeichnet wurde. Dies erfordert jedoch einen Zähler, der im EEPROM gespeichert wird ... und das Problem wird zu einem Zählerverschleißproblem.)

Unterbrechung der Ernährungsreduktion


Einige Prozessoren verfügen über einen Low-Power-Interrupt, mit dem ein letzter Wert in das EEPROM geschrieben werden kann, während das System aufgrund eines Stromausfalls heruntergefahren wird. Im Allgemeinen speichern Sie den gewünschten Wert im RAM und speichern ihn erst im EEPROM, wenn Sie die Stromversorgung ausschalten. Oder Sie schreiben von Zeit zu Zeit das EEPROM und schreiben im Rahmen des Herunterfahrens eine weitere Kopie in das EEPROM, um sicherzustellen, dass die neuesten Daten geschrieben werden.
Es ist wichtig sicherzustellen, dass ein großer Leistungskondensator vorhanden ist, der eine Spannung aufrechterhält, die ausreicht, um das EEPROM ausreichend lange zu programmieren. Dies funktioniert möglicherweise, wenn Sie einen oder zwei Werte schreiben müssen, jedoch keinen großen Datenblock. Achtung, es gibt viel Raum für Fehler!

Ringpuffer


Die klassische Lösung für das Verschleißproblem besteht darin, den FIFO-Ringpuffer zu verwenden, der N letzte Werteinträge enthält. Sie müssen auch einen Zeiger auf das Ende des Puffers im EEPROM speichern. Dies reduziert den EEPROM-Verschleiß um einen Wert, der proportional zur Anzahl der Kopien in diesem Puffer ist. Wenn ein Puffer beispielsweise 10 verschiedene Adressen durchläuft, um einen einzelnen Wert zu speichern, wird jede bestimmte Zelle zehnmal weniger geändert und die Schreibressource zehnmal erhöht. Sie benötigen außerdem einen separaten Zähler oder Zeitstempel für jede der 10 Kopien, damit Sie bestimmen können, welche zum Zeitpunkt des Herunterfahrens die letzte ist. Mit anderen Worten, Sie benötigen zwei Puffer, einen für den Wert und einen für den Zähler. (Wenn Sie den Zähler unter derselben Adresse speichern, führt dies zu einer Verschlechterung, da er mit jedem Aufnahmezyklus zunehmen sollte.) Der Nachteil dieser Methode istdass Sie 10 Mal mehr Platz benötigen, um 10 Mal länger zu leben. Sie können klug sein und den Zähler zusammen mit den Daten packen. Wenn Sie eine große Datenmenge schreiben, ist das Hinzufügen einiger Bytes zum Zähler kein so großes Problem. In jedem Fall benötigen Sie jedoch viel EEPROM.
Atmel hat eine Appnote vorbereitet, die alle blutigen Details enthält:
AVR-101: Hochleistungs-EEPROM-Speicher: www.atmel.com/images/doc2526.pdf

Ein Sonderfall für den Zähler der Anzahl der Datensätze


Manchmal müssen Sie den Zähler speichern, nicht die Werte selbst. Beispielsweise möchten Sie möglicherweise wissen, wie oft das Gerät eingeschaltet wurde oder wie lange Ihr Gerät arbeitet. Das Schlimmste an Zählern ist, dass sie ständig das niedrigstwertige Bit ändern und die unteren EEPROM-Zellen schneller abnutzen. Hier können jedoch einige Tricks angewendet werden. Das Applet von Microchip enthält mehrere clevere Ideen, z. B. die Verwendung eines Gray-Codes, sodass sich nur ein Bit eines Multibyte-Zählers ändert, wenn sich der Zählerwert ändert. Sie empfehlen auch die Verwendung von Korrekturcodes, um den Verschleiß auszugleichen. (Ich weiß nicht, wie effektiv die Verwendung solcher Codes sein wird, da dies davon abhängt, wie unabhängig die Fehler in den Bits in den Bytes des Zählers sind. Die Verwendung erfolgt auf eigenes Risiko, ca. Autor). Siehe Anhang:ww1.microchip.com/downloads/de/AppNotes/01449A.pdf

Hinweis: Für diejenigen, die mehr wissen möchten, hat Microchip ein Dokument mit detaillierten Informationen zur Anordnung der EEPROM-Zellen und deren Verschleiß mit Diagrammen erstellt:
ftp.microchip.com/tools /memory/total50/tutorial.html

Lassen Sie mich wissen, wenn Sie interessante Ideen zum Umgang mit EEPROM-Kleidung haben.

Quelle: Phil Koopman, Better Embedded System SW
Betterembsw.blogspot.ru/2015/07/avoiding-eeprom-wearout.html

Anmerkung des Übersetzers: In den letzten Jahren sind EEPROM-Chips mit einer Seitenlöschorganisation (ähnlich wie FLASH-Chips) erschienen, bei der es möglich ist, Zellen byteweise logisch zu adressieren (lesen, schreiben und löschen), der Chip jedoch die gesamte Seite unsichtbar für den Benutzer löscht und sie mit neuen Daten überschreibt. Jene. Nachdem wir die Zellen an Adresse 0 gelöscht haben, haben wir die Zellen mit den Adressen 0 ... 255 (mit einer Seitengröße von 256 Bytes) tatsächlich gelöscht und neu geschrieben, sodass ein Puffertrick in diesem Fall nicht hilft. Wenn die Aufzeichnungsressource einer solchen Mikroschaltung erschöpft ist, fällt nicht eine Zelle aus, sondern die gesamte Seite. In Datenblättern für solche Mikroschaltungen wird die Aufzeichnungsressource für die Seite und nicht für eine bestimmte Zelle angegeben. Siehe zum Beispiel Datenblatt zu 25LC1024 von Microchip.

Source: https://habr.com/ru/post/de385213/


All Articles