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

BLE DFU OTA a provisioned device

Hi all,

I am using mesh sdk3.20 and sdk15.30.

I noticed that with the buttonless ble dfu, it is not possible to perform a DFU transfer after the device was provisioned. I apologize if this has been answered somewhere, I cannot seem to find anything on it. I am using nrfConnect v3.20 with a nrf52840 DK to perform the OTA. 

1. Is this normal for security reasons? Or is it a bug?

2. Is there some setting to bypass this? I mean the bootloader is still encrypted, so you will need the private key to perform an OTA. 

I have attached two pictures to clarify my observation:

Before provisioning: DFU option available

After provisioning: DFU option not visible

Thanks in advance:)

Regards

Chris

Parents
  • Hi Chris, 

    I assume you combined a mesh application (with proxy and PB-GATT supported) to the buttonless DFU example ? 

    Note that when doing provisioning, there are 2 phases. First phase is provisioning via PB-GATT and second phase is configuration via GATT Proxy. They are different services. Our softdevice doesn't support changing attribute table after it's initialized so what we do is to reset the softdevice after provisioning and before configuration. 

    This is why you don't see the buttonless service after provisioning (but if you reset the device, it should be there).

    If you want to add buttonless service again, you should have a look at gatt_database_reset() and sd_state_evt_handler() inside mesh_provisionee.c. That's where we disable the softdevice and enable it again, with the proxy service instead of PB-GATT. If you want DFU service to be supported you should add the code to reinitialize DFU buttonless service here. Another option is to trigger a reset instead. 

Reply
  • Hi Chris, 

    I assume you combined a mesh application (with proxy and PB-GATT supported) to the buttonless DFU example ? 

    Note that when doing provisioning, there are 2 phases. First phase is provisioning via PB-GATT and second phase is configuration via GATT Proxy. They are different services. Our softdevice doesn't support changing attribute table after it's initialized so what we do is to reset the softdevice after provisioning and before configuration. 

    This is why you don't see the buttonless service after provisioning (but if you reset the device, it should be there).

    If you want to add buttonless service again, you should have a look at gatt_database_reset() and sd_state_evt_handler() inside mesh_provisionee.c. That's where we disable the softdevice and enable it again, with the proxy service instead of PB-GATT. If you want DFU service to be supported you should add the code to reinitialize DFU buttonless service here. Another option is to trigger a reset instead. 

Children
Related