Forum: Mikrocontroller und Digitale Elektronik FLASH speicher Lebensdauer Beeinflussung?


von Bert S. (kautschuck)


Lesenswert?

Hi,

Ich habe einen STM32F4, welcher heute beim Schreiben in den Flash 
(EEPROM Emulation) in den HardFault ging, und nun komisch reagiert. Ich 
habe sogleich das STUtility gestartet und einen kompletten Flash erase 
versucht, leider kommt dann ein Fehler, dass der Flash nicht komplett 
gelöscht werden kann. Ich konnte aber Sektor für Sektor löschen, soweit 
so gut. Nun funktioniert fast alles wieder und der Flash ist 
beschreibbar, jedoch werden nun teilweise Programmabschnitte 
übersprungen. Ich habe schon einiges mit der EEPROM Emulation in den 
Flash geschrieben, jedoch denke ich bin ich niemals bei den 10000 Zyklen 
angekommen, zumindest wenn ich das Beschreiben richtig verstanden habe:

Ich verwende also zwei Pages à je 16kByte und wenn jetzt eine komplett 
beschrieben ist, dann werden die Daten in die nächste kopiert und die 
alte gelöscht, und erst dann ist ein Zyklus durch. Verstehe ich das so 
richtig?

von Stefan F. (Gast)


Lesenswert?

Das hängt ziemlich stark davon ab, wie du auf den Flash Speicher 
zugreifst. Es gibt so schön einfache Hardware Abstraktions Layer, die 
das Schreiben einzelner Bytes erlauben und dabei jedesmal eine ganze 
Page verschleißen.

> Ich habe schon einiges mit der EEPROM Emulation
> in den Flash geschrieben

Welche konkret? Und zeige mal deinen Quelltext.

von Bert S. (kautschuck)


Angehängte Dateien:

Lesenswert?

Ich verwende die originalen von STMicroelectronics:

https://www.st.com/en/embedded-software/stsw-stm32066.html

Die sollten ja die Page füllen und dann erst transferieren und die alte 
löschen. Das gilt dann als 1 Zyklus, richtig?

Ich kann weiterhin in den Flash schreiben und davon lesen, jedoch 
scheinen mir andere Teile des Flashs defekt, in denen mein Programm 
sitzt.

Anbei ist auch das Linker File, wo ich die Sektoren für den virtuellen 
EEPROM reserviert habe.

: Bearbeitet durch User
von Programmierer (Gast)


Lesenswert?

Hallo Bert,

wie voll ist denn Dein Flash?

Das klingt so, als ob Dein Porgramm in den Variablen Bereich geht und Du 
Dir das Programm überschreibst.

Evtl. stimmt Dein Linker Script nicht, habe ich nicht überprüft.

Benutzt Du für die EEPROM Emulation die kompletten Funktionen von ST 
oder hast Du was eigenes zwischendurch eingebaut?
Stimmt das Datenformat der zu schreibenden Daten ist alles richtig 
alignet?
Wir vorm Löschen/Schreiben geprüft, ob der Flash nicht busy ist usw.?

Im Datasheet stehen ja einige Bedingungen, wann der uC in einen 
Hardfault geht. Das musst Du halt debuggen.

Gruß 0101

von Bert S. (kautschuck)


Lesenswert?

Programmierer schrieb:
> Das klingt so, als ob Dein Porgramm in den Variablen Bereich geht und Du
> Dir das Programm überschreibst.

Es scheint so, aber die Pages sind eigentlich recht schnell voll und das 
ganze hat auch über einen längeren Zeitraum perfekt funktioniert, wobei 
sicher 200 mal oder mehr ein page transfer stattgefunden hat, somit kann 
es ja nicht plötzlich einfach auf andere Flash Bereiche schreiben. Ich 
kann den Flash auch nicht mehr komplett löschen mit dem STUtility Tool, 
es scheint also schon ein Defekt vorzuliegen, evtl. ein ganzer 
Sektorausfall.

Programmierer schrieb:
> Benutzt Du für die EEPROM Emulation die kompletten Funktionen von ST
> oder hast Du was eigenes zwischendurch eingebaut?

Alles original von ST

Programmierer schrieb:
> Stimmt das Datenformat der zu schreibenden Daten ist alles richtig
> alignet?

Ich schreibe immer Halfwords, wie meinst du richtig alignet, die 
Adressen der Variablen?

Programmierer schrieb:
> Wir vorm Löschen/Schreiben geprüft, ob der Flash nicht busy ist usw.?

Das passiert ja in der FLASH Library von ST, welche mit den HAL 
Libraries geliefert wird.

Programmierer schrieb:
> Im Datasheet stehen ja einige Bedingungen, wann der uC in einen
> Hardfault geht. Das musst Du halt debuggen.

Das Problem ist nur, dass dies genau einmal passiert ist, dann habe ich 
versucht den Flash zu löschen, ging aber nicht komplett. Ich konnte aber 
danach zumindest das Programm draufladen, jedoch werden eben nun Teile 
einfach übersprungen, als wären sie auskommentiert. Der Hardfault 
passierte aber während dem Schreiben von 4kByte Daten, daher hat es wohl 
dort einen Sektor zerhauen und das ganze ging in den Hardfault.

Ich baue mal noch neue Controller und mache ein paar Tests, wie oft der 
Flash wirklich beschrieben werden kann mit diesen Methoden. Vielleicht 
war das einfach Pech.

: Bearbeitet durch User
von Johnny B. (johnnyb)


Lesenswert?

Bert S. schrieb:
> Ich schreibe immer Halfwords

Die "Library" packt zu diesem Halfword aber immernoch die virtuelle 
Adresse dazu. Das heisst, jedes Halfword dass Du schreibst, endet in 
einem ganzen Word.

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.