Forum: Mikrocontroller und Digitale Elektronik STM32 : Welches Dokument erwähnt den Zustand der Flash Zellen nach Löschen?


von Uwe Bonnes (Gast)


Lesenswert?

Hallo,

nach meine Beobachtungen haben gelöschte Flash Seiten den Wert "0" in 
den einzelnen Bytes. Aber in welchen ST Dokument ist das dokumentiert? 
Bin für Hinweise dankbar!

von (prx) A. K. (prx)


Lesenswert?

Gute Frage... Üblich ist bei Flashbit ja 1, nicht 0. Aber beim querlesen 
habe ich das auch nirgends explizit erwähnt gefunden.

Allerdings steht drin, dass man programmierte Zellen genau und nur mit 
0x0000 überbraten kann. Daraus kann man schliessen, dass es wie üblich 
gelöscht auf 0xFFFF steht. Auch der Code der AN für EEPROM Emulation 
geht davon aus, dass gelöschte Bits auf 1 stehen.

von Steel (Gast)


Lesenswert?

Bei diesem Chip wird Flash untypischerweise nach 0 gelöscht, steht auch 
so in der Flash Programming AN.

von Uwe Bonnes (Gast)


Lesenswert?

Welcher AN?

Danke

von (prx) A. K. (prx)


Lesenswert?

In der AN2594 steht jedenfalls:
#define ERASED                  ((uint16_t)0xFFFF)     /* PAGE is empty

von Uwe Bonnes (Gast)


Lesenswert?

AN2594 bezieht sich auf die EEPROM Emulation in ST32F Bausteinen, und
#define ERASED                  ((uint16_t)0xFFFF)     /* PAGE is empty
bezieht sich  auf den Rückgabewert einer dieser Emulationsroutinen. Aber 
das definiert nicht den Wert gelöschten Flash Zellen.

von (prx) A. K. (prx)


Lesenswert?

In der AN selbst wird der Inhalt gelöschter Zellen als FF gezeigt. Im 
Code wird der Makro ERASE für gelöschte Pages verwendet, und zwar direkt 
als Vergleichswert mit dem Inhalt vom Flash, nicht über ein API-Mapping.

Der Code der AN nutzt dem Umstand, dass gelöschte Zellen auf 0xFFFF 
stehen und nacheinander auf 0xEEEE und danach 0x0000 programmiert 
werden.

von (prx) A. K. (prx)


Lesenswert?

Uwe Bonnes schrieb:

> bezieht sich  auf den Rückgabewert einer dieser Emulationsroutinen. Aber
> das definiert nicht den Wert gelöschten Flash Zellen.

Geraten oder gewusst?

Zur Ästhetik von STs Beispielcode gehört auch, dass der Programmierer 
wenig Sinn für saubere Trennung von Interfacedefinition und 
Implementierung hat und gefährlich unspezifische Namen wie ERASED für 
interne Zustände verwendet, sie aber ohne Schutz ins globale 
Include-File reinpinnt. Statt sie wie es sich gehört nur in die 
Implementierung zu schreiben.

Diese 3 Namen stehen für das erste 16-Bit Wort einer Flash-Page, das den 
Blockzustand kennzeichnet. Sie werden ausserhalb der EE_xxx Funktionen 
nicht verwendet, auch nicht als Return-Wert:
1
/* Page status definitions */
2
#define ERASED                  ((uint16_t)0xFFFF)     /* PAGE is empty */
3
#define RECEIVE_DATA            ((uint16_t)0xEEEE)     /* PAGE is marked to receive data */
4
#define VALID_PAGE              ((uint16_t)0x0000)     /* PAGE containing valid data */

von Uwe Bonnes (Gast)


Lesenswert?

Argh: STM32L hat 0 als gelöschten Zustand, STM32F1/F4 0xff. Fuer F2 muss 
ich noch testen...

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.