Compatibility between DFU bootloader and DFU master

We have been receiving quite a few questions about the compatibility issue between the bootloaders from different SDK versions and the DFU master such as nRF Master Control Panel, nRFToolbox, etc.

In this post, we will try to explain and give you information on what tool you should use on each version of the DFU bootloader.

Our suggestion is always to use the latest version of the DFU bootloader and the DFU tools.


[Update 29 Nov 2016] From SDK v12, we released the new "Secure DFU bootloader" which is not backward compatible with the DFU bootloader in previous SDK versions. The new Secure DFU bootloader reserve bigger size, has different transmission protocol a signed init packet is also required.

We have updated most of our DFU master to support both the legacy DFU bootloader and the new Secure bootloader. The current state of compatibility for Secure DFU bootloader is:

  • on PC: only nrfutil is compatible. nRF Connect and nRF MCP doesn't support.

  • on Android: latest DFU library, nRF Connect, nRFToolbox are compatible.

  • on iOS: latest DFU library, nRF Connect, nRFToolbox are compatible.

  • on Windows phone: nRF Toolbox on Windows phone doesn't support.

The experimental buttonless example is not supported natively from any app by the time of writing. But it's possible to switch to bootloader mode by enabling CCCD and writing 0x01 to the control point characteristic as described by documentation, manually.

On nRF51, it's not possible to update bootloader from legacy bootloader to new Secure DFU bootloader due to the fixed size challenge. On nRF52, it's possible, but it's not straight forward, please create a case to discuss if you need to do that.

What written bellow only applied for legacy DFU bootloader :


And rule of thumb is nRFToolbox (v1.14.0 Android, v2.0 iOS) and nRFMaster Control Panel (v3.0.0) are compatible with all DFU versions. Make sure you use the correct DFU file's format for each DFU version as described below.

For the DFU bootloader, there are mainly 3 versions that has some major changes which made them not compatible:


Group 1: DFU Bootloader from SDK v6.0 and earlier.

  • Only application DFU is supported.
  • Init packet is not obligated. No definition of init packet format.
  • Run on S110 v7.x (SDK v6.0), S110 v6.x (SDKv5.x).

Compatible with:

  • Master Control Panel application on PC v3.6. Download here: mastercontrolpanel.3.6.0.8331.x64.msi

  • nRFToolbox latest version on both Android and iOS (select no when asked for init packet, don't select zip file)

  • nRF Master Control Panel app on Android v3.0 (select no when asked for init packet, don't select zip file)


Group 2: DFU Bootloader on SDK v6.1.

  • Application, bootloader, softdevice, softdevice+bootloader update supported.
  • Init packet is not obligated. No definition of init packet format.
  • Run on S110 v7.x

Compatible with:

  • Master Control Panel application on PC v3.7.1. Download from our website, click Downloads tab and click the version number and select 3.7.1.

  • nRFToolbox latest version on both Android and iOS (select no when asked for init packet)

  • nRF Master Control Panel app on Android v3.0 (select no when asked for init packet)

  • When updating softdevice+bootloader with mobiel app, the naming is softdevice.hex and bootloader.hex, put inside a .zip file, such as this: softdevice7_1bootloader6_1.zip. No .dat file needed.

  • When updating softdevice+bootloader with MCP application v3.7 on PC, combine them using mergehex. I'm experiencing issue with new Jlink driver that MCP v3.7 couldn't recognize the dongle. If it's the case, please select File -> Option -> Serial port , and select show all serial port. After that you should be able to select the COM port opened by the dongle.


Group 3: DFU Bootloader on SDK v7.x and later

  • Application, bootloader, softdevice, softdevice+bootloader update supported.

  • Init packet is mandatory. The format of the init packet is defined here.

  • Button-less switching from application to bootloader is supported. Sharing bond information between application and bootloader is supported. This means the link can be re-encrypted when doing DFU.

  • Run on S110 v7.x (SDK v7.x) and S110 v8.0 (SDK v8.x).

  • DFU .zip file and required .dat file can be generated by nrf.exe tool. Follow this document.

Compatible with:


Note that you don't have to use the bootloader with the same SDK version or same compiler toolchain with the application to be able to do DFU. They are 2 separated applications. The only thing you need to match when updating the application or bootloader is the softdevice version running on the board.

So it's fine if you have you application is build with SDK v6.1 by gcc and your bootloader is from SDK v7.1 and is built with KEIL. They both should work fine with S110 v7.x

  • Everyone should be aware that the Python scripts for Master Control Panel 3.6 would create the init packet for you with all wildcards. Starting with version 3.7.1, you have to provide your own init packet.

    We spent a few days trying to figure out why we suddenly had to create an init packet for an update process that had been working. Nordic, PLEASE get your developers to include important details like this in their release notes.

  • Hi Hung,

    I have difficulty of locating the latest version of Master Control Panel on PC version. Will please update the "Download from our site" link? As I click it the an error will occur, object is unavailable. I hope a 32 bit version of PC tool is available.

    Thanks, mc