va108xx-rs/bootloader
Robin Mueller ce7a8665a3
All checks were successful
Rust/va108xx-rs/pipeline/pr-main This commit looks good
bootloader addr corrections
2024-09-24 10:21:23 +02:00
..
src bootloader addr corrections 2024-09-24 10:21:23 +02:00
Cargo.toml bootloader docs 2024-09-20 11:58:41 +02:00
README.md bootloader docs 2024-09-20 11:58:41 +02:00

VA416xx Bootloader Application

This is the Rust version of the bootloader supplied by Vorago.

Memory Map

The bootloader uses the following memory map:

Address Notes Size
0x0 Bootloader start code up to 0x3FFC bytes
0x2FFE Bootloader CRC word
0x3000 App image A start code up to 0x1DFFC (~120K) bytes
0x117F8 App image A CRC check length word
0x117FC App image A CRC check value word
0x11800 App image B start code up to 0x1DFFC (~120K) bytes
0x1FFF8 App image B CRC check length word
0x1FFFC App image B CRC check value word
0x20000 End of NVM end

Additional Information

This bootloader was specifically written for the REB1 board, so it assumes a M95M01 ST EEPROM is used to load the application code.

This bootloader does not provide tools to flash the NVM memory by itself. Instead, you can use the flashloader application to perform this task using a CCSDS interface via a UART.

The bootloader performs the following steps:

  1. The application will calculate the checksum of itself if the bootloader CRC is blank (all zeroes or all ones). If the CRC is not blank and the checksum check fails, it will immediately boot application image A. Otherwise, it proceeds to the next step.
  2. Check the checksum of App A. If that checksum is valid, it will boot App A. If not, it will proceed to the next step.
  3. Check the checksum of App B. If that checksum is valid, it will boot App B. If not, it will boot App A as the fallback image.

You could adapt and combine this bootloader with a non-volatile memory to select a prefered app image, which would be a first step towards an updatable flight software.

Please note that you MUST compile the application at slot A and slot B with an appropriate memory.x file where the base address of the FLASH was adapted according to the base address shown in the memory map above. The memory files to do this were provided in the scripts folder.