Keil SDK13 BLE OTA bootloader_secure_ble bootloader

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.

Related