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

Dfu Mesh

Hi, i want to use dfu for application with mesh. But i want to update via ble in direct connection with phone, not via mesh protocol. Should i use example from mesh sdk or from ble sdk?

  • Thank you. I am using experimental_lpn example, but i have error.

    00> <t: 0>, main.c, 521, ----- BLE Mesh LPN Demo -----
    00> <t: 0>, app_error_weak.c, 119, Mesh error 4 at 0x00000000 (:0)

    I found that its error from nrf_dfu_svci_vector_table_set(), because no bootloader was found. Do i need to download bootloader from Secure Bootloader example first? How can i do this from ses? When I try to download secure bootloader first, than experimental_lpn example, the second is not started.

    My steps:
    1. I follow this guide for start Secure Bootloader example 

    2. I run experimental_lpn example without erase, but in Debug mode application "running..." infinitely. When i press "break" i can see that application stopped at   00015F5A BF40  sev in dissasembly .

    And one more question. Can I erase application, but not erase bl and sd using ses?

  • I fixed my last issue by flashing Secure Bootloader example first, than I flash experimental_lpn example using nrfConnect on android. 

    But I have new problem. When I add this dfu functionality in my project, my application is not responding. It seems that this issue appears in function nrf_mesh_dfu_cmd_send() in nrf_mesh_dfu_init(). It looks like infinite loop. I dont see any error messages or asserts.

    My log output:

    <t:          0>, main.c,  300, ----- BLE Mesh Light Switch Server Demo-----
    <info> app: Setting vector table to bootloader: 0x000F8000
    <info> app: Setting vector table to main app: 0x00026000
    <info> app: ble_dfu_buttonless_backend_init after
    <info> app: sd_ble_gatts_service_add after
    <info> app: sd_ble_uuid_vs_add after
    <info> app: ble_dfu_buttonless_char_add after
    <t:       9514>, main_mesh.c,  111, BEFORE mesh_stack_init
    <t:       9520>, mesh_stack.c,   72, BEFORE nrf_mesh_init
    <t:       9990>, nrf_mesh_dfu.c,  644, AFTER dfu_cmd_handler_set
    <t:       9997>, nrf_mesh_dfu.c,  656, AFTER rand_prng_seed
    <t:      10009>, nrf_mesh_dfu.c,  675, BEFORE nrf_mesh_dfu_cmd_send

    My code in nrf_mesh_dfu_init():

        __LOG(LOG_SRC_APP, LOG_LEVEL_INFO, "BEFORE nrf_mesh_dfu_cmd_send")
        error_code = nrf_mesh_dfu_cmd_send(&init_cmd);
        __LOG(LOG_SRC_APP, LOG_LEVEL_INFO, "AFTER nrf_mesh_dfu_cmd_send");

Related