Want to know the speed of the nrf54 series device firmware update

We evaluated the BLE Mesh DFU performance on the nRF52840 and observed that transferring a 342 KB binary took approximately 36 minutes. This aligns closely with the documentation provided on Nordic’s website. We would like to confirm whether the DFU speed for the nRF54 Series remains around ~1 kbps, or if higher throughput can be expected.

Parents
  • Hi Nagarajan,

    The standard throughput over BLE from Mobile app can reach even 50k. I am verifying internally whether for mesh this throughput is significantly lower ?

    Regards,

    Priyanka

  • I tested a point-to-point connection between a smartphone and the nRF52840, and the transmission speed reached up to 11 kbps. Could you please verify and provide clarification on the transmission speeds for both the nRF52 and nRF54 DK boards? This information is very important for our evaluation.

  • Please not that it's 50kilo bytes per second, i.e. approx. 400kbps.  The nRF connect and DM apps are also displaying the speed in kB/s not kbps when doing dfu with SMP.

    Also, for point to point on the 52 series, you may be bottlenecked by the flash memory (each 4k page erase takes about 90 ms during which the CPU will be halted). RRAM allows overwrite without erase.

  • oh ok, then I observed about 88 kbps throughput during DFU transfer from a smartphone to the nRF52840. To achieve speeds closer to 400 kbps, which specific controller part number would be appropriate?

    Given that the nRF54 series uses a multi-core architecture, the bottlenecks present in the nRF52 series should be eliminated. Does this mean we can expect significantly higher transmission speeds with the nRF54 series compared to the nRF52 series?

  • Hi,

    Please note that  Mesh DFU will be significantly lower compared to peer to peer DFU because Mesh DFU is designed to operate on several nodes in the network at the same time, in background when mesh network is live and operation. This is what I hear from the internal team:

    "Bluetooth Mesh DFU is designed to happen in the background. Ideally, our recommendation is to choose as slower speed as their use-case can tolerate. The slower DFU is better for continued network operation (to control the lights for examples) compared to faster DFU operation. Default for sending chunks is to send them as soon as possible once previous chunk has finished sending. Note that each chunk is many bytes long and therefore results in SAR transaction at the transport layer. This means:

    1. For unicast transfer: New chunk message will be sent once previous chunk message has finished. Meaning, previous SAR transfer has finished. The SAR transfer for unicast sending finishes once lower transport receives the full blockack for SAR message, or it fails to receive complete block ack after completing max number of retries.
    2. For multicast transfer: New chunk message will be sent once previous chunk message has finished. Meaning, previous SAR transfer has finished. The SAR transfer for multicast sending finishes once preset number of retries to send all segments are complete.

    So, likely customer has evaluated with default settings and they default max trasnfer speed that mesh DFU can achieve for given default SAR related Kconfig options. If network traffic during the DFU is not a concern for their use-case, they can use default settings.  

    Ideally, it is recommended to keep network traffic low, and keep a gap of 0.5 to 1 second between each DFU Chunk by configuring this setting."

    -Priyanka

  • I’m using the default distributor and target sample code without any modifications to the configuration. If I change the default value to 500 or 1000 in the distributor code, will it improve the transmission speed? Alternatively, could you guide me on how to configure the settings to achieve higher transmission speeds?


    config BT_MESH_TX_BLOB_CHUNK_SEND_INTERVAL
    int "BLOB Client chunk send interval"
    default 0
    range 0 2147483647

Reply
  • I’m using the default distributor and target sample code without any modifications to the configuration. If I change the default value to 500 or 1000 in the distributor code, will it improve the transmission speed? Alternatively, could you guide me on how to configure the settings to achieve higher transmission speeds?


    config BT_MESH_TX_BLOB_CHUNK_SEND_INTERVAL
    int "BLOB Client chunk send interval"
    default 0
    range 0 2147483647

Children
  • This is what I heard from the internal experts:

    "Wondering why do they need even faster DFU timing than default timing of unicast (i.e. one to one) mesh DFU transfer? Is customer's ultimate goal is to upgrade just one or two  nodes (using unicast DFU) or do hundreds of nodes simultaneously (using multicast DFU) in parallel?  Also, is it acceptable for their use-case to have a performance bottleneck (or missed messages) for other command and control mesh messages (such as turning the FAN on or off, or getting temperature reading from the sensor, etc.) when multicast or unicast mesh DFU is in progress?"

    -Priyanka

  • I tried using multicast by subscribing all targets to the group address 0xC000. I then added this group address to the receiver target list in the distributor. After starting the DFU process, it did not work. Am I missing something in this procedure?

  • Nagajans said:
    I tried using multicast by subscribing all targets to the group address 0xC000.

    That's correct. Make sure you have subscribed Firmware Update Server, and BLOB Transfer Server model instances on the target devices. It is necessary to configure both for subscriptions.

    Nagajans said:
    I then added this group address to the receiver target list in the distributor.

    You cannot add group address to target list. The target list is still the unicast addresses for the target. The DFU start command becomes different when you want to use the group address. So,

     

    For Unicast DFU transfer, you will use something like this (if your appkey index is 0 and slot index is 0):

    mesh models dfd start 0 0

     

    For Multicast DFU transfer, you will use something like this (if your appkey index is 0 and slot index is 0, groupcast address of 0xC000):

    mesh models dfd start 0 0 0xC000

    Also, you can try using iOS nRF Mesh app to evaluate this (mesh DFU including group transfer). We recently added this feature to iOS mobile app, we don't have exact documentation yet explaining this, but it should be possible to evaluate this on your own by experimenting. It will alleviate a lot of hassle in trying to configure publish/subscribe settings and setting up of the transfer.

    -Priyanka

  • I tested broadcasting with a multicast address, but it seems to take longer compared to updating a single device, since the Distributor waits for responses from each target. Is there a way to perform the update without requiring responses, to make the process faster?

  • Broadcast updates will be slow by design. Because it won't matter much if they are updating 10 devices or 100 device, Total time required will be more-or-less the same. It is designed on purpose to support update of hundreds of devices with predictability and without loss of many packets.

    -Priyanka

Related