How mayankpatel97/stm32-dualslot-bootloader works
This repository describes an STM32 firmware-update system: firmware is encrypted and packaged on the host, transferred over USB/UART, staged in external SPI flash, checked, and installed or rolled back. The README documents dual slots, CRC validation, encryption, and version reporting; the tree identifies corresponding bootloader, flash, crypto, loader, and USB-device areas. The sampled bootloader main currently shows SPI-flash read/write testing, not the update flow itself, so detailed implementation wiring is based on README claims and is not verified in the excerpts.
Main entry points: boot.c Bootloader control · loader.py Host loader · lock_bin.py Package encryption · usbd_cdc_if.c USB device interface
Components 19
Host Tools
- Package encryption
LOCK_BIN/lock_bin.py - Encrypted package
- Host loader
LOADER/loader.py
Device Update
- Bootloader control
Bootloader/Core/Src/boot.c - Bootloader startup
Bootloader/Core/Src/main.c - USB device interface
LedBlinkApp/USB_DEVICE/App/usbd_cdc_if.c - AES-128
Bootloader/aes128/aes128.c - Integrity and version checks
Bootloader/Core/Src/boot.c - Firmware installation
Bootloader/Core/Src/boot.c - Rollback selection
Bootloader/Core/Src/boot.c - Version reporting
Bootloader/Core/Src/boot.c
Firmware Storage
- SPI flash driver
Bootloader/Core/Src/exflash.c - External SPI flash
- Dual firmware slots
Bootloader/Core/Src/boot.c
Target Application
- LED blink application
LedBlinkApp/Core/Src/main.c
Other components
- Firmware operator
- Firmware input
- USB / UART
- STM32 internal flash
Connections 22
- Firmware operator → Firmware input: provides
- Firmware input → Package encryption: packages
- Package encryption → Encrypted package: encrypts
- Firmware operator → Host loader: runs
- Encrypted package → Host loader: loads
- Host loader → USB / UART: transmits
- USB / UART → Bootloader control: delivers
- USB / UART → USB device interface: USB link
- USB device interface → Bootloader control: forwards data
- Bootloader startup → Bootloader control: starts
- Bootloader control → AES-128: decrypts with
- Bootloader control → Integrity and version checks: checks integrity
- Bootloader control → SPI flash driver: uses
- SPI flash driver → External SPI flash: reads / writes
- Bootloader control → Dual firmware slots: manages
- Bootloader control → Firmware installation: installs
- Firmware installation → STM32 internal flash: writes firmware
- Bootloader control → Rollback selection: selects fallback
- Rollback selection → Dual firmware slots: chooses prior image
- Host loader → Version reporting: requests version
- Version reporting → USB / UART: reports version
- STM32 internal flash → LED blink application: runs