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?