Buttonless DFU works for Android, IOS, but fails desktop

I am able to perform buttonless DFU with android and ios nrf cofail_log_00.txtnnect apps but it fails on desktop.  I have attached the Desktop log.  Any idea what the issue could be?

SDK 17.1.0
nrf52832
7.2.0_softdevice

Parents Reply Children
  • I'm using the 'dfu' button on desktop after connecting:

    Then it does not past the following screen:


    It will generate a log as originally attached.  I've seen the GATT_EVT_TIMEOUT with android in the log, but it retries and is successful.  I don't always see the timeout.

    I'm not sure how to switch manually using the DFU service.  When testing the bootloader separately, I am able to do DFU using the same update package that is successful with android and ios, but fails on desktop.

  • Vance J Farren said:
    I'm not sure how to switch manually using the DFU service.  When testing the bootloader separately, I am able to do DFU using the same update package that is successful with android and ios, but fails on desktop.

    Could you please elaborate more about the above ? Did you mean that you can do DFU update with nRF Connect for Desktop if you test only with the bootloader separately (not buttonless) ?  

    Could you try capture a sniffer trace  when you do the test ? Did you make any modification to the bootloader? 

  • Correct.  I can use desktop to do update testing bootloader separately.  The only modification to the bootloader is to increase the UUID count to 4 to match application custom services count.  I'm not yet familiar with the sniffer trace tool and will get back to you when I've tried that.

  • Hi Vance, 
    As far as I remember, the nRF connect for Desktop doesn't support buttonless update. 
    But what you can do is manually write to the buttonless service to switch it to DFU mode (enable indication and then write 0x01 to the buttonless characteristic). 
    Then it will disconnect and you can start connecting to the DFU bootloader to do DFU. 


    If you want to automat the process you can write your own code based on the application.

  • Buttonless DFU works with desktop with the buttonless example in  nRF5_SDK_17.1.0_ddde560\examples\ble_peripheral\ble_app_buttonless_dfu.  I just can't find the significant difference between that application and my own.  The only config that I'm unable to duplicate is NRF_SDH_DISPATCH_MODEL.  The buttonless example uses interrupt, my application uses polling.  My application also uses FreeRTOS which complains if I try to switch to interrupt dispatch model.

    Additionally, I've used my bootloader with UUID count at 4, with the internal buttonless example UUID count set to 4, and successfully did buttonless DFU to my target application.

    Nrf desktop just doesn't like my application for some reason.

    I've found that I needed to increase NRF_SDH_BLE_GATTS_ATTR_TAB_SIZE to accomodate the additional services.  I've also experimented with CONN_SUP_TIMEOUT in the hopes that perhaps my application needed more time to execute the characteristic interactions.  It seems to run a little slow with all of the services.

Related