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?
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.
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
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.