Buttonless DFU with bond forwarding failed : [callback] : Central Manager failed to connect to peripheral[timeout] . DFU failed with error : Device failed to connect

Hi,

I am trying to integrate Buttonless DFU in my application.  I have implemented all the steps mentioned in this tutorial.

Getting started with Nordic's Secure DFU bootloader, a step by step guide - Software Development Kit - nRF5 SDK guides - Nordic DevZone

 Initially I faced some error because I had, DIS, ANCS and NUS serivces while DFU buttonless services appliation in to my code.

 I have resolved some errors with this tutorials and ticket : ble_app_hrs + Buttonless DFU on NRF52DK(52832) + OTA update - Nordic Q&A - Nordic DevZone - Nordic DevZone

Now following steps I am following in order to test the DFU OTA with Bond Forwarding : 

1.  Pair and Bond with my device using nRF connect for Mobile app.

2. Click the Document picker and select the zip file created for DFU OTA

3. Click  start

After this in nrf Connect for Mobile app, I can see that DFU started but after few seconds it displays DFU failed with error as Device failed to connect to peripheral[Timeout].

2. I have tried the same with Android also, but there also it is failed to connect with error code ad (0x93).

I am using nRF5 SDK v 17.1.0_ddde560.

Kindly please let me know what is wrong in my implementations so that I can correct it and successfully complete the DFU OTA with Bond Forwarding.

Thanks in Advance!!!

Parents Reply Children
  • Hi,

    The bond forwarding mechanism is to allow the application to share the bonding information with the bootloader so the connection in bootloader dfu mode can be encrypted as well (see Buttonless Secure DFU Service). But this is optional and it is not required for supporting bonding in the application.

    I suggest you revert back to the previous configuration you had where NRF_DFU_BLE_REQUIRES_BONDS (bootloader) and NRF_DFU_BLE_BUTTONLESS_SUPPORTS_BONDS (application) were disabled and try to debug the application again (enable debug logging, etc). For example, you can verify that the device enters Bootloader DFU mode when you send the "Enter DFU mode" command.

    Also make sure you are calling the function below at the beginning of your main()

     

    int main(void) 
    {
        ...
        log_init();
        
        // Initialize the async SVCI interface to bootloader before any interrupts are enabled.
        err_code = ble_dfu_buttonless_async_svci_init();
        APP_ERROR_CHECK(err_code);
        
        ...

Related