DFU in multiprotocol BLE/Thread application


1. I'm developing multiprotocol BLE/Thread app with Thread SDK 1.0 and I want to ask if there's a possibilty to perform DFU over Thread in that case? In Thread Secure DFU Example description there's something like this written:

"The Thread stack does not use the SoftDevice, but the --sd-req 0x00 option is required to indicate that no SoftDevice is used."

So what in case of multiprotocol solution? Do I need just to insert the number of SoftDevice?

Thanks in advance,


  • Hello Marek,

    This field used in nrfutil, --sd-req 0xNN is used only for the bootloader to not accept a DFU pack that does not fulfill the requirements.

    So if your application is using multiprotocol; BLE and Thread, and the BLE part requires the softdevice (which it probably does), then you should use the --sd-req that fits to that softdevice.


    You may know this, but you can see the list of softdevice IDs by typing:

    nrfutil pkg generate --help


    Best regards,


  • I have not tested the Thread DFU yet, but I see that it uses the same bootloader library as the BLE bootloader, so I assume that it is only the transport layer that is changed.

    So if your application requires a softdevice, which it does if you use BLE, you must use --sd-req 0xNN, which matches the softdevice that you are using.


    You need to use coap_dfu_init(), yes. Just remember to also flash the bootloader before you run the project. At least in the regular BLE bootloader projects, it will return an error if it can't find any bootloader.

    I can't see that it uses the same function to look for the bootloader, but I assume it has the same check. Either way, you would need the bootloader in order to perform the DFU.


    I suggest that you try the guide for the Thread DFU example first, just to see that you get the bootloader is up and running before you try to implement it in a BLE + Thread project.


    Best regards,