Mesh DFU transfer self hosted

Hi there,

The Mesh DFU on my project is so far working, but as stated on the bootloader read me, the process need to initiated and crontrolled by another extrenal entity.

Is there a possibility for a self hosted DFU transfer?

In a first stage the new firmware might be storred in an external flash and the process might be initiated by a button or later via an command from the internet.

Background:

The mesh network will be placed somewhere in the world with an LTE connection. The new firmware will be loaded and initiated therefore from the internet.

Cheers,

SirBuhi

Parents Reply
  • Dear Andreas,

    Unfortunately the LTE-device is given and I can't use its MCU.

    Therefore the idea is to control the mesh DFU from a source that is going to be updated itself during the background DFU operation.

    At the moment I'm thinking about using the nRF Util Tool for the DevicePage, Initial Flashing and creation of the zip file for the Mesh DFU process. The three necessary files will then be loaded into memory where the nRF52840 can access them.

    The control of the DFU process will then be implemented in the application part.

    Do you think that it will be possible?

    Cheers,

    SirBuhi

Children
  • Thank you for clarifying,

    I have a follow up question: Since you're working with DFU for Mesh, I'm assuming you're using nRF SDK 5 for Mesh. Could you verify and specify which version?

    SirBuhi said:
    Do you think that it will be possible?

    We believe it should be possible, but that it might be difficult to do so. There is a significant challenge in creating the node and algorithm which distributes the update chunks to the mesh network (i.e the DFU source, a similar task to what nrfutil does for Mesh DFU). Unfortunately we will most likely not implement a DFU source functionality for nRF5 SDK for Mesh, and in NCS the current Mesh specification does not support DFU.

    I would recommend you investigate the DFU protocol supplied I previously linked to as well as the Mesh DFU-sample we have in nrf5 SDK for Mesh: https://infocenter.nordicsemi.com/topic/com.nordic.infocenter.meshsdk.v5.0.0/md_examples_dfu_README.html

    Kind regards,
    Andreas

  • Yes, Version "nRF5 SDK for Mesh v5.0.0" is the one that we already have implemented in the project and would like to use now.

    Cheers,

    Patrick

  • Hi,

    I will have to do some more investigation throughout the coming week, but I don't think we have any other information/resources than what I've supplied here for how to do this. I'll get back to you as soon as I know if I can give you some more information

    Kind regards,
    Andreas

  • Hi,

    Apologies for the delayed response, I've been out of office last week due to a fever.

    Unfortunately I've not found any other resources, samples or guides for how to create this specific DFU variation than the Mesh DFU sample with its propriatary mesh dfu protocol documentation. The challenges that I've mentioned in my earlier reply are still valid, but the Mesh team commented that the procedure you suggested earlier sounds like the correct way to move forward.

    Kind regards,
    Andreas

  • Hi there,

     

    I’m currently struggling a bit with my self hosted mesh dfu.

     

    Currently I can do a self hosted DFU via the UART. Which means that I have the code for the deployment running in the application and send it out over the app uart. The TX pin of the app uart is physically connected to the RX of the serial interface. Like that all is running as wished.

     

    Since that is not the preferred option, I’m looking for an integrated version, without using the UART part.

     

    For that I do send my DFU data directly to the nrf_mesh_dfu_rx() function. Somewhere down the line of the nrf_mesh_dfu_rx() function the time_sch_reschedule() function of the timer_schedule.c file gets called and in there the bearer_event_in_correct_irq_priority(). Where somehow the problem lies.

     

    Case Mesh Init IRQ Priority: NRF_MESH_IRQ_PRIORITY_LOWEST

    If I initialize the mesh with the priority level NRF_MESH_IRQ_PRIORITY_LOWEST the DFU can be received via UART connection (host) and BLE connection (target). However, I get an mesh error while calling the nrf_mesh_dfu_rx() function to inject data.

     

    Case Mesh Init IRQ Priority: NRF_MESH_IRQ_PRIORITY_THREAD

    If the mesh is initialized with the priority level NRF_MESH_IRQ_PRIORITY_THREAD I can send now data to the nrf_mesh_dfu_rx() function and the host board updates itself. But, the DFU data does not get transmitted to the other boards over BLE. As well as it is not possible anymore to update the board via the Serial UART interface. It looks for me, as this settings changes more than wished.

     

    Can you maybe give me a hint in which direction to search, to get it running?

     

    Cheers,

    SirBuhi

Related