This article describes the bootloader changes in the BLE SDK, starting from version 2.0.0.0. The changes are presented starting from the most recent version.
This article does not cover Gecko bootloader changes. Gecko bootloader replaced the so called legacy bootloader in BLE SDK 2.7.0. Legacy bootloader was used in BLE SDK versions 2.0.0 -> 2.6.1 and it was removed completely in version 2.7.0.
The bootloader version here refers to the 32-bit value that is part of evt_dfu_boot event. This must not be confused with the system_boot event that is generated at startup. The bootloader version reported in system_boot event should be ignored, the only way to check bootloader version reliably is checking the version reported in dfu_boot event.
BLE SDK 2.7.0
Starting from SDK 2.7.0, the legacy bootloader is no longer supported and it is replaced by Gecko bootloader.
BLE SDK 2.4.x, 2.6.x
No changes in bootloader. Version is same as before (0x00000005).
NOTE: legacy bootloader was announced as deprecated when SDK 2.6.0 was released. This is from 2.6.0 release notes:
Legacy OTA and NCP bootloaders are deprecated, but those are not removed yet. However, Gecko Bootloader is recommended to be used with all new applications and updates of the existing applications. More information about the Gecko Bootloader can be found from UG266: Silicon Labs Gecko Bootloader User Guide.
BLE SDK 2.3.0
Bootloader version updated to 0x00000005.
This fixes a potential aligment issue in the update images. The update fails if the data is not aligned correctly (and this depends on size of the stack). The error code is 0x0b03 (image_checksum_error)
Handling of potential CRC errors in UART DFU updates is improved. The following list shows actions taken by bootloader if the firmware programmed with UART DFU does not pass the CRC check.
Handling of CRC error in 2.0.x bootloader (old)
Generate dfu_boot_failure event (only once)
Invalidate application by erasing first page in flash
Reboot automatically
Handling of CRC error in 2.1.0 (new in bootloader version 4)
Generate dfu_boot_failure event (at each reboot until device is programmed with valid firmware)
Stay in bootloader mode, waiting for DFU commands from host
BLE SDK 2.0.1
No changes in bootloader. Version number same as before (0x00000003)
BLE SDK 2.0.0
Bootloader version: 0x00000003
Version 2.0.0 was the first release to use the new 16kB bootloader. Version 2.0.0 is not backwards compatible with the earlier 1.0.x versions. This is copied from the SDK release notes:
“ Version 2.0.0 is not backwards compatible with 1.0.x versions, meaning that an application written with 1.0.x SDK, will not work without modifications in 2.0.0 SDK and vice versa. Additionally, one cannot perform DFU, either over UART nor OTA, between the versions 1.0.x and 2.0.0.”
KBA_BT_0602: Bootloader changes in BLE SDK
This article describes the bootloader changes in the BLE SDK, starting from version 2.0.0.0. The changes are presented starting from the most recent version.
This article does not cover Gecko bootloader changes. Gecko bootloader replaced the so called legacy bootloader in BLE SDK 2.7.0. Legacy bootloader was used in BLE SDK versions 2.0.0 -> 2.6.1 and it was removed completely in version 2.7.0.
The bootloader version here refers to the 32-bit value that is part of evt_dfu_boot event. This must not be confused with the system_boot event that is generated at startup. The bootloader version reported in system_boot event should be ignored, the only way to check bootloader version reliably is checking the version reported in dfu_boot event.
BLE SDK 2.7.0
Starting from SDK 2.7.0, the legacy bootloader is no longer supported and it is replaced by Gecko bootloader.
BLE SDK 2.4.x, 2.6.x
No changes in bootloader. Version is same as before (0x00000005).
NOTE: legacy bootloader was announced as deprecated when SDK 2.6.0 was released. This is from 2.6.0 release notes:
BLE SDK 2.3.0
Bootloader version updated to 0x00000005.
This fixes a potential aligment issue in the update images. The update fails if the data is not aligned correctly (and this depends on size of the stack). The error code is 0x0b03 (image_checksum_error)
Note that the stack size alignment can also be fixed by editing the linker script in your project, as explained in following KB article: https://www.silabs.com/community/wireless/bluetooth/knowledge-base.entry.html/2017/12/21/upgrading_from_facto-9ula
BLE SDK 2.1.0
Bootloader version updated to 0x00000004.
Handling of potential CRC errors in UART DFU updates is improved. The following list shows actions taken by bootloader if the firmware programmed with UART DFU does not pass the CRC check.
Handling of CRC error in 2.1.0 (new in bootloader version 4)
BLE SDK 2.0.1
No changes in bootloader. Version number same as before (0x00000003)
BLE SDK 2.0.0
Bootloader version: 0x00000003
Version 2.0.0 was the first release to use the new 16kB bootloader. Version 2.0.0 is not backwards compatible with the earlier 1.0.x versions. This is copied from the SDK release notes: