Flash als EEPROM nutzen bei einem STM32F030

Gast #4624440
Lesenswert?

Hallo,

ich habe für den den STM32F030 mehrere Routinen gefunden, die den Flash 
wie ein EEPROM benutzen. Dabei wird immer eine komplette Page neu 
geschrieben, selbst wenn nur 1 Bit in den Daten geändert wurde. Kann man 
bei den ST-Mikrocontrollern den Flash grundsätzlich nur pageweise 
beschreiben oder kann man z.B. auch einzelne 16- oder 32-Bit Werte 
ablegen ohne dass man ein gesamtes Page buffern und dann neu schreiben 
muss (kostet halt ziemlich viel RAM)?

Im Datenblatt habe ich zwar nachgeschaut, werde aber nicht wirklich 
schlau daraus.
#4624465
Lesenswert?

Das Reference Manual sagt:
> The main Flash memory can be programmed 16 bits at a time. [...]
> The Flash memory interface preliminarily reads the value at the
> addressed main Flash memory location and checks that it has been
> erased. If not, the program operation is skipped and a warning is
> issued by the PGERR bit in FLASH_SR register. The only exception to
> this is when 0x0000 is programmed. In this case, the location is
> correctly programmed to 0x0000 and the PGERR bit is not set.
> [...]
> The Flash memory can be erased page by page or completely (Mass Erase).

Um also das ständige Löschen zu vermeiden, müsstest du dir einen 
Wear-Leveling-Algorithmus ausdenken.
#4624524
Lesenswert?

Du kannst schreiben an den Stellen die (noch) auf 0xff stehen, und zwar 
auch in sehr kleinen Happen. Z.B. je nach Controller musst Du als 
kleinste Einheit immer 4 Byte auf einmal oder manchmal auch 8 Byte auf 
einmal schreiben, eventuell vielleicht (wie gesagt je nach Controller) 
gehen sogar einzelne Bytes wenn Du Glück hast (im Reference Manual 
nachlesen).

Das heißt Du könntest wenn Du noch massenhaft unbenutztes Fash hast (was 
sehr wahrscheinlich der Fall sein wird bei den heutzutage üblichen 
geradezu obszön verschwenderisch überdimensionierten Flash-Speichern im 
teilweise sogar dreistelligen Kilobyte-Bereich) ein simples 
wear-leveling implementieren das Deine Nutzdaten bei jedem 
Schreibvorgang an die nächste freie Stelle schreibt und erst dann 
anfangen muss hin und wieder mal eine Page zu löschen wenn wirklich 
alles bis zum Rand voll ist.
#4624539
Lesenswert?

Ich behaupte, dass sich jede Flash-EEPROM-Emulation auf jedem Controller 
implementieren lässt. Es muss immer nur der Flash Treiber angepasst 
werden.

Wie oben schon genannt kann dein chip nur 16bit wörter schreiben. Keine 
8bit, keine 32bit, der Versuch führt zu Fehlern.

Wenn du dann einen Flash-Treiber hast, der Array x an Adresse y 
schreiben kann, dann ist der Rest nur noch Abschreiben und Fleißarbeit
Gast #4624577
Lesenswert?

Little B. schrieb:
> Ich behaupte, dass sich jede Flash-EEPROM-Emulation auf jedem Controller
> implementieren lässt. Es muss immer nur der Flash Treiber angepasst
> werden.
>
> Wie oben schon genannt kann dein chip nur 16bit wörter schreiben. Keine
> 8bit, keine 32bit, der Versuch führt zu Fehlern.
>
> Wenn du dann einen Flash-Treiber hast, der Array x an Adresse y
> schreiben kann, dann ist der Rest nur noch Abschreiben und Fleißarbeit

Aber die Frage hast du schon verstanden, oder???

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren