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

Bootloader and SoftDevice update using Thread Secure DFU

nRF5 SDK for Thread and Zigbee v4.1.0 documentation states that only application can be updated over Thread Secure DFU.
However, nRF5 SDK for Thread and Zigbee v2.0.0 documentation says:
"Thread Secure DFU accepts images that contain a new bootloader or application, which contains the Thread network stack":

Does something changed in SDK 4.1 which is causing that bootloader can no longer be updated?
Is there any way to update bootloader and SoftDevice using Thread Secure DFU?

  • Hi,

    Sorry for the slow response on this. I have verified that the bootloader is updated correctly, but still struggling to determine why the newly received application is not activated.

    I will continue to work on this the next few days, hoping to have an answer for you soon.

    Best regards,
    Jørgen

  • Hi,

    Sorry again for the slow response.

    I think I have tracked down the problem to the change in bootloader settings that happened between nRF5 SDK v15.2.0 and v15.3.0. What happens is this:

    • When updating the bootloader from Thread SDK v2.0.0 to v4.1.0, the new bootloader supports the new bootloader settings format. 
    • After bootloader update, the bootloader detects the old settings format in flash and upgrades this to the new format.
    • The Thread DFU client application still only supports the old bootloader settings format, since this is based on SDK 2.0.0.
    • When the application transfer is completed, the old Thread DFU client will write the settings in the old format to flash. This is not detected by the bootloader, as it is not in the format it expects. The valid application in bank1 is therefore not detected.

    I discussed this with one of my colleagues, and he suggest that in this case it would be required to first update a "middle application" that supports both settings formats. It will go something like this:

    settings-version = read(bootloader_settings)
    
    if (settings-version==1):
        write(old_settings_format)
    else if (settings-version==1):
        write(new_settings_format)

    I will try to implement something like this in the beginning of next week, to se if this resolves the issue.

    Best regards,
    Jørgen

  • Hi,

    Thank you for the good news. Waiting for your results.

    Best regards,
    Krzysztof

  • Hi,

    Do you have any update on this matter?

    Best regards,
    Krzysztof

  • Hi,

    Unfortunately, the middle application is not done yet. I think I have managed to create the correct settings page, but the client does not enter the correct state to complete the DFU process with these changes. 

    Our Thread developers are looking into this as well, to try and speed up the process.

    Hope to get back to you with some good news soon!

    Best regards,
    Jørgen

Related