2025-06-28 12:41 AM - last edited on 2025-06-28 2:13 AM by Andrew Neil
/* Get the boot configuration status */
HAL_FLASHEx_OBGetConfig(&OBInit);
/* Check Swap Flash banks status */
if ((OBInit.USERConfig & OB_SWAP_BANK_ENABLE) == OB_SWAP_BANK_DISABLE)
{
BankNumber=FLASH_BANK_2; // bank for erase
}
else
{
BankNumber=FLASH_BANK_1; // bank for erase
}
FirstPage=0;
NbOfPages=32;
/* Fill EraseInit structure*/
EraseInitStruct.TypeErase = FLASH_TYPEERASE_PAGES;
EraseInitStruct.Banks = BankNumber;
EraseInitStruct.Page = FirstPage;
EraseInitStruct.NbPages = NbOfPages;
if (HAL_FLASHEx_Erase(&EraseInitStruct, &PageError) != HAL_OK)
{
FotaErrorOnErase=1;
}
Program execution halts immediately.
Using CUBEPROGRAMMER, I verified that the SWAP_BANK bit is set (checked).
Using CUBEPROGRAMMER, I noticed that Bank1 has been Erased! This had Firmware-Version2.
Now assuming that with the SWAP_BANK bit as set, Bank2 with Firmware_Version2 is now mapped as Bank1. And so Bank1 with Firmware_Version1 is now mapped as Bank2.
And so I implied that maybe I must always erase Bank2. So I modified the code as below:
BankNumber=FLASH_BANK_2;
FirstPage=0;
NbOfPages=32;
/* Fill EraseInit structure*/
EraseInitStruct.TypeErase = FLASH_TYPEERASE_PAGES;
EraseInitStruct.Banks = BankNumber;
EraseInitStruct.Page = FirstPage;
EraseInitStruct.NbPages = NbOfPages;
if (HAL_FLASHEx_Erase(&EraseInitStruct, &PageError) != HAL_OK)
{
FotaErrorOnErase=1;
}
2025-07-02 4:56 AM - edited 2025-07-02 4:56 AM
Related post also waiting for a solution: https://community.st.com/t5/stm32-mcus-products/stm32u575-bank1-flashing-problem-from-bank2/m-p/817399#M281794