STM32Fx Flashzelle mehrfach beschreiben

OP #5029209
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
#5029232
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
#5029235
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".
Gast #5029239
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.
Gast #5030124
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.

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