2025-06-17 11:24 PM
I am currently implementing a dual-bank flash concept on the STM32WLE5CCU6 microcontroller, which features 256 KB of flash memory. I have divided the flash into two logical blocks, each of 128 KB. Both blocks include their own independent In-Application Programming (IAP) bootloader code. Additionally, each block contains identical application code, but mapped to different memory locations.
In the linker script for each block, I have modified the flash and SRAM start and end addresses accordingly. I have also updated the vector table by setting the __ICFEDIT_intvec_start__ symbol to match the start of the respective flash block.
The first block (Block 0 or B0) functions correctly. Upon reset, it correctly jumps to the application code located at the corresponding address.
However, when executing code from the second block (Block 1 or B1), the application does not function as expected. Furthermore, upon issuing a hard reset, the system always jumps to the start address of Block 0, rather than to Block 1.
This raises the question: apart from modifying the linker file (flash/SRAM address ranges and vector table in linker file ), are there any additional areas or configurations that need to be updated to support execution and booting from Block 1?