STM32F429: Flash-Löschen/Programmieren bringt seltsame Fehler

Gast #5887780
Lesenswert?

Hallo zusammen,

ich habe eine STM32-Firmware für einem STM32L4R5ZI geschrieben, die auf 
Flash-Bank1 läuft, und Flash-Bank2 löschen/programmieren kann. 
Funktioniert auf dem STM32L4R5ZI einwandfrei.
Jetzt wollte ich diese Firmware auf einen STM32F429ZI portieren, krieg 
es aber nicht zum Laufen. Ich bekomme sowohl beim Löschen als auch beim 
Programmieren von Bank2 immer die Fehlerflags "PGSERR" (Programming 
Sequence error) und/oder "PGPERR" (Programming Parallelism error) 
gesetzt, und kann mir nicht erklären, warum.

Beispielcode:
1
FLASH_EraseInitTypeDef EraseInit;
2
EraseInit.TypeErase   = FLASH_TYPEERASE_MASSERASE;
3
EraseInit.Banks   = FLASH_BANK_2;
4
EraseInit.Sector  = 0;
5
EraseInit.NbSectors  = 0;
6
EraseInit.VoltageRange   = FLASH_VOLTAGE_RANGE_3;
7
uint32_t SectorError = 0;
8
HAL_StatusTypeDef status0 = HAL_FLASH_Unlock();
9
uint32_t error0 = HAL_FLASH_GetError();
10
HAL_StatusTypeDef status1 = HAL_FLASHEx_Erase(&EraseInit, &SectorError);
11
uint32_t error1 = HAL_FLASH_GetError();
12
HAL_StatusTypeDef status2 = HAL_FLASH_Lock();
- HAL_FLASH_Unlock() gibt HAL_OK zurück, FlashError = 0
- HAL_FLASHEx_Erase() gibt HAL_ERROR zurück, FlashError = 2 (PGSERR)
- HAL_FLASH_Lock() gibt wieder HAL_OK zurück

Habe FLASH_VOLTAGE_RANGE 1, 2 und 3 probiert, kein Unterschied.

In den OptionBytes ist keine Read- oder WriteProtection gesetzt.
Der STM32F429ZI ist nach meinem Verständnis immer im DualBank 
konfiguriert, jedenfalls kann ich in OptionBytes nichts einstellen 
(anders als beim STM32L4R5ZI).

Weiß jemand weiter?
Gast #5889500
Lesenswert?

Falls es jemanden interessiert:
Ich habe festgestellt, dass diese Fehlerflags (PGPERR und PGSERR) 
anscheinend unberechtigerweise gesetzt werden.
Wenn ich diese Flags einfach ignoriere und lösche, funktioniert alles 
einwandfrei, d.h. das Flash wird korrekt gelöscht und auch programmiert. 
Der neue Flash-Inhalt ist danach korrekt.
Gast #5889622
Lesenswert?

Frank Roggel schrieb:
> Ich habe festgestellt, dass diese Fehlerflags (PGPERR und PGSERR)
> anscheinend unberechtigerweise gesetzt werden.
> Wenn ich diese Flags einfach ignoriere und lösche, funktioniert alles
> einwandfrei

Dann schau doch mal, ob du dazu etwas im Errata findest.

Ich bin auf ein ähnliches Problem bei einer I²C Schnittstelle gestoßen, 
das war im Errata beschrieben.

Normalerweise denkt man ja, dass diese Bugs nur in ganz speziellen 
Konstellationen auftreten, von denen man selbst nur selten betroffen 
ist. Aber ich gehöre scheinbar zu der Sorte Mensch, deren Weg mit 
Fettnäpfchen regelrecht gepflastert ist. Was schief gehen kann, geht 
auch schief. Glück haben immer nur die anderen. Kennt Ihr das Gefühl?
Gast #5889727
Lesenswert?

Stefanus F. schrieb:
> Dann schau doch mal, ob du dazu etwas im Errata findest.

Ins Errata Sheet hatte ich als erstes geschaut und nichts dazu gefunden. 
Deswegen war ich auch sehr skeptisch, ob es wirklich sein kann, das 
diese Fehlerflags unberechtigterweise gesetzt werden sollten (das müßte 
doch irgendjemandem aufgefallen sein?!). Aber nach einer Woche 
Trial-and-Error scheint dies die einzige plausible Erklärung...

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