Forum: Mikrocontroller und Digitale Elektronik STM32 EEPROM Verständnisfrage


von Patrick B. (p51d)


Lesenswert?

Hallo miteinander

Ich bin bei meinen Experimenten mit den STM32 Kontrollern nun beim 
EEPROM angelangt. Im Gegensatz zu den PICs oder AVRs ist hier kein 
normales EEPROM verbaut, sondern es wird über Flash gelöst.
Seit dem Durchlesen dieses Dokuments (AN4061.pdf) bin ich etwas 
verwirrt:
Auf der Seite 9 wird mit der Zeichnung 3 schön gezeigt, wie eine 
Variable "aktualisiert" wird. Nur wenn ich jetzt aber eine Variable 10 
mahl aktualisiere, dann habe ich diese in 10-facher ausführung im Flash? 
Was ist denn der Sinn dahinter? So würde das Flash ja unnötig überfüllt, 
anstelle dass man wie bis anhin einfach den neuen Wert an die 
entsprechende Addresse schreibt.

Entsprechendes Beispiel für eine Kalibiert-Tabelle, deren Grösse am 
Anfang nicht bekannt ist, aber ein Maximum definiert ist (Analogwerte 
bei entsprechender Temperatur):
Wert1    Temp1    Wert2    Temp2

Neue Werte hinzufügen -> kein Problem
Einzelne Zeile löschen -> anscheinend nicht möglich
Einzelne Werte aktualisieren -> möglich, nur wird dieser nicht 
überschrieben

Wäre es auch möglich Strukturen im Flash zu speichern, damit der Zugriff 
sichtlich einfacher wird?

Besten Dank
Gruss
Patrick

von Christian (Gast)


Lesenswert?

Du kannst den Flash immer nur pro PAGE löschen. Danach hat er dann den 
Zustand FF.
Damit man variable Werte Speichern kann arbeitet man in der Regel nach 
folgendem Prinzip:
Man Speichert pro Variable ein Byte das aussagt ob die Variable gültig 
ist. Dabei macht man sich die die Eigenschaft zu nutze das man im Flash 
durch überschreiben Bytes von 1 auf 0 ändern kann. Aber nicht wieder 
ohne Page Erase wieder auf 1.
Also Schreibt man die Variabele und setzt das zusätzliche "gültig" Byte 
von 0xFF z.B. auf 0xFE. Wird die Variable jetzt geändert schreibt man 
diese an einer freihen Stelle neu, setzt wieder das zugehörige "gültig" 
Byte auf 0xFE. Das alte gültig Byte wird dann überschrieben auf z.B. 
0xFC. Beim durchsuchen kann man nun also im festen Raster die gültig 
Bytes abfragen und findet dann anhand des Wertes welche Variable auf der 
Page aktuell den gültigen Wert hat.
Ist die Page voll kopiert man die Variable z.B. auf eine zweite Page, 
und löscht die erste Page wieder. ist die zweite Page voll kopiert man 
wieder auf Page 1 zurück und löscht Page 2.

Ob das jetzt in der App-Note genauso gemacht ist must du schauen. Aber 
zumindest ähnlich.
Problem beim Flash ist halt das man weniger lösch Zyklen hat als z.B. 
bei einem Eeprom. Das ist dafür gebaut einzelne Bytes zu speichern und 
diese auch einzeln ändern zu können. Flash als Eeprom Emulation kann man 
machen wenn sich die Werte nur selten ändern. Dann ist das kein 
wikliches Problem. Werte lesen geht auch schnell.

Problematisch wird es immer dann wenn man mehre Variablen pro Page 
speichert, die Page voll ist und diese dann alle umkopiert werden 
müssen. Das kann in zeitkritschen Anwendungen schon mal das Timing 
durcheinader bringen. Ansonsten funktioniert das auch.

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.