Forum: Mikrocontroller und Digitale Elektronik STM32Fx Flashzelle mehrfach beschreiben


von Felix F. (wiesel8)


Lesenswert?

Hallo,

wenn man den Flash löscht, steht als default-Value 0xFF in jeder Zelle 
(alle Bits gesetzt). Jetzt kann ich meinen gewünschten Wert z.B. 0x0F 
reinschreiben (die ersten 4 Bits werden gelöscht).

Jetzt meine Frage:
Ist dieses 1 Byte im Flash nun bis zum nächsten Erase nicht mehr 
veränderbar (also nach einem Erase nur 1 Schreibzugriff) oder kann ich 
weiterhin Bits löschen z.B. 0x03 schreiben, dann 0x01, dann 0x00? (Also 
bis zu 8 Schreibzugriffe wenn ich jeweils nur 1 Bit lösche).

mfg

von Christian F. (cfrey)


Lesenswert?

Hallo

Dies sollte bei einem STM32 möglich sein. Das Flash-Programming-Manual 
sagt dazu:
Successive write operations are possible without the need of an erase 
operation when changing bits from ‘1’ to ‘0’.

Im Zweifelsfalle sollte man aber immer das entsprechende Manual 
konsultieren. In den NXP Kinetis-Referenz-Manuals z.B. steht etwas 
anderes:
Re-programming of existing 0s to 0 is not allowed as this overstresses 
the device.

Worin genau die technischen Unterschiede zwischen den Flash-Controllern 
dieser Prozessoren bestehen, weiss ich auch nicht.

Gruss,
Christian

von Jim M. (turboj)


Lesenswert?

Felix F. schrieb:
> Ist dieses 1 Byte im Flash nun bis zum nächsten Erase nicht mehr
> veränderbar

Kommt schwerstens auf den konkreten µC an. Der Flash wird bei jedem 
Schreibzugriff etwas gestresst.

Mitunter findet man Angaben im Datenblatt, NordicSemi NRF52x erlaubt 
beispielsweise nur zweifaches Überschreiben - danach muss die Page 
gelöscht werden.

Übrigens findet das Schreiben des Flash nicht unbedingt byte-weise 
statt. Moderne µC Flash Blöcke sind "breiter".

von A. B. (Gast)


Lesenswert?

Nach der üblichen Einleitung "RTF ..." ein klares "Jein":

Aus PM0075 Programming manual STM32F10xxx Flash memory microcontrollers:

"Standard programming
... FPEC 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 ..."

Dagegen aus RM0431 STM32F72xxx and STM32F73xxx:

"Note: Successive write operations are possible without the need of an 
erase operation when changing bits from ‘1’ to ‘0’. Writing ‘1’ requires 
a Flash memory erase operation."

Das ist wohl so zu verstehen, dass einzelne Bits nachprogrammiert werden 
können.

Abgesehen davon jedoch: Einige (neuere!!!) Varianten haben beim Flash 
noch ECC, da scheidet dieses "Nachprogrammieren" sowieso aus. Wenn man 
den Controller also mal wechseln können möchte, sollte man auf solche 
Sperenzchen verzichten.

von Dieter (Gast)


Lesenswert?

Ich hatte das bei mir irgendwann mal ausprobiert (STM32F103CBT6) und bei 
dem konnte ich immer weiter Bits auf Null setzen.

Also - Versuch macht klug.

von Felix F. (wiesel8)


Lesenswert?

Bei mir gehts speziell um einen F4. Hab jetzt auch im manual die note 
gefunden und hier steht, dass es funktioniert.

mfg

von Peter (Gast)


Lesenswert?

Dieter schrieb:
> Ich hatte das bei mir irgendwann mal ausprobiert (STM32F103CBT6) und bei
> dem konnte ich immer weiter Bits auf Null setzen.
>
> Also - Versuch macht klug.

Kann sein dass es einige Male funktioniert, allerdings verträgt das 
nicht jedes Flash auf Dauer. Das Flash kann dabei Schaden nehmen. Zum 
Basteln kein Problem, aber in Serienfertigung lieber das Datenblatt und 
/ oder den FAE konsultieren.

von SeK (Gast)


Lesenswert?

Felix F. schrieb:
> Bei mir gehts speziell um einen F4. Hab jetzt auch im manual die note
> gefunden und hier steht, dass es funktioniert.

Es funktioniert auch. Habe es kürzlich mit einem F446 getestet, da es 
mich selbst interessiert hat.

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.