This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

Buttonless DFU disconnect

Hi, 

I am trying to perform Buttonless DFU on a nrf52832 chip. I am using SES on Windows. I do DFU with nrfToolbox on my iPhone. 

The way I do it is by packaging the DFU bootloader, the SoftDevice and the buttonless app. After flashing it in a PCA10040 DevKit with an nrf52832 on it, it works fine and I can upload some firmware by clicking the 'Nordic_Buttonless' advertisement. 

However, when I try to flash it in my chip which is on a custom PCB, the app seems to work since it does advertise 'Nordic_Buttonless', but I get a 'Device failed to connect' notification when I try to flash some firmware. 

This is the main code from the button less app, followed by my code. I've cut the 'erase_bonds' variable from the example, since it raised errors, and I wonder if it might be the cause of my issue. 

bool       erase_bonds;
    ret_code_t err_code;

    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);
    
    timers_init();
    power_management_init();
    buttons_leds_init(&erase_bonds);
    ble_stack_init();
    peer_manager_init();
    gap_params_init();
    gatt_init();
    advertising_init();
    services_init();
    conn_params_init();

    NRF_LOG_INFO("Buttonless DFU Application started.");

    // Start execution.
    application_timers_start();
    advertising_start(erase_bonds);

    // Enter main loop.
    for (;;)
    {
        idle_state_handle();
    }

 // All inits are made before the main function
 
              if(DFU_flag == 1){

                  advertising_start(); 
               
                  ble_counter = 0;
                    while(ble_counter < 3000){

                    idle_state_handle();
                    ble_counter++;
                    nrf_delay_ms(10);
                    
                    }
                  
                  sd_ble_gap_adv_stop(m_advertising.adv_handle);
              }

Thanks for your help, 

Jerome

Parents
  • Hi Jerome, 

    Do you use any bonding in your application ? 
    Please try testing with bonding erased both your device and on the phone. 
    In addition, please make sure NRF_SDH_BLE_SERVICE_CHANGED =1 in sdk_config.h so iPhone would do a service discovery when switching to the bootloader. 

    If you still have the issue, you would need to debug and check if either the application crashes or the bootloader crashes when you connect. It's most likely the reason why the phone showed " Device failed to connect'

Reply
  • Hi Jerome, 

    Do you use any bonding in your application ? 
    Please try testing with bonding erased both your device and on the phone. 
    In addition, please make sure NRF_SDH_BLE_SERVICE_CHANGED =1 in sdk_config.h so iPhone would do a service discovery when switching to the bootloader. 

    If you still have the issue, you would need to debug and check if either the application crashes or the bootloader crashes when you connect. It's most likely the reason why the phone showed " Device failed to connect'

Children
Related