Keil SDK13 BLE OTA upgrade failure causes the device to become unbootable, requiring re-flashing. How can this be resolved? We are using the bootloader_secure_ble bootloader. Does it support dual-bank OTA? Could you provide a reference sample?
Keil SDK13 BLE OTA upgrade failure causes the device to become unbootable, requiring re-flashing. How can this be resolved? We are using the bootloader_secure_ble bootloader. Does it support dual-bank OTA? Could you provide a reference sample?
I'm using SDK13, but the protocol stack I'm using is s132_nrf52_4.0.3_softdevice.hex. This doesn't seem to be the protocol stack included in SDK13 - the protocol stack in SDK13 is s132_nrf52_4.0.2_softdevice.hex.
Will this affect DFU OTA? Currently, after killing the app, the hardware cannot boot up. How should I handle this issue?
This was only a bug fix release of the softdevice and should not have any breaking changes. What you are experiencing is most likely unrelated to the Softdevice. To be able to find out what is wrong we must try to debug the bootloader/app to determine why it crashes after DFU is complete. A good first step is to read out the CPU registers after the DFU is complete as this may help reveal what state the device is in. You can do this with nrfjprog or nrfutil from the command line.
nrfjprog --readregs nrfutil device cpu-register-read
nrfjprog --readregs
R0: 0x01000001
R1: 0x40020518
R2: 0x00000000
R3: 0x20000000
R4: 0x2000009B
R5: 0x00000000
R6: 0xE000E000
R7: 0x00000056
R8: 0x00000000
R9: 0x00000000
R10: 0x00000000
R11: 0x00000000
R12: 0x046E4C9F
SP: 0x20003F88
LR: 0x00012459
PC: 0x0001245A
xPSR: 0x21000000
MSP: 0x20003F88
PSP: 0x00000000
RAZ: 0x00000000
CFBP: 0x00000000
APSR: 0x20000000
EPSR: 0x01000000
IPSR: 0x00000000
nrfutil device cpu-register-read
Usage: nrfutil [OPTIONS] COMMAND [ARGS]...
Try "nrfutil --help" for help.
Error: No such command "device"
Hi,
Thanks. This show that the program is inside the sd_app_evt_wait() function. This suggests that the device program has not "crashed" but is just staying in sleep waiting for an interrupt. Unfortunately it is not possible to tell from this if the function was called from the bootloader or the application. Next step is to try debug the bootloader and application and see if the program reaches the main app.