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?
Why does the bootloader erase the app region (0x1f0000) when the app is terminated/killed?
Are you referring to this line: ":DEBUG:Erasing: 0x0007f000, num: 1"? This is the location of the bootloader settings page containing the nrf_dfu_settings_t struct used by the bootloader for state keeping during DFU.
0x0007f000 is app address,it is bank0 address
0x0001f000 is app address,not 0x0007f000,it is bank0 address,not 0x0007f000 is bootloader settings page
What you are seeing is that the FW is being uploaded to bank 1, so it is indeed a dual bank update.
Judging from the logs, it seems the device has been staying in DFU mode, waiting for connection and data transfer. Is there no timeout mechanism in place?
Judging from the logs, it seems the device has been staying in DFU mode, waiting for connection and data transfer. Is there no timeout mechanism in place?
Yes, there is a timeout mechanism, but that does not help if there is no valid application to fall back to. Can you please post the full log? When adding the log, please do so in a code block using the Insert->Code button.
What I provided is the complete log, starting from device boot, the app initiating the update, to killing the app, and then the device staying in the bootloader's DFU mode. Later, I added a reset in the BLE disconnect callback, and it worked normally. The issue is likely with the timeout mechanism. Alternatively, how should I properly implement the reset, and where should I add this reset?
From the SDK release notes it seems like the inactivity timer was not added until SDK v14.0.0. You could use this implementation as a reference.