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

nRF Connect for Desktop max throughput

Hi,

I'm trying to get the maximum possible throughput from a peripheral device, sending notifications to a central. I compare the throughput between 2 PCA10040 boards running example FW ble_app_att_mtu_throughput and between 2 PCA10040 boards running ble_app_att_mtu_throughput and the connectivty FW used in nRF Connect for desktop v2.4.0 with the Bluetooth Low Energy app v2.2.0 (on Windows 10). With nRF Connect and connection interval of 50ms, the throughput is much lower.

When using the ble_app_att_mtu_throughput example from SDK 14.0.0 (S132 SD V5.0), a throughput  of ~260Kbps can be archived with following parameters:

==== Current test configuration ====
Board role:             tester
ATT MTU size:           247
Connection interval:    6 units
Data length ext:        on
Connection length ext:  on
Preferred PHY:          1 Mbps

When increasing the connection interval to 50ms, a throughput of ~740Kbps can be archived (still at 1Mbps, 247 bytes);

Connection interval:    40 units

When then changing the preferred PHY to 2Mbps, the throughput becomes ~1300Kbps:

==== Current test configuration ====
Board role:             tester
ATT MTU size:           247
Connection interval:    40 units
Data length ext:        on
Connection length ext:  on
Preferred PHY:          2 Mbps

So far so good. 

I then used only 1 board for this att_mtu_throughput example and used nRF Connect for Desktop with the other board. In order to make this work I hardcoded m_gap_role in button_evt_handler() to make sure the tester board is advertising as peripheral.

In case of BOARD_TESTER_BUTTON, m_gap_role = BLE_GAP_ROLE_PERIPH

In case of BOARD_DUMMY_BUTTON, m_gap_role = BLE_GAP_ROLE_CENTRAL

In case of 7.5ms connection interval, the throughput is 250Kbps (using the same settings as above)

In case of 50ms connection interval, the throughput drops dramatically to 32Kbps (instead of 740Kbps without nRF connect).

So the throughput just decreases when the connection interval increases from 7.5ms to 50ms, while with the example application, it increases. Also the softdevice specification states higher a throughput with 50ms. Is this a known limitation of the connectivity FW/UART speed ? I would like to see the 1300 kBps using nRF Connect.

A second problem is that the 2Mbps PHY is seems not to be supported by the connectivity FW/nRF Connect, BLE app.

Regards,

Marten

Parents
  • Hi Marten,

    It's unlikely that the nRF Connect for Desktop will be able to achieve high throughput. The short reason is due to the way all events and commands are ack'ed on the transport layer between the PC and the connectivity firmware on the nRF52. This cause delays that prevent high throughput.

    I believe 2Mbps is planned later this autumn.

    Best regards,
    Kenneth

  • I'm not sure you are talking about connecting to PC BT adapter but by this configuration in C# I could achieve more than 800K :

    Laptop BT adapter:

    LMP 10

    Bluetooth Core Specification 5.1

    ** : before that I'd been using Lirad BT820-2 dongle  It didn't work more than 220K 

    ATT MTU size: 247
    hvn_tx_queue_size = 32
    #define NRF_SDH_BLE_GAP_EVENT_LENGTH MSEC_TO_UNITS(30, UNIT_1_25_MS)
    #define MIN_CONN_INTERVAL MSEC_TO_UNITS(30, UNIT_1_25_MS)
    #define MAX_CONN_INTERVAL MSEC_TO_UNITS(30, UNIT_1_25_MS)
    .tx_phys = BLE_GAP_PHY_2MBPS,
    .rx_phys = BLE_GAP_PHY_2MBPS
    opt.common_opt.conn_evt_ext.enable = 1;

    TX Buffer size increased to 32 has very high effect on speed(couldn't set more because of memory error but I believe we can fix this problem)

    The BT adapter 

    you can see more information <<here>>

Reply
  • I'm not sure you are talking about connecting to PC BT adapter but by this configuration in C# I could achieve more than 800K :

    Laptop BT adapter:

    LMP 10

    Bluetooth Core Specification 5.1

    ** : before that I'd been using Lirad BT820-2 dongle  It didn't work more than 220K 

    ATT MTU size: 247
    hvn_tx_queue_size = 32
    #define NRF_SDH_BLE_GAP_EVENT_LENGTH MSEC_TO_UNITS(30, UNIT_1_25_MS)
    #define MIN_CONN_INTERVAL MSEC_TO_UNITS(30, UNIT_1_25_MS)
    #define MAX_CONN_INTERVAL MSEC_TO_UNITS(30, UNIT_1_25_MS)
    .tx_phys = BLE_GAP_PHY_2MBPS,
    .rx_phys = BLE_GAP_PHY_2MBPS
    opt.common_opt.conn_evt_ext.enable = 1;

    TX Buffer size increased to 32 has very high effect on speed(couldn't set more because of memory error but I believe we can fix this problem)

    The BT adapter 

    you can see more information <<here>>

Children
No Data
Related