A bootloader may be used to handle in-system update procedures.

The bootloader has full access to the SoftDevice API and can be implemented like any application that uses the SoftDevice. In particular, the bootloader can make use of the SoftDevice API for Bluetooth low energy communication.

The bootloader is supported in the SoftDevice architecture by using a configurable base address for the bootloader in the application Flash Region. The base address (BOOTLOADERADDR) is configured by setting the UICR.NRFFW[0] register. The bootloader is responsible for determining the start address of the application. It uses sd_softdevice_vector_table_base_set(uint32_t address) to tell the SoftDevice where the application starts.

The bootloader is also responsible for keeping track of and verifying the integrity of the firmware, including SoftDevice, the application, and the bootloader itself. If an unexpected reset occurs during a firmware update, the bootloader is responsible for detecting it and resuming the update procedure.

Figure 1. MBR, SoftDevice, and bootloader architecture
MBR, SoftDevice, and bootloader architecture