Forum: Mikrocontroller und Digitale Elektronik EEPROM Schreibzyklen erhöhen


von Alex (Gast)


Lesenswert?

hi,

ich muss einige wenige parameter bis zu 1mio mal stromlos abspeichern. 
eeproms sind ja typisch mit 100k beschränkt, da ich jedoch nur wenig 
werte hab und ein seeehr grosses EEPROM (500byte) bin ich auf der suche 
nach einer geschickten lösung wie ich die eeprom-zellen abwechselnd 
beschreiben kann  .... o.ä.

um das rad nicht neu erfinden zu müssen - kennt vielleicht jemand eine 
nette idee/umsetzung dazu?


danke für eure kreativen ideen :),
alex

von Michael H. (michael_h45)


Lesenswert?

Alex schrieb:
> eeproms sind ja typisch mit 100k beschränkt
die sind nicht beschränkt... die gehen kaputt.
was du suchst heißt wear-leveling.

von Georg G. (df2au)


Lesenswert?

Als Anfang:
http://en.wikipedia.org/wiki/Wear_leveling

Und dann schau dir als erstes an, ob dein EEProm auch kleine Blöcke 
löschen kann. Die Zahl der unabhängigen Blöcke kannst du (grob) als 
Faktor für die Erhöhung der Lebensdauer nehmen - sofern ein Datensatz in 
einen Block passt.

Ansonsten gibt es immer noch die Alternative, mit einem statischen RAM 
und Stützbatterie zu arbeiten. Fertige Bausteine gibt es als "Zero Power 
RAM".

von Rene S. (Firma: BfEHS) (rschube)


Lesenswert?

Nimm einfach ein F-RAM die haben das gleiche Pinout, die gleiche 
Schnittstelle und > 10 Mio Schreibzyklen.

http://www.ramtron.com/products/nonvolatile-memory/serial.aspx

Fertig.

Gruß aus dem sonnigen Berlin

von amateur (Gast)


Lesenswert?

Hast Du mal daran gedacht eine wirklich gute Spannungsüberwachung zu 
implementieren?
Das bietet Dir die Möglichkeit alles im RAM zu halten, bis Dir jemand 
den Hals zudreht.
Ein etwas größerer Kondensator, der nur die CPU stützt und mit dem 
Bad-Power-Signal, welches eine entsprechende Unterbrechung generiert, 
sollte man auch glücklich werden können.

von Alex (Gast)


Lesenswert?


von Thosch (Gast)


Lesenswert?

Rene Schube schrieb:
> Nimm einfach ein F-RAM die haben das gleiche Pinout, die gleiche
> Schnittstelle und > 10 Mio Schreibzyklen.

Und außerdem kein Warten aufs Schreiben, denn das Schreiben ist genauso 
schnell wie Lesen bzw. so schnell wie das Interface die Schreibdaten 
übertragen kann.

Ich benutze EEPROMs nur noch für selten zu ändernde Daten wie 
Seriennummern, Systemoptionen, Lizenzschlüssel usw. (falls ich die nicht 
gleich mit im Flash ablegen kann)

ansonsten FRAM oder als günstigere Alternative dazu MRAM,
pin- und protokollkompatibel zu FRAM, aber günstiger.
Solange man nicht mit starken Magnetfeldern zu rechnen hat, eine echte 
Alternative zu FRAM.

http://www.everspin.com/

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Microchip schreibt ins Datenblatt zum 24C32 I²C EEPROM:
•  Endurance:
-  10,000,000 Erase/Write cycles
guaranteed for High Endurance Block
-  1,000,000 E/W cycles guaranteed for
Standard Endurance Block

Das wären also auch ohne Tricks die geforderten 1 Mio. mal. Allerdings 
ist es trotzdem auf jeden Fall eine Überlegung wert, die Strategie zu 
ändern.

von Peter D. (peda)


Lesenswert?

Alex schrieb:
> eeproms sind ja typisch mit 100k beschränkt

Also Atmel gibt für den AT24C512 1Mio an.

Ich denken aber nicht, daß Du das Gerät wirklich 1Mio mal ausschaltest. 
Bzw. dann ist nicht der EEPROM die Ausfallquelle, sondern der 
Netzschalter.

von Fabian O. (xfr)


Lesenswert?

Spontane Idee:
- Datenstruktur mit allen Werten definieren.
- An Anfang oder Ende der Datenstruktur ein Feld "Version" einfügen.
- Bei jeder Änderung eines Werts wird
  - die aktuelle Datenstruktur gelesen (bzw. liegt schon im RAM).
  - der Wert in der Struktur geändert.
  - der Wert von Version um eins erhöht.
  - die Datenstruktur hinter die Position der aktuellen Struktur ins 
EEPROM geschrieben (ggf. an der einzeln löschbaren Blockgröße 
ausgerichtet). Falls es dort nicht mehr hinpasst, an den Anfang des 
EEPROMS.
  - falls Version vom Maximalwert auf 0 überläuft, werden alle 
Versions-Felder im EEPROM zurück auf 0 gesetzt.
- Zum Lesen der aktuellen Version (nach dem Einschalten) wird das 
komplette EEPROM gelesen und nach der Datenstruktur mit dem höchsten 
Wert von Version gesucht.
- Außerdem nur immer die Werte neu schreiben, die sich geändert haben 
(eeprom_update_block() beim AVR).

von eep (Gast)


Lesenswert?

eine schon etwas ältere App.Note von Atmel:
AVR101: High Endurance EEPROM Storage

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.