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

NRF52832 buttonless dfu IAR

Hi.

I did the secure bootloader DFU. I attained step 8 in document.


I instal softdevice and secure bootloader to flash nRF52832. After make the ble_app_buttonless_dfu start download and debug but program not start.

If install only softdevice and buttonless_dfu then I got error "No bootloader was found".

If install softdevice and bootloader after buttonless dfu then I got not start programs.

Although security bootloader work. 
The verification was performed in the following steps:

E1. Generate new firmware.

E2. Generate new DFU .zip package.

E3. Switch the device to DFU mode, do DFU update and verify new image is running.

Help me.

Parents Reply Children
  • In project ble_app_uart function advertising_start have the form 

    static void advertising_start(void)
    {
        uint32_t err_code = ble_advertising_start(&m_advertising, BLE_ADV_MODE_FAST);
        APP_ERROR_CHECK(err_code);
    }

    In project ble_app_buttonless_dfu function advertising_start have the form 

    static void advertising_start(bool erase_bonds)
    {
        if (erase_bonds == true)
        {
            delete_bonds();
            // Advertising is started by PM_EVT_PEERS_DELETE_SUCCEEDED event.
        }
        else
        {
            uint32_t err_code = ble_advertising_start(&m_advertising, BLE_ADV_MODE_FAST);
            APP_ERROR_CHECK(err_code);
    
            NRF_LOG_DEBUG("advertising is started");
        }
    }

    What function to use advertising_start ?

  • I solved the compilation problems. I changed the function "services_init(void)" of project ble_app_uart in:

    static void services_init(void)
    {
        uint32_t           err_code;
        ble_nus_init_t     nus_init;
        nrf_ble_qwr_init_t qwr_init = {0};
        ble_dfu_buttonless_init_t dfus_init = {0};
    
        // Initialize Queued Write Module.
        qwr_init.error_handler = nrf_qwr_error_handler;
    
        err_code = nrf_ble_qwr_init(&m_qwr, &qwr_init);
        APP_ERROR_CHECK(err_code);
    
        // Initialize NUS.
        memset(&nus_init, 0, sizeof(nus_init));
    
        nus_init.data_handler = nus_data_handler;
    
        err_code = ble_nus_init(&m_nus, &nus_init);
        APP_ERROR_CHECK(err_code);
        
        //***** buttonless DFU *****
    
        // Initialize the async SVCI interface to bootloader.
        err_code = ble_dfu_buttonless_async_svci_init();
        APP_ERROR_CHECK(err_code);
    
        dfus_init.evt_handler = ble_dfu_evt_handler;
    
        err_code = ble_dfu_buttonless_init(&dfus_init);
        APP_ERROR_CHECK(err_code);
    
       //**************************
    }

    and add peer_manager_init

    nt main(void)
    {
        bool erase_bonds;
        
      //  static uint32_t pages_to_erase = 1;
        
        // Initialize.
        log_init();
        timers_init();
        buttons_leds_init(&erase_bonds);
        power_management_init();
        ble_stack_init();
        peer_manager_init();
        gap_params_init();
        gatt_init();
        services_init();
        advertising_init();
        conn_params_init();
    
        // Start execution.
        
        advertising_start(erase_bonds);

    I want start buttonless DFU with command. I get command through ble uart.  How do I may it make?

  • I got an error again.

    What do I do wrong?

    bootloader uploaded

  • How do start work DFU? I use function ble_dfu_buttonless_bootloader_start_finalize(); but she not started DFU. 

  • Hi Alex, 

    Have you tried and have an overview of how the ble_app_buttonless_dfu works ? 

    Like what is the main purpose of the buttonless service ? When would the buttonless service execute a reset to switch to bootloader, how to trigger that  ? 

    The documentation is a little bit vague about this but it's something you need to study and understand before porting it to you application. 

    I attached here the example I made to integrate dfu buttonless into ble uart. It's only KEIL support for now, but you can follow the exact project setting and the same main.c should works for you. It's for SDK v15.0 (most likely also works on 15.2)

    ble_app_uart - Buttonless.zip

Related