Hallo, ich programmiere eine Datenlogger-Funktionalität auf einem fertigen Mikrocontroller-Gerät. Das Gerät verfügt über ein Eeprom aus der M95*-Serie von STMicro. Leider hab ich das Problem, dass beim Abschalten des Geräts nicht sichergestellt ist, dass nicht gerade noch auf das Eeprom geschrieben wird. Eine Pufferschaltung fällt leider aus, da das Gerät schon fertig ist. Gibt es vielleicht pinkompatible Eeproms, bei denen sichergestellt ist, dass bei einem unterbrochenen Speichervorgang wenigstens die Daten nicht zerstört werden, die vorher in dem Speicherbereich standen? Das würde mir nämlich reichen. Ansonsten müsste ich wohl irgendwie redundant abspeichern und die halb geschriebenen Daten von woanders wiederherstellen. Schönen Gruß Gabriel
>dass bei einem unterbrochenen Speichervorgang wenigstens die Daten nicht >zerstört werden, die vorher in dem Speicherbereich standen? Das kannst Du nie ausschließen und es hängt hauptsächlich vom Timing ab, wann die Spannung unter den kritischen Wert gefallen ist und ob das EEPROM da bereits mit dem Tunneln der Elektronen angefangen hat. Das Problem muß viel eher vom Controller erkannt werden, aber wenn der Befehl an´s EEPROM ´raus ist, kann der auch nichts mehr machen.
Gibt es, gewissermassen. FRAM von RAMTRON. Erhältlich beispielsweise bei TME. Die schreiben so schnell wie RAM und sind pinkompatibel zu den üblichen seriellen I2C/SPI EEPROMs. Wenn man da dafür sorgt, dass der Powerdown kontrolliert erfolgt (also die Leitungen nicht wild rumwackeln), kann da kaum etwas passieren.
Quark. Wenn der Schreibbefehl an das FRAM gegengen ist und während des Schreibvorganges der Saft abgestellt wird, ist der Zustand der Speicherzelle danach ebenso undefiniert. Das kann kein Baustein erkennen, daß der Stromausfall unbeabsichtigt war und somit die alten Daten in den Zellen verbleiben sollen.
> Wenn man da dafür sorgt, dass der Powerdown kontrolliert > erfolgt (also die Leitungen nicht wild rumwackeln), > kann da kaum etwas passieren Genau das ist ja das Problem ...
@travelrec: Stimmt schon, nur hängt das erheblich davon ab, wie schnell oder langsam der Schreibvorgang ist. FRAMs haben keine spürbare Schreibverzögerung, d.h. um Datenverlust zu provozieren, muss man den Strom schon hart mittendrin abschalten während es grad schreibt. Und das ist bei gleicher Schreibrate schonmal weit weniger wahrscheinlich. Wenn man nun das übliche Minimum an Kondensatoren drinhat (100nF plus ab und zu 10µF) und den Controller mit BOD fährt, dann wird das Protokoll zwischen Controller und FRAM abgebrochen, bevor dem FRAM endgültig der Saft ausgeht und sollte damit in der Lage sein, halb durchgeführte Schreibvorgänge mit undefiniertem Inhalt auf die Speicherzellen zu vermeiden. Was dabei natürlich immer noch passieren kann: dass ein Block halb geschrieben wurde. Das lässt sich aber m.E. softwareseitig lösen.
Rufus t. Firefly wrote:
> Genau das ist ja das Problem ...
Mit brownout/low-voltage-detector plus passendem Pullup/down hat man das
im Griff.
Wenn man natürlich auch das vergessen hat, dann geht garnichts mehr
richtig. Dann kann es sogar passieren, dass irgendwelche wirren Zellen
schon beim Neustart über Bord gehen.
Wenn genug Platz ist, kann man die Werte immer abwechselnd an zwei Speicherorte schreiben (z.B. gerade und ungerade Adressen), zusammen mit einem 2-bit Wert, der jedesmal hochgezählt wird. So weiss man beim nächsten lesen, welcher der aktuellere Wert ist - bzw dass etwas schiefgelaufen ist, wenn der Zähler an einem Speicherort nicht 1 höher ist als am anderen. Wenn etwas schiefläuft, ist der Wert der Speicherzelle außerdem wahrscheinlich 0xff (weil sie ja erst gelöscht wird). Wenn das möglich ist, könnte man diesen Wert als Daten-Wert ausschließen und dementsprechend Werte mit 0xff verwerfen und auf die jeweils andere Speicherzellen zurückgreifen. Ich würde die Daten also in 4-Bit Werte aufteilen (oder vielleicht kommt man mit 4 Bit eh aus?), den Rest des Bytes für einen 2-Bit-Zähler und ein festes Bit-Muster als Plausibilitäts-Check verwenden und dann immer abwechselnd schreiben. So vervierfacht sich allerdings der Speicherbedarf und es muss etwas gerechnet werden. Sowas war wohl auch mit "irgendwie redundant" gemeint.
An sowas wie bei Oliver ähnliches hatte ich softwareseitig auch gedacht. Nur dass man bei FRAM effektiv keine Begrenzung der Anzahl Schreibzyhlen hat, und daher für diese zweite Speicherstelle immer die gleiche Stelle verwenden kann. Wobei bei sowas eine CRC/Prüfsumme hinter dem Datensatz immer sinnvoll ist. Egal was für Speicher dafür verwendet wird.
Hallo, danke für die Inputs soweit. Die FRAMs sind ja tatsächlich so wie es aussieht keine schlechte Sache, leider ist aber auch keins in der Größe und dem Temperaturbereich verfügbar, wie ich es bräuchte. Und auch kein Betrieb bei 5V. Als Denkanstoß für zukünftige, neue Sachen aber auch jeden Fall brauchbar. Ich denke wohl ich werde die Daten doppelt speichern und mit einer Prüfsumme sichern, dann kann ich die fehlerhaften Daten aus der Kopie wiederherstellen.
Stimmt, Prüfsumme ist auf jeden Fall sicherer als so ein Bit-Muster.
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.