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

  • 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.

  • Hi Vance, 
    Sorry about that I thought nRF Conect for Desktop didn't support Buttonless DFU. 

    Have you tried to manually put the device to DFU mode and then do DFU on the next step ? 
    You can test it on a phone as well. Simply enable indication then write 0x01 to the DFU buttonless characteristic. You can see here.
    From what I can see in the log, it's not the image sending was the problem, it was how the application switch to bootloader causing the problem. 

    The sniffer would be very useful to check what's the difference between Android app and the Desktop app on how they put the device to DFU mode and what's wrong (and compare the stock buttonless with your application).You just need one extra DevKit to use as the sniffer. 

Related