Forum: Mikrocontroller und Digitale Elektronik EEPROM emulation in in STM32F10x


von P. O. (neop13)


Lesenswert?

^Hat das schonmal jemand gemacht und kann mir weiter helfen?

Ich will daten einlesen und diese dann fest Speichern.
lg

von Hannes B. (horton)


Lesenswert?

Ich werde die Tage anfangen mich damit zu beschäftigen, allerdings für 
den STM32F205. Aber das Grundprinzip sollte das gleiche sein.
Mit dem Beispiel von ST und der entsprechenden Application Note, sollte 
das auch kein Problem werden.

Die Sektoren im Flash, die man verwendet, sollten vermutlich gleich groß 
sein...? Wäre zumindest logisch.

von Gerd M. (avrgerd)


Lesenswert?

Schau Dir mal die AN2594 von ST an.

Dazu gibt es die Firmware Lib mit Beispielen.

Gruß,
avrGerd

von (prx) A. K. (prx)


Lesenswert?

P. Ostrich schrieb:

> Ich will daten einlesen und diese dann fest Speichern.

Inkrementell und häufig in kleinen Einheiten, oder ab und zu einmal ein 
einzelner grosser Brocken?

von Hannes B. (horton)


Lesenswert?

A. K. schrieb:
>> Ich will daten einlesen und diese dann fest Speichern.
>
>
>
> Inkrementell und häufig in kleinen Einheiten, oder ab und zu einmal ein
>
> einzelner grosser Brocken?


Ich hab leider zu spät gesehen, dass der Beitrag reichlich ein Jahr alt. 
Das ist wahrscheinlich für P. Ostrich schon gar nicht mehr aktuell.

Aber für mich ist es natürlich trotzdem interessant. Wie wäre 
unterschiedlich wäre denn die Herangehensweise?
Ich bin davon ausgegangen, dass man die EEPROM Emulation nutzt, wenn man 
beispielsweise hin und wieder eine Parameter in einem Gerät ändern 
möchte.

Wenn man oft Werte schreiben möchte und damit den Flash "abnutzt" sollte 
man dann wohl besser mehr als zwei Sektoren benutzten...?

von P. O. (neop13)


Lesenswert?

Bei mir war es damals eher einmaliges schreiben gewesen... Ist zur 
Signierung von Geräten gedacht. Wenn diese zurückgegeben werden müsste 
dieses natürlich zurückgesetzt werden.
Aber wir haben das damals auch nicht weiter verfolgt, da es nicht mehr 
nötig war.

Von daher bin ich immer noch um Neuigkeiten interessiert

von Hannes B. (Gast)


Lesenswert?

P. Ostrich schrieb:
> Von daher bin ich immer noch um Neuigkeiten interessiert

Das Grundprinzip ist eigentlich recht simpel:
Man benötigt mindestens zwei Sektoren im Flash. Ich habe bei meinem STM 
Sektor 1 und 2 benutzt (beide 16kB). Im Sektor 0 soll noch ein 
Bootloader hin, weshalb mein Programmcode erst im Sektor 3 beginnt.

Die 32bit-Speicherzellen für die EEPROM-Emulation im Flash werden in 
zwei gleich große Speicherzellen unterteilt: für eine virtuelle Adresse 
und den Wert der gespeichert werden soll.
Wird der gewünschte Wert gesetzt, wird immer nur der aktuelle Wert (mit 
der zeugehörigen Adresse) angefügt. Beim Lesen bekommt man immer den 
zuletzt gespeicherten Wert geliefert.
Wenn der Sektor voll ist, wird zu jeder virtuellen Adresse der aktuelle 
Wert in den zweiten Sektor übernommen und danach der erste Sekrot wieder 
gelöscht.
Sobald der zweite Sektor voll ist, geht das Spiel anders herum.

Auf diese Weise kann man die Anzahl der Löschzyklen für die beteiligten 
Sektoren niedrig halten, was besser funktioniert umso mehr Sektoren man 
verwendet.

Von ST gibt's auch Beispielcode dafür, den ich verwende. Momentan ist es 
aber leider noch so, dass mein ST sich die EEPROM Parameter nicht merkt, 
wenn ich die Spannung weg nehme. Werde mal schauen, woran das liegt...

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.