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

Transfer speed secure DFU SDK14

Hi,

I wonder what transfer speed can be expected on a BLE DFU update on a nRF52832 based device in the following condition?

-SDK14.0 Secure DFU, nRF52832, Android tablet (Oreo, Bluetooth 5.0), nRF Connect

We are currently facing a transfer speed of about 1 Kbytes/sec, which sounds way too low. On a 350 Kbytes file, it will take almost 6 minutes to transfer.

Regards, Jan

Parents
  • Hi

    Here are some thoughts from one of the DFU gurus:

    There are no hidden tricks, unfortunately. I think SDK version 12.3.0 went as fast as 3.5kb/s, but this was degraded to 1.5kb/s after some changes in SDK 13 and improved again in SDK 14 up to 4.5kb/s.

    There are many variables to take into account and the unfortunate thing is that the transfer might fail if only one of the variables is updated and the rest is not. This is because the current DFU protocol does not implement any kind of flow control.

    The variables that can be tweaked are NRF_FSTORAGE_SD_MAX_WRITE_SIZE (smaller), connection interval (smaller is faster), and event length might help too. I think the latter depends on which SDK version you are running, since increasing the event length basically steals time from flash access, which is the real bottleneck when we approach higher speeds. It might however help on crippled implementations running as low as 1.5kb/s.

    Connection interval is the obvious thing to tweak here because I reckon most Android phones will request a higher interval and the bootloader does not request it by itself. It just accepts whatever the peer requests. That would explain why some phones run faster than others against the same fw implementation.

    @janR, can you try to increase the data length as suggested here, but set the data length in ble_stack_init() in addition to setting the value in sdk_config.h? I was made aware that increasing the value in sdk_config.h alone doesn't configure the Softdevice with long lengths from the get-go.

  • Those traces seem to confirm my suspicions. When you use the PCA10040, the two devices agree on a connection interval of 7.5ms from the get go and leave it at that. The Tablet starts off with 7.5ms, but after 40.86 seconds it sends a Connection Update Indication packet and adjusts the connection interval to 48ms.

Reply Children
  • Hi,

    I have now managed to improve speed of the secure DFU bootloader in SDK14.
    Speed has improved from about 1 kbyte/sec to 3.5 kbyte sec on a Samsung tablet with bluetooth 4.2, and about 5.5 kbyte/sec on a Samsung Galaxy S8 phone with bluetooth 5.
    The only change to bootloader is reducing connection interval. This is now reduced from 48.75ms to between 10 and 12ms.
    There were no functionality in the SDK14 secure DFU bootloader for doing this (no negotiation were done regarding connection interval), so tablet could set whatever connection interval it wanted.
    In SDK11, (which has much faster flashing) the negotiation was implemented using the ble_conn_params module.
    Enabling the NRF_BLE_CONN_PARAMS in SDK14, setting min/max connection interval to 10/12, and call the ble_conn_params_init() did the trick.

    Regards, Jan

Related