Forum: Mikrocontroller und Digitale Elektronik Flash möglichst schonend beschreiben


von Peter (Gast)


Lesenswert?

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

von Little B. (lil-b)


Lesenswert?

Flash EEPROM Emulation mit Wear Leveling wäre mein Ansatz

von Timmo H. (masterfx)


Lesenswert?


von Peter (Gast)


Lesenswert?

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?

von Georg (Gast)


Lesenswert?

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

von Steffen R. (steffen_rose)


Lesenswert?

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?

von Peter (Gast)


Lesenswert?

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.

von Peter (Gast)


Lesenswert?

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.

von npn (Gast)


Lesenswert?

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".

von Falk B. (falk)


Lesenswert?

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).

von Pete K. (pete77)


Lesenswert?

Superior Reliability– Endurance: 100,000 Cycles (typical)– Greater than 
100 years Data Retention

Wie oft schreibst Du denn auf eine Zelle?

von Steffen R. (steffen_rose)


Lesenswert?

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.

von Detlef Weidner (Gast)


Lesenswert?

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?

von Timmo H. (masterfx)


Lesenswert?

Detlef Weidner schrieb:
> Ist das generell zulässig
Ja

von Steffen R. (steffen_rose)


Lesenswert?

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.

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

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.

von Soul E. (Gast)


Lesenswert?

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.

von Soul E. (Gast)


Lesenswert?

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

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.