1.9.2 OTA Bootloader Execution Flow

OTA Bootloader - Dual Bank (For MCUs)

  • On device reset after systme initialize, The Bootloader task starts executing from while(1) super loop

  • It retrieves the Control Block (Metadata) from inactive bank

    • If any error in reading the Control Block (Metadata) it directly jumps Run application
  • It checks if the Meta Data read is valid

    • If valid

      • Checks if the blockUpdated flag is set. If set it jumps to Update Control Block (Metadata) step Or continues to Trigger Check.
    • If Invalid

      • It continues to Trigger Check

Trigger Check

  • If there are no conditions to enter the firmware upgrade mode, the Bootloader jumps to Run application
    • Refer to Bootloader Trigger Methods for different conditions to enter firmware upgrade mode

Update Control Block (Metadata)

  • The following fields are updated in the Control Block (Metadata), then it swaps bank and then triggers reset to Run application

    • Clears the blockUpdated flag

    • Set imageType to active

    • Set status to valid

Run Application

  • The application start address used to jump to application space can be

    • Application start address generated during compile time or

    • Application start address retrieved from valid Control Block (Metadata)

  • Calls SYS_DeInitialize() function to release resources used

  • Jumps to application space to run the updated application

ota_bootloader_dual_bank_execution_flow

OTA Bootloader - External Memory (For MCUs)

  • On device reset after systme initialize, The Bootloader task starts executing from the SYS_Tasks()

  • Once the OTA driver is ready, it retrieves the Control Block (Metadata) from serial memory

    • If any error in reading the Control Block (Metadata) it directly jumps Run application
  • It checks if the Meta Data read is valid

    • If valid

      • Checks if the blockUpdated flag is set. If set it jumps to Programming step or continues to Trigger Check
    • If Invalid

      • It continues to Trigger Check

Trigger Check

  • If there are no conditions to enter the firmware upgrade mode, the Bootloader jumps to Run application
    • Refer to Bootloader Trigger Methods for different conditions to enter firmware upgrade mode

Programming

  • Starts reading the application binary from serial memory and perform erase/program operations on internal Flash

  • Once programming is completed, it generates CRC32 on programmed space of internal Flash and verifies it against the CRC32 value stored in Meta data

  • Once verification is complete it clears the blockUpdated flag in the Control Block (Metadata) and triggers reset to Run application

Run Application

  • The application start address used to jump to application space can be

    • Application start address generated during compile time or

    • Application start address retrieved from valid Control Block (Metadata)

  • Calls SYS_DeInitialize() function to release resources used

  • Jumps to application space to run the updated application

ota_bootloader_external_memory_execution_flow

MPU OTA Bootloader System Level Execution Flow

  • The first stage ROM Bootloader is executed on PoR. The main role of ROM Bootloader is to verify and load secondary program loader (AT91BootStrap) from persistent storage (such as SDMMC, NAND Flash, Serial/QSPI Flash) into internal SRAM and execute it.

  • The main role of Secondary Program Loader (AT91BootStrap) is to initialize SDRAM, DDR, and load a third stage Harmony OTA Bootloader from persistent storage into DDR and execute it

  • Then Harmony OTA Bootloader starts executing the user application

  • Harmony OTA Bootloader performs the following functions:

    • It loads the harmony OTA application from SD/eMMC/NAND/Serial Flash memory to the DDR memory and executes it
  • Harmony OTA application performs the following functions:

    • It receives the updated harmony OTA application image over OTA (BLE) and writes it to SD/eMMC/NAND/Serial Flash memory
mpu_ota_bootloader_flow_diagram
  • MPU Bootloader system level execution flow is depicted as below:
mpu_ota_bootloader_execution_flow