Beware that this post is related to an SDK in maintenance mode
More Info: Consider nRF Connect SDK for new designs
This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

SDK v15 DFU Bootloader hangs on execute instruction

Hi, I'm migraing our project to the latest NRF5 SDK v15.0.0 (S132  v6.0.0). We were previously on v12.2.0  (S132 v3.0.0) using the BLE DFU Bootloader. I've  modified our bootloader code to match the example from the latest SDK. It compiles and runs on our board. We're using our own utility which implements the DFU procedure to upload the firmware to our device.

The utility is able to connect, switch the device to the bootloader and transfer the init packet. The problem arises when the first object has been transferred and  we issue an execute command. The device locks up and doesn't respond to any command (including the execute). If I break with gdb the cpu is always somewhere around address `0x0007c1ea`. It is a branch instruction to the same address... an infinite loop.

I tried the nRF Toolbox for Android, but it wasn't even able to switch to the bootloader. I assume it hasn't been updated to use the new 16-bit Buttonless Servicee UUID.


Is there any obvious reason  this could be happening?

Parents Reply
  • Looking at the secure dfu bootloader example in sdk 15, the function nrf_bootloader_dfu_inactivity_timer_restart() gets called twice: once in the dfu_observer() function inside nrf_bootloader.c to handle the NRF_DFU_EVT_OBJECT_RECEIVED event & once in nrf_bootloader_init() also in nrf_bootloader.c. 

    Having you tried adding some NRF_LOG_ERROR() calls to debug the bootloader with an RTT client? I would try that to figure out where the error is occuring.

Children
Related