EEPROM als Ringspeicher

Gast #310312
Lesenswert?
• ▲
▼
Hallo erstmal,

ich hatte hier und da schon mal gelesen, dass man - zur Erhöhung der
Haltbarkeit der einzelnen Zellen - die Daten bei kontinuierlicher
Erfassung auch als Ringspeicher auslegen kann.

Jetzt stellt sich für mich allerdings die Frage: Wo speicher ich den
aktuellen Pointer damit dieser im Falle eines Stromausfalls nicht
verloren geht...

Ein Beispiel wäre für mich eine Uhr (ohne Pufferung), die auch nach
einem Reset aus egal welchem Grund an der Stelle weiterläuft an der sie
aufgehört hat (vergleichbar einer Analoguhr). Bei einer Sicherung der
Zeit im Sekundentakt wären nach 28h die 100.000 Schreibzyklen bei einer
Zelle erreicht.

Wie könnte man sowas am sinnvollsten reralisieren?

Eine Überlegung war, die ersten 2Byte als Index zu nehmen, welche dann
auf einen Datenblock bestehend auch 2Byte Schreibcounter+Nutzdaten
verweisen. Damit würde sich bei 65535 x 65535 eine Haltbarkeit (wenn
das EEPROM groß genug ist - also eher extern) von 136 Jahren - was dann
reichen sollte :)

Gäb es sinnvollere Methoden sowas zu machen?
Gast #310313
Lesenswert?
• ▲
▼
Wenn in den Daten keine Null vorkommen kann, was bei der Uhrzeit der
Fall ist, könnte man den ganzen Speicher einmalig löschen, und wieder
einzeln füllen, bis das Ende erreicht ist. Ich meine, der Löschvorgnag
ist die eignetlich stressende Operation, das wäre damit selten. Wenn
ein "Blank" gleich $FF ist, wie in Eproms, wäre das natürlich
sinnvoller.
Gast #310314
Lesenswert?
• ▲
▼
Speichere doch Deine Daten im Ram, und erst bei Abschaltung /
Stromausfall speicherst Du sie dann im EEprom. Dazu kannst Du die
Versorgungsspannung z.B. über einen A/D messen und die Versorgung des
uCs z.B. mit einem GoldCap - Kondensator puffern. Das Schreiben auf
EEprom geht ja meist sehr schnell..

Alternativ kannst Du den EEprom mti Startwerten voreinstellen (z.B. Du
schreibst ihn mit FF voll) und vermeidest diesen Wert in Deinem
Programm - dann mußt Du nach dem Reset nur soweit lesen bis "FF"
kommt (davor steht Dein letzter Wert) und den gesamten Baustein einmal
löschen wenn die letzte Zelle erreicht ist.
Gast #310315
Lesenswert?
• ▲
▼
Vorschlag:

Die Speisespannung überwachen (nicht die vermutliche stabilisierte
Betriebsspannung) und einen Interrupt auslösen, wenn diese einen
minimalen Wert unterschreitet. Jetzt sofort den Poniter im Eprom
ablegen. Für diesen Vorgang reichen ein paar 100uF als Stützkondensator
aus. Das würde die Anzahl der Schreibzyklen deutlich minimieren.

Gruß
Alex
Gast #310316
Lesenswert?
• ▲
▼
ich hab immer nach den aktuellen Daten eine Endekennung reingeschrieben.
Beim nächsten durchlauf einfach diese Endekennung ersetzt und eine neue
angehängt. Incl. der Prüfung ob er am Speicherende angekommen ist.

Läuft schon seit einiger Zeit sehr gut!

Gruss Torsten

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.