1.7.2 Bootloader System Level Execution Flow
Basic Bootloader system level execution flow
-
The Bootloader code starts executing on a device Reset
-
If there are no conditions to enter the Firmware Upgrade mode, the Bootloader starts executing the user application
- Refer to the Bootloader Trigger Methods for different conditions to enter Firmware Upgrade mode
-
The Bootloader performs Flash erase/program operations while in the Firmware Upgrade mode
Live Update Bootloader system level execution flow
- Supported for the devices which have a Dual Bank Flash memory
Cortex-M Based MCUs:
-
Special NVM Fuse setting (AFIRST) is used to identify which bank is mapped to NVM main address space after reset
-
The bootloader live update code responsible to program the inactive bank is part of the application it self. Which means the programming operation can happen while the application is running
- Live Update Application = (Bootloader Code in Live Update mode + Application code)
-
The application code is responsible to send a request to bootloader live update code to perform a bank swap and reset to run the new firmware programmed in Inactive bank
MIPS Based MCUs:
-
Switcher Application in Boot Flash memory is required to select the bank with latest firmware
-
At reset switcher first maps Bank 1 to lower region and reads the serial numbers from both banks
-
If Bank 2 serial number is greater than Bank 1 serial number, it maps Bank 2 to lower region by setting the Swap bit and runs the new firmware from BANK 2 else continues to run firmware from BANK 1
-
-
The bootloader live update code responsible to program the inactive bank is part of the application it self. Which means the programming operation can happen while the application is running
- Live Update Application = (Bootloader Code in Live Update mode + Application code)
-
The bootloader live update code will always program the new image in the inactive bank
-
The application code is responsible to send a request to bootloader live update code to perform a bank swap and reset to run the new firmware programmed in Inactive bank
-
Once this request is received the bootloader live update code performs below operation before initiating a reset to run new firmware
- Inactive Serial number = Active serial number + 1
