Hallo,
ich habe hier einen SST25VF032B von Microchip, den ich möglichst
schonend beschreiben will:
http://ww1.microchip.com/downloads/en/DeviceDoc/20005071B.pdf
Gibt es da Ansätze/bewährte Algorithmen, um die verschiedenen Seiten
gleichmäßig zu nutzen?
Danke! Peter
Danke für die Antworten.
Ich werde mir ein einfaches System selber schreiben, indem ich einfach
den Sektor wechsel, sobald ein Schreibfehler auftritt.
Dabei stellt sich die Frage: Was passiert, wenn ein Schreibfehler
auftritt? Wird dann der komplette Flash unbrauchbar? Ich denke nicht,
sondern nur der Sektor, oder?
Peter schrieb:> indem ich einfach> den Sektor wechsel, sobald ein Schreibfehler auftritt
Ich glaube nicht, dass das genügt - es ist ja durchaus möglich, dass bei
einer verbrauchten Zelle zwar noch kein Fehler beim Schreiben auftritt,
aber beim späteren Lesen. Besser von vornherein verteilen, z.B. jeden
Tag einen neuen Sektor benutzen, und das reihum.
Georg
Werden sich Probleme mit einer Zelle gleich als Schreibfehler äußern?
Wird die Zelle nicht erst die Fähigkeit verlieren ihre Daten über
längere Zeit zu halten und sich erste Ausfälle durch Lesefehler äußern?
Georg schrieb:> Ich glaube nicht, dass das genügt - es ist ja durchaus möglich, dass bei> einer verbrauchten Zelle zwar noch kein Fehler beim Schreiben auftritt,> aber beim späteren Lesen.
Das kann ich prüfen, indem ich nach dem Schreiben sofort zurücklese.
Steffen Rose schrieb:> Werden sich Probleme mit einer Zelle gleich als Schreibfehler äußern?> Wird die Zelle nicht erst die Fähigkeit verlieren ihre Daten über> längere Zeit zu halten und sich erste Ausfälle durch Lesefehler äußern?
Keine Ahnung wie ein Flash das macht. Deshalb stell ich ja die blöden
Fragen.
Peter schrieb:> Das kann ich prüfen, indem ich nach dem Schreiben sofort zurücklese.
Da kannst du aber nicht den Datenerhalt nach einer bestimmten Zeit
prüfen. Das ist meist der Knackpunkt. Du schreibst was rein, liest es
zurück und es ist okay. Liest du die Zelle später nochmal, kann schon
ein Datenverlust eingetreten sein, weil zum Beispiel ein Bit gekippt
ist.
Daher ist es wirklich besser, nicht erst auf einen Fehler zu warten,
sondern die Daten beim Schreiben zu verteilen und damit den Flash
gleichmäßig zu "abzunutzen".
Ich hab das in einer Anwendung als Ringpuffer gemacht. D.h. der Flash
mit seinen einzelnen Seiten (Pages) wird fortlaufend wie ein Endlosband
beschrieben, d.h. wenn man an der obersten Page angekommen ist, fängt
man unten wieder an. In jeder Page steht bei mir ein kompletter
Datensatz incl. 32 Bit Seriennummer. Damit kann man nach dem Einschalten
die Page mit der höchsten Seriennummer raussuchen und dort dann weiter
schreiben. Bei garantierten 100k Schreibzyklen pro Page kann man Page x
100k mal den Datensatz schreiben.
Als zusätzliche Fehlersicherung empfiehlt sich bei eher wichtigen Daten
eine CRC, in noch wichtigeren Fällen eine ERC (error correction
code).
Pete K. schrieb:> Superior Reliability– Endurance: 100,000 Cycles (typical)– Greater than> 100 years Data Retention>> Wie oft schreibst Du denn auf eine Zelle?
Wenn man unclever für das Schreiben jedes einzelnen Wertes innerhalb des
Sectors diesen löscht und neu beschreibt, vervielfachen sich die Zyklen
schnell.
Habe eine Frage zu diesem Thema.
Sie beschäftigt mich schon länger, habe aber noch nichts darüber gelesen
oder gehört:
Es geht um NOR-Flash-Speicher. Im gelöschten Zustand steht bekannlich
"FF FF FF..." im Speicher.
Jetzt kann ich z.B. den Speicher mit "55 AA 00..." überschreiben.
Meiner Theorie nach könnte ich doch anschließend, wenn ich wollte, ohne
weiteren Löschvorgang den Speicher mit "11 22 00..." überschreiben.
Theoretisch würde ich dabei auch keinen weiteren Zyklus verbrauchen.
Ist das generell zulässig, nicht empfohlen oder sogar strengstens
verboten?
Wer weiß das?
Detlef Weidner schrieb:> Ist das generell zulässig, nicht empfohlen oder sogar strengstens> verboten?
Kommt auf den Chip an.
Manchmal darf man es, manchmal nicht, manchmal nur komplett mit 0
überschreiben.
Detlef Weidner schrieb:> Ist das generell zulässig, nicht empfohlen oder sogar strengstens> verboten?
Das ist überhaupt nicht verboten oder so, sondern sogar ausgesprochen
empfehlenswert, um damit ungültig gewordene Daten zu markieren. Wenn man
nämlich ein fehlertolerantes Flash-Dateisystem entwickelt, muss man auch
damit rechnen, dass der Strom während des Löschens von Blöcken ausfallen
kann. Diese sind dann schon mehr oder weniger "angelöscht". Wenn man
einen Ringspeicher realisiert und alte Blöcke nutzen will, kann man wie
folgt vorgehen:
- In Block <n> zwei auf 1 stehende Statusbits reservieren.
- Statusbit 1 auf 0 setzen und damit signalisieren: Der Löschvorgang für
Block <n+1> wurde gestartet.
- Block <n+1> löschen
- Block <n+1> beschreiben; Statusbits auf 1 lassen
- Anschließend das Statusbit 2 von Block <n> auf 0 setzen und damit
signalisieren, dass Block <n+1> gültige Daten beinhaltet.
Peter schrieb:> Ich werde mir ein einfaches System selber schreiben, indem ich einfach> den Sektor wechsel, sobald ein Schreibfehler auftritt.
Flash ist per definitionem kaputt, wenn die spezifizierte data retention
time nicht mehr eingehalten wird. Wenn Du mit weniger zufrieden bist,
weil Deine Daten vielleicht nach sechs Monaten schon obsolet sind,
kannst Du von einer deutlich höheren Nutzbarkeit ausgehen.
Einen Fehler beim Rücklesen direkt nach dem Schreiben wirst Du erst
bekommen, wenn der Speicher völlig hinüber ist. Vorher sinkt die Zeit,
in der die Daten auslesbar werden, d.h. Du bekommst schon nach einem
Jahr, einem Monat oder einer Woche falsche Werte zurück.
> Dabei stellt sich die Frage: Was passiert, wenn ein Schreibfehler> auftritt? Wird dann der komplette Flash unbrauchbar? Ich denke nicht,> sondern nur der Sektor, oder?
Nur die betroffene Zelle, bei NOR-Flash ist das ein bit.
Heiner schrieb im Beitrag #4276544:
> Tipp:lesen lernen.
Und nicht vergessen: bei FRAM zählt lesen auch als schreiben! Die
1T1C-Zellen werden nach dem (destruktiven) Auslesen refreshed, so dass
Lese- und Schreibzyklen gemeinsam zur Alterung beitragen. Daher kann je
nach Anwendung EEPROM haltbarer sein