This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

Yotta and SDK12 secured bootloader

This is slightly off topic (I also posted this in the mbed forums), but I hope maybe someone here would also know.

My goal is to use the newly secure boot loader that was recently introduced in SDK12. I'm using redbeadlab's programmer (MK20) and their ble nano (for all purposes, this is identical of using nrf51dk). My toolchain is mbed's yotta (I'm using mbed OS 5).

I am having a problem where my program (which previously compiled and ran without any problem using the default s130 softdevice and default bootloader that come with yotta_targets/nordic-nrf51822-gcc), doesn't run anymore after I switch to the secured bootloader or to the v2 of s130 softdevice.

Basically, the steps were:

  1. Create a private key
  2. Generate a public key from the private key
  3. Modify dfu_public_key.c with the public key
  4. Installed micro Ecc
  5. Compiled the bootloader to a hex file.
  6. Modified the CMake/toolchain.cmake to use the new bootloader and also the new soft device (s130_nrf51_2.0.1_softdevice.hex).
  7. Compiled the project and got a nice merged hex that includes everything (app+softdevice+bootloader). However, it doesn't run after I upload it to the board.

Trying to change only bootloader and keep s130_nrf51_1.0.0_softdevice.hex didn't work. Reverting back to the default non secured bootloader and only changing softdevice to s130_nrf51_2.0.1_softdevice.hex also didn't work, which leads me to believe this is the cause of the problem.

I'm using v1.5.0 of mbed-drivers and version 2.7.0 of ble modules.

Am I missing something that needs also to be changed in the memory layout? if so, where?

Does the secured bootloader from SDK 12 work with softdevice S130 from previous SDKs?

Any ideas would be really appreciated. I'm stuck on this.

  • I tried to dig up the details. There is an unofficial yotta module for FOTA, which defines the following:

    set(UICR_DEVICE_TYPE_ADDRESS_START 0x10001080) set(UICR_DEVICE_TYPE_ADDRESS_END 0x10001082)

    set(UICR_DEVICE_VERSION_ADDRESS_START 0x10001082) set(UICR_DEVICE_VERSION_ADDRESS_END 0x10001084)

    set(YOTTA_CFG_UICR_SERIAL_START 0x10001084) set(YOTTA_CFG_UICR_SERIAL_END 0x10001088)

    Are those still valid for the softdevice and bootloader defined in SDK12?

  • Has mbed been updated to support SDK 12 (SD2.0) ?

    The application offset if different in SD2.0 from SD1.0 so unless mbed has updated their linker file, your application won't run. (There may be other differences in the API between SDK 10 (SD1.0) and SDK12 (or SDK 11) SD2.0

Related