My setup of the buttonless BLE DFU secure bootloader using SDK15.2 isn't launching the application after a successful OTA package transfer. Using RTT and breakpoints, I narrowed down the issue to sd_softdevice_disable() inside nrf_sdh_disable_request(). The bootloader code execution disappears inside the SVCALL to disable the softdevice. What could be causing this behavior?
I'm finding it really difficult to narrow down the cause. My bootloader implementation matches almost identically with the examples except for: using bonds, buttonless DFU service, VS_UUUID_COUNT set to 2, RTT ON and in the same RAM section as the application, flash start/size for the bootloader, using the RC clock source. I set the RAM start and size to:
RAM (rwx) : ORIGIN = 0x20007978, LENGTH = 0x38688
So the program does not return from sd_softdevice_disable()? I haven't experienced that before. Can you read out the Core registers while the code is "stuck"? You can do this with the --readregs command in nrfjprog. E.g., nrfjprog --readregs. I would be happy to try debugging it here as well if you are able to share your project.
Just adding that the problem I was seeing with sd_softdevice_disable() is back again when I try to use multiple DFU transports and I've described it in a new post.