Ich möchte ein paar (ab sofort 8) IR-Codes im EEPROM meines Boards speichern. Es wäre großartig, wenn jemand ein paar Tipps vorschlagen könnte, um die Lebensdauer zu maximieren.
Die IR-Codes in meiner Skizze werden in einer Reihe von vorzeichenlosen Longs gespeichert.
Ich weiß, dass die Anzahl der Male, die ich in das EEPROM schreibe, << 100.000 Mal sein wird, möchte aber trotzdem meine Skizze optimieren. + würde bei zukünftigen Projekten helfen
Antworten:
Ich kann mir ein paar vorstellen:
...
3 - 7 sind wirklich Beispiele für die Implementierung von # 2.
quelle
Die andere Antwort erwähnte einige allgemeine Ideen; Hier sind einige spezifischere Hinweise.
• Sie können Ihre Schreibvorgänge einzelner Bytes durch eine Routine leiten, die die EEPROM-Zelle vor dem Schreiben liest. Wenn sich ihr Wert nicht ändert, wird nicht geschrieben.
• Für den Lastausgleich können Sie den EEPROM-Adressraum in k Buckets unterteilen, wobei k = ⌊E / (n + 1) ⌋, wobei n = Datenarraygröße und E = EEPROMgröße. Initialisieren Sie ein Verzeichnis, ein Array von m Bytes, die alle auf k gesetzt sind, mit m = En · k. Wenn Ihr Gerät startet, liest es das Verzeichnis durch, bis es den aktuellen Eintrag findet, ein Byte ungleich k. [Wenn alle Verzeichniseinträge gleich k sind, initialisieren Sie den ersten mit 0 und fahren Sie von dort fort.] Wenn der aktuelle Verzeichniseintrag j enthält, enthält Bucket j aktuelle Daten. Wenn Sie neue Daten schreiben müssen, speichern Sie j + 1 im aktuellen Verzeichniseintrag. Wenn dies gleich k ist, initialisieren Sie den nächsten Verzeichniseintrag auf 0 und fahren Sie von dort fort. Beachten Sie, dass Verzeichnisbytes ungefähr den gleichen Verschleiß aufweisen wie Bucket-Bytes, da 2 · k> m ≥ k ist.
quelle
Wenn Ihre Daten nur einen kleinen Teil Ihres EEPROM belegen, können Sie einen der Algorithmen zur Verschleißnivellierung verwenden. Die Essenz dieser Algorithmen besteht darin, jedes Mal an einen anderen Ort zu schreiben, sodass die Schreibvorgänge auf mehrere Orte verteilt sind, während jeder Ort unter der Grenze von 100.000 Schreibvorgängen bleibt.
Es gibt mehrere solcher Algorithmen diskutiert hier , die Sie selbst implementieren könnte. Alternativ können Sie auch eine Bibliothek wie diese verwenden .
quelle