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
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.
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".
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
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.
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/
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.
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.
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).
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.