Mikrocontroller-Tipp EEPROM im Flash-Speicher emulieren
Häufig stellt sich der Entwickler die Frage, wie kann ich wichtige Daten im nicht flüchtigen Speicher sichern, wenn ich auf dem Chip kein EEPROM zur Verfügung habe und kein externes EEPROM einsetzen...
Anbieter zum Thema
Häufig stellt sich der Entwickler die Frage, wie kann ich wichtige Daten im nicht flüchtigen Speicher sichern, wenn ich auf dem Chip kein EEPROM zur Verfügung habe und kein externes EEPROM einsetzen kann.Der Hauptunterschied zwischen einem Flash-Speicher und einem EEPROM-Speicher ist, dass man bei dem EEPROM-Speicher jede Zeile individuell löschen und schreiben kann. Beim Flash-Speicher kann man zwar Zellen individuell programmieren, aber nicht löschen.Man kann immer nur eine ganze Programmspeicher-Page löschen. Ein weiteres Unterscheidungsmerkmal ist die maximale Anzahl der Schreib-/Löschzyklen. Bei einem EEPROM können diese einige hunderttausend sein. Beim FLASH sind es in aller Regel nur 10 000 Schreib-/Löschzyklen. In Anbetracht dieser Unterschiedsmerkmale ergeben sich Kriterien für die Emulation von EEPROM in Flash: Die Anzahl der Schreib-/Löschzyklen ist beim Flash kleiner als beim EEPROM und Daten können beim Flash nur auf einer Page gelöscht werden und nicht individuell, wie bei einem EEPROM.Die Größe der Programmspeicher-Page kann von Controller zu Controller verschieden sein. Beim MCS12C32 zum Beispiel ist eine Page 512 Byte groß. Man kann bei der EEPROM-Emulation im Flash-Programmspeicher zwei Ansätze wählen: a) Man beschreibt und löscht eine Programmspeicher-Page jedes Mal, wenn Daten gesichert werden sollen. Diese Methode hat den Nachteil, dass die Variablen nur bis zu 10 000-mal geschrieben werden können. Diese Methode kann angewandt werden für Variablen, die nur wenig über die Lebenszeit des Produktes verändert werden.b) Alle Daten werden in einer oder mehreren Flash-Pages nacheinander abgespeichert. Diese Methode wird hier beschrieben. Angenommen die zu speichernden Daten bestehen aus 16 Byte. Diese 16 Byte können zum Beispiel nach einem Power-up in das RAM kopiert werden. Im RAM werden diese Daten jetzt bearbeitet und verändert. Die Daten werden vom RAM in den Flash-Speicher kopiert, wobei die jetzt veränderten Daten hinter den vorherigen Daten geschrieben werden. Somit besteht im Programmspeicher jetzt eine Kopie der neuen und der vorherigen Daten. Wie kann man jetzt aber herausfinden, welche Daten aktuell sind? Dieses kann man erreichen, indem man ein selbst definiertes EOF-(end-of-File-)Zeichen nach dem letzten Datum programmiert. Man muss nur sicherstellen, dass das EOF-Zeichen nicht gleich einem gespeicherten Datum ist. Ist die Page voll beschrieben mit Daten, so wird diese gelöscht und wieder von vorne beschrieben. Der Vorteil dieser Methode ist, dass sich die Anzahl der Schreibzyklen für die Variablen um den Faktor „Seitengröße geteilt durch Anzahl der Variablen“ erhöht. In unserem Fall also um den Faktor 16 (Pagesize = 512 Byte/32 Byte (inklusive EOF-Zeichen)). In diesem Beispiel können die Variablen also bis zu 160 000-mal in die Programmspeicher-Page geschrieben werden. Wenn viele Variablen im nicht flüchtigen Speicher gesichert werden müssen, ist es ratsam, zwei oder auch mehr Programmspeicher-Pages als Datenspeicher zu reservieren.
(ID:155147)