How to reach maximum BLE throughput at 2M PHY with nRF5340DK (peripheral) and nRF52 Dongle (central)?

Hi everyone,

I'm developing a BLE application where I measure throughput between an nRF5340DK acting as peripheral and an nRF52 Dongle as the central (using a Python script with Blatann on PC), and I’m trying to understand how to maximize the notification bandwidth under optimal conditions.

The setup now is:

  • Peripheral: nRF5340DK (Zephyr SDK v2.7.0)
  • Central: nRF52 Dongle + PC (Blatann as central manager)
  • Connection interval: 7.5 ms
  • PHY: Trying to enable 2M PHY using bt_conn_le_phy_update()
  • MTU: 247 bytes
  • Total characteristics used: 1 (for notify)

I observed that the maximum measured throughput is ~54 kbps, this is much lower than expected for 2M PHY and these parameters. At 2M PHY, with a 7.5 ms connection interval and a max payload of 244 bytes per notification the theoretical max throughput is 156 kbps, even  with overhead and ACKs, 90–130 kbps should be possible under ideal conditions.

Why am I stuck at ~54 kbps? Could the nRF52 Dongle (central using Blatann) be the bottleneck?

What’s the best way to confirm that 2M PHY is active on both devices (Zephyr side and dongle)?

Is it better to use multiple characteristics to increase throughput?

Any known limitations in the SoftDevice controller on the nRF52840 Dongle that might prevent higher notification rate?

Any tips on how to optimize scheduling of notifications in Zephyr to avoid gaps between notifications?

I'd like to get as close as possible to the real throughput ceiling using Zephyr on the nRF5340 and a BLE central based on the nRF52 dongle. Open to suggestions—should I switch to a different central? Or buffer/send differently?

Thanks for the support! I’ll gladly share code or measurement setup if helpful.

Eva

Parents
  • Hello,

    You should indeed be able to reach higher throughput over 2 Mbit Bluetooth. Have a look at the Throughput sample application: Bluetooth: Throughput for inspiration.

    When I used it with 2 Mbit some time ago I got the following results between two nRF52840-DK close to each other:

    ==== Starting throughput test ====
    PHY update pending
    LE PHY updated: TX PHY LE 2M, RX PHY LE 2M
    Connection parameters update pending
    Connection parameters updated.
     interval: 320, latency: 0, timeout: 1000
    LE Data length update pending
    LE data len updated: TX (len: 251 time: 2120) RX (len: 251 time: 2120)
    The test is in progress and will require around 20 seconds to complete.
                                                                               
    Done
    [local] sent 3434805 bytes (3354 KB) in 20001 ms at 1373 kbps
    [peer] received 3434805 bytes (3354 KB) in 6939 GATT writes at 1391672 bps
    

    1373 kbps is indeed higher than 54 kbps. Note that I used a higher Connection Interval than you. Have a look at Increasing BLE Throughput - Nordic Q&A - Nordic DevZone - Nordic DevZone to which role the Connection Interval plays.

    To verify that you are using 2 Mbit you can use the function `bt_conn_get_info()`. Or you can use a Bluetooth sniffer.

    I know nothing about Blatann and I have never tried running the Host on the PC. Are they communicating over serial? At which speed? I think such a setup also can introduce latencies. If you are using an UART at 115 kbps that will introduce a bottleneck for the Bluetooth communication link.

Reply
  • Hello,

    You should indeed be able to reach higher throughput over 2 Mbit Bluetooth. Have a look at the Throughput sample application: Bluetooth: Throughput for inspiration.

    When I used it with 2 Mbit some time ago I got the following results between two nRF52840-DK close to each other:

    ==== Starting throughput test ====
    PHY update pending
    LE PHY updated: TX PHY LE 2M, RX PHY LE 2M
    Connection parameters update pending
    Connection parameters updated.
     interval: 320, latency: 0, timeout: 1000
    LE Data length update pending
    LE data len updated: TX (len: 251 time: 2120) RX (len: 251 time: 2120)
    The test is in progress and will require around 20 seconds to complete.
                                                                               
    Done
    [local] sent 3434805 bytes (3354 KB) in 20001 ms at 1373 kbps
    [peer] received 3434805 bytes (3354 KB) in 6939 GATT writes at 1391672 bps
    

    1373 kbps is indeed higher than 54 kbps. Note that I used a higher Connection Interval than you. Have a look at Increasing BLE Throughput - Nordic Q&A - Nordic DevZone - Nordic DevZone to which role the Connection Interval plays.

    To verify that you are using 2 Mbit you can use the function `bt_conn_get_info()`. Or you can use a Bluetooth sniffer.

    I know nothing about Blatann and I have never tried running the Host on the PC. Are they communicating over serial? At which speed? I think such a setup also can introduce latencies. If you are using an UART at 115 kbps that will introduce a bottleneck for the Bluetooth communication link.

Children
No Data
Related