mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik EEPROM emulation in in STM32F10x


Autor: P. Ostrich (neop13)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
^Hat das schonmal jemand gemacht und kann mir weiter helfen?

Ich will daten einlesen und diese dann fest Speichern.
lg

Autor: Hannes B. (horton)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Gerd M. (avrgerd)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schau Dir mal die AN2594 von ST an.

Dazu gibt es die Firmware Lib mit Beispielen.

Gruß,
avrGerd

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Hannes B. (horton)
Datum:

Bewertung
0 lesenswert
nicht 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...?

Autor: P. Ostrich (neop13)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hannes B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.