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. 

  • Hi Hung, thanks so much for the in depth explanation. 

    You are correct, I combined a mesh application and the buttonless DFU example.

    Just one thing, when you say "reset" the device, do you mean a simple power cycle (I know this can be done in software as well with the node_reset() function)? 

  • Yes, either software or hardware reset. But make sure the flash is finished writing before you reset ( as implemented inside node_reset() ) 

  • Hi Hung, 

    I managed to get it working. 

    I am simply scheduling a reset 60 seconds after provisioning. One should be careful when you reset the device though, I believe that you have to follow a whole sequence of events regarding the configuration server. Just because the device is provisioned does not mean it is configured. But for now it works fine.

    Thanks so much for your help:)

Reply
  • Hi Hung, 

    I managed to get it working. 

    I am simply scheduling a reset 60 seconds after provisioning. One should be careful when you reset the device though, I believe that you have to follow a whole sequence of events regarding the configuration server. Just because the device is provisioned does not mean it is configured. But for now it works fine.

    Thanks so much for your help:)

Children
No Data
Related