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

Tutorial on setting up the bootloader for nrf52832 in IAR

Hi.

 

I' m using nRF52832, SDK v15.0.0, S132.

 

I'm want tutorial how make bootloader DFU in IAR.

 

How I make bootloader DFU for nrf52832 in IAR?

Parents Reply
  • nrf_dfu_peer_data_t is defined in nrf_dfu_types.h - Make sure that you have added this in the include path in IAR ( the file is located in components\libraries\bootloader\dfu) 

    nrf_dfu_set_peer_data_svci_async_t is defined when NRF_SVCI_ASYNC_FUNC_DECLARE(NRF_DFU_SVCI_SET_PEER_DATA, nrf_dfu_set_peer_data, nrf_dfu_peer_data_t, nrf_dfu_peer_data_state_t); is called nrf_dfu_ble_svci_bond_sharing.h

    #define NRF_SVCI_ASYNC_FUNC_DECLARE(svci_num,                                           \
                                        name,                                               \
                                        param_type,                                         \
                                        state_type)                                         \
    /*lint --e{19} */                                                                       \
    NRF_SVCI_ACYNC_FUNC_TYPEDEF(name, param_type, state_type);                              \
    NRF_SVCI_ASYNC_EVENT_FUNC_TYPEDEF(name, state_type);                                    \
                                                                                            \
    typedef struct                                                                          \
    {                                                                                       \
        name ## _async_fn_t     async_func;                                                 \
        name ## _event_fn_t     sys_evt_handler;                                            \
        state_type              state;                                                      \
    } name ## _svci_async_t;
    

Children
  • I add file \libraries\bootloader\dfu figure IAR error_1.

    I include in main.c following libraries:

    #include "nrf_dfu_ble_svci_bond_sharing.h"
    #include "nrf_svci_async_function.h"
    #include "nrf_svci_async_handler.h"


    figure library nrf_dfu_ble_svci_bond_sharing.h

    figure library nrf_svci_async_function.h

    Errors remained.

  • I build project.  

    I added peer_id.c, peer_data_storage.c, peer_database.c, peer_manager.c, pm_buffer.c, pm_mutex.c, security_dispatcher.c, security_manager.c, gatt_cache_manager.c, gatts_cache_manager.c,id_manager.c include in sdk_config.h CRC16_EABLE, FDS_ENABLE, NRF_DFU_BLE_BUTTONLESS_SUPPORTS_BONDS,  NRF_SDH_BLE_SERVICE_CHANGED and BLE_DFU_ENABLED and added BL_SETTINGS_ACCESS_ONLY, NRF_DFU_SVCI_ENABLED
    NRF_DFU_TRANSPORT_BLE=1

    There is a guide or an application note that explains the several steps needed to integrate buttonless DFU to a custom application?

    What do I must make for full completions buttonless DFU?

  • No, unfortunately we do not have such a guide. 

    I suggest that you compare the project settings of your ble_app_uart project IAR project with the settings of the ble_app_buttonless_dfu IAR project. You will then see which .c files that are nescessary , which paths to .h files that must be added to the include directories path and which Preprocessor definitions that are needed. 

  • 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");
        }
    }

    Which do one to use function advertising_start ? 

  • Just use the second one, i.e. advertising_start(bool erase_bonds), with erase_bonds = false. 

Related