SDK 17.1.0 OTA DFU Issue – Invalid Response 0x200106

Hello Team,

I am using SDK version 17.0.1 and have implemented OTA. I have also implemented a buttonless DFU without bonding and created a Blinky application. However, when I try to upload the ZIP file, I get the following error:

Enter bootloader sent (Op Code = 1)
Notification received from 8ec90003-f315-4f60-9fb8-838830daea50, value (0x): 20-01-06
Invalid response received (response: 0x200106, expected: 0x2001..)

All required configurations are enabled, such as DFU_ENABLE = 1.
Buttonless support is set to 0.

// DFU
#define BLE_DFU_ENABLED 1
#define NRF_DFU_TRANSPORT_BLE 1

// <q> NRF_DFU_BLE_BUTTONLESS_SUPPORTS_BONDS - Buttonless DFU supports bonds.
#ifndef NRF_DFU_BLE_BUTTONLESS_SUPPORTS_BONDS
#define NRF_DFU_BLE_BUTTONLESS_SUPPORTS_BONDS 0
#endif
log -
nRF Connect, 2026-01-24
Nordic (DF:0D:65:71:7A:52)
V 18:04:10.454 Connecting to DF:0D:65:71:7A:52...
D 18:04:10.454 gatt = device.connectGatt(autoConnect = false, TRANSPORT_LE, preferred PHY = LE 1M)
D 18:04:10.829 [Broadcast] Action received: android.bluetooth.device.action.ACL_CONNECTED
D 18:04:10.838 [Callback] Connection state changed with status: 0 and new state: CONNECTED (2)
I 18:04:10.838 Connected to DF:0D:65:71:7A:52
V 18:04:10.839 Discovering services...
D 18:04:10.839 gatt.discoverServices()
I 18:04:11.262 Connection parameters updated (interval: 7.5ms, latency: 0, timeout: 5000ms)
D 18:04:11.505 [Callback] Services discovered with status: 0
I 18:04:11.505 Services discovered
V 18:04:11.513 Generic Access (0x1800)
- Device Name [R W] (0x2A00)
- Appearance [R] (0x2A01)
- Peripheral Preferred Connection Parameters [R] (0x2A04)
- Central Address Resolution [R] (0x2AA6)
Generic Attribute (0x1801)
- Service Changed [I] (0x2A05)
   Client Characteristic Configuration (0x2902)
Secure DFU Service (0xFE59)
- Buttonless DFU [I W] (8ec90003-f315-4f60-9fb8-838830daea50)
   Client Characteristic Configuration (0x2902)
Nordic LED Button Service (00001523-1212-efde-1523-785feabcd123)
- Button [N R] (00001524-1212-efde-1523-785feabcd123)
   Client Characteristic Configuration (0x2902)
- LED [R W] (00001525-1212-efde-1523-785feabcd123)
D 18:04:11.513 gatt.setCharacteristicNotification(00002a05-0000-1000-8000-00805f9b34fb, true)
D 18:04:11.515 gatt.setCharacteristicNotification(00001524-1212-efde-1523-785feabcd123, true)
I 18:04:11.576 Connection parameters updated (interval: 45.0ms, latency: 0, timeout: 5000ms)
V 18:04:15.935 [DFU] DFU service started
V 18:04:15.935 [DFU] Opening file...
I 18:04:15.945 [DFU] Firmware file opened successfully
V 18:04:15.945 [DFU] Connecting to DFU target...
D 18:04:15.945 [DFU] gatt = device.connectGatt(autoConnect = false, TRANSPORT_LE, preferredPhy = LE_1M | LE_2M)
I 18:04:15.959 [DFU] Connected to DF:0D:65:71:7A:52
V 18:04:15.960 [DFU] Discovering services...
D 18:04:15.960 [DFU] gatt.discoverServices()
I 18:04:15.962 [DFU] Services discovered
W 18:04:15.975 [DFU] Application with buttonless update found
V 18:04:15.975 [DFU] Jumping to the DFU Bootloader...
V 18:04:15.975 [DFU] Enabling indications for 8ec90003-f315-4f60-9fb8-838830daea50
D 18:04:15.975 [DFU] gatt.setCharacteristicNotification(8ec90003-f315-4f60-9fb8-838830daea50, true)
D 18:04:15.975 [DFU] gatt.writeDescriptor(00002902-0000-1000-8000-00805f9b34fb, value=0x02-00)
I 18:04:16.031 [DFU] Data written to descr.8ec90003-f315-4f60-9fb8-838830daea50
V 18:04:16.031 [DFU] Notifications enabled for 8ec90003-f315-4f60-9fb8-838830daea50
A 18:04:16.031 [DFU] Indications enabled
V 18:04:16.032 [DFU] Writing to characteristic 8ec90003-f315-4f60-9fb8-838830daea50, value (0x): 01
D 18:04:16.032 [DFU] gatt.writeCharacteristic(8ec90003-f315-4f60-9fb8-838830daea50)
A 18:04:16.121 [DFU] Enter bootloader sent (Op Code = 1)
I 18:04:16.121 [DFU] Notification received from 8ec90003-f315-4f60-9fb8-838830daea50, value (0x): 20-01-06
E 18:04:16.121 [DFU] Invalid response received (response: 0x200106, expected: 0x2001..)
V 18:04:16.121 [DFU] Disconnecting...
D 18:04:16.122 [DFU] gatt.disconnect()
I 18:04:16.131 [DFU] Disconnected
D 18:04:16.131 [DFU] gatt.refresh() (hidden)
D 18:04:16.132 [DFU] gatt.disconnect()
D 18:04:16.135 [DFU] gatt.close()
D 18:04:16.138 [DFU] wait(600)
I 18:04:16.572 Connection parameters updated (interval: 7.5ms, latency: 0, timeout: 5000ms)
I 18:04:16.931 Connection parameters updated (interval: 45.0ms, latency: 0, timeout: 5000ms)
Parents
  • Hello,

    The app is responding with DFU_RSP_BUSY in response to the DFU enter command. Does your app run ble_dfu_buttonless_async_svci_init() at the beginning of main() like the ble_app_buttonless sample as well?

    Best regards,

    Vidar

  • I had implemented it in main.c, and later I also implemented it in the service function

    service function 

    static void services_init(void)
    {
    NRF_LOG_INFO("Starting services_init");
    ret_code_t err_code;
    ble_lbs_init_t init = {0};
    nrf_ble_qwr_init_t qwr_init = {0};
    ble_dfu_buttonless_init_t dfus_init = {0};

    // QWR
    qwr_init.error_handler = nrf_qwr_error_handler;
    err_code = nrf_ble_qwr_init(&m_qwr, &qwr_init);
    APP_ERROR_CHECK(err_code);
    NRF_LOG_INFO("QWR initialized");
    NRF_LOG_INFO("qmr");

    // -------- BUTTONLESS DFU (NO IF) --------
    // err_code = ble_dfu_buttonless_async_svci_init();
    // APP_ERROR_CHECK(err_code);
    NRF_LOG_INFO("DFU async SVCI initialized");
    NRF_LOG_INFO("BUTTONLESS");

    dfus_init.evt_handler = ble_dfu_evt_handler;
    err_code = ble_dfu_buttonless_init(&dfus_init);
    APP_ERROR_CHECK(err_code);
    NRF_LOG_INFO("DFU buttonless initialized");

    // LBS service (if you still want blinky)
    init.led_write_handler = led_write_handler;
    err_code = ble_lbs_init(&m_lbs, &init);
    APP_ERROR_CHECK(err_code);
    NRF_LOG_INFO("LBS initialized");
    NRF_LOG_INFO("BUTTONLESS succesfully ");
    NRF_LOG_INFO("Completed services_init");

    }

    main .c 

    int main(void)
    {
    ret_code_t err_code;


    err_code = ble_dfu_buttonless_async_svci_init();
    APP_ERROR_CHECK(err_code);


    log_init();

  • Actually, I am not using the buttonless sample code. I am using the Blinky application, and that error is coming. Can you first correct this using the sample code?

  • Yes, I know you are working on integrating the buttonless support into the Blinky sample, but I don’t have enough information to determine why you are getting the busy error in your case. That’s why as part of the troubleshooting asked if you could try the same with the reference implementation as well as trying to debug your app.

  • Since the Blinky application was not working, I used the Buttonless DFU application. However, I am still encountering the same issue. I will provide the commands used and the nRF Connect logs for reference.

    nrfutil settings generate --family NRF52840 --application ble_app_buttonless_dfu_pca10056_s140.hex --application-version 1 --bootloader-version 1 --bl-settings-version 2 bl_settings.hex

     

    merge-

    mergehex --merge bl_settings.hex secure_bootloader_ble_s140_pca10056.hex s140_nrf52_7.2.0_softdevice.hex ble_app_buttonless_dfu_pca10056_s140.hex --output bl_sd_settings_app.hex

    Flash-

    nrfjprog -f nrf52 --program bl_sd_settings_app.hex --verify

    4] ZIP PACKAGE”:

    nrfutil pkg generate --hw-version 52 --application-version 2 --application ble_app_buttonless_dfu_pca10056_s140.hex --sd-req 0x0100 --sd-id 0x0100 --key-file private.key blinky_application_s140.zip

  • I have not been able to find any other reports of this issue, nor have I experienced it myself. I see you changed the device name, did you change anything else in the original example apart from this? Please also attempt to debug the app to see where the busy error is being returned.

Reply Children
No Data
Related