We have written a bootloader that occupies the 0x000000 - 0x0FFFFF in flash memory and a application that occupies 0x100000 - 0x1FFFFF.
When the bootloader runs, it checks to see if the application is in flash. If not, it will copy the application from external eMMC and flash it. The unit then reboots and the bootloader launches the new application.
Everything is working as expected however, when we moved the application to location 0x06000 - 0x1FFFFF, the flash erase function no longer works while trying to erase the first sector. While debugging, the MCU appears to restart.
We are using KDS 2.0.
What could be wrong?
Solved! Go to Solution.
Did you disable all interrupts or move the active interrupts executable and remap the vectors to RAM? Interrupts must not jump to a flash bank code when you're trying to flash it.
I thought we had to provide copy functions to ram functions but it is done automatically using
FLASH_DRIVER_IS_FLASH_RESIDENT.
We realized that the code must be run out of ram so we added some relocated flash functions to ram.
Did you disable all interrupts or move the active interrupts executable and remap the vectors to RAM? Interrupts must not jump to a flash bank code when you're trying to flash it.
The MCU is resetting and the RCM_SRS1 register reports a LOCKUP event.