This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

Writing the simplest possible implementation of buttonless dfu

Hi,

I'm trying to integrate buttonless dfu to our project. We don't have any security concerns and given the existing project constraints, it's not desirable to use peer_manager and power_management (which uses app_timer....) libraries. We don't use bonding. So the use case looks pretty simple.

We'd like to be able to perform OTA DFUs using nordic secure bootloader and nrfconnect app. So I'd like to implement a simpler dfu service which could work with secure bootloader and nrfconnect.

Regarding power_management library, it looked that its only use was in the ble_dfu_buttonless_bootloader_start_finalize() function in ble_dfu.c. Hence it seems easily replaceable with the following code snippet :

NRF_LOG_INFO("Shutdown complete.");
NRF_LOG_FINAL_FLUSH();        
NVIC_SystemReset();

The main interrogations come from peer_manager and nrf_dfu_ble_svci_bond_sharing.h ... I disabled bond support as mentioned at https://infocenter.nordicsemi.com/index.jsp?topic=%2Fsdk_nrf5_v17.0.2%2Fservice_dfu.html&cp=7_1_3_3_5_6&anchor=secure_dfu_buttonless_app and tried to dfu without peer manager (which seems not to be used for unbonded dfu). It failed.

To get it work I had to (at least) initialize peer manager. I say at least because I didn't initialize svci interface at all by calling ble_dfu_buttonless_async_svci_init() and it was sufficient to get buttonless dfu work.

Could you please explain a bit deeper what is absolutely needed to make my minimal implementation of unbonded dfu service ?

***EDIT*** I'm using nRF5 SDK 17.0.2 with softdevice s140_nrf52_7.2.0 on a nRF52840 devkit

Best regards,

Hugo

Related