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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.