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

Maximizing NRF52 & iOS BLE throughput in both directions

Hello

I'm trying to maximize the throughput between a NRF52832 and iOS devices in both directions.

Currently, I seem to achieve about 400 Kbps from an iPhone 8 to the NRF52 using:

  • CBCharacteristicWriteWithoutResponse
  • maximumWriteValueLengthForType:CBCharacteristicWriteWithoutResponse
  • canSendWriteWithoutResponse on iOS side.

This seem to be what I can expect considering the Apple WWDC 2017 talk about Core Bluetooth.

However, when I send data from the NRF52 to the iPhone, I cannot go beyond 128 Kbps.

I do this using:

  • sd_ble_gatts_hvx()
  • BLE_GATT_HVX_NOTIFICATION
  • multiple calls to sd_ble_gatts_hvx() until the SoftDevice queue is filled up
  • calling again sd_ble_gatts_hvx() as soon as I get a BLE_GATTS_EVT_HVN_TX_COMPLETE

In both cases, the interval is set to 15ms, PHY=2Mbps, ATT MTU set to 185 bytes, Gatt data length set to 251 bytes.

  1. How can I improve the throughput from NRF52 to iOS?
  2. Isn't it supposed to be the same speed in both directions?

Thanks! 

Parents Reply
  • I was able to achieve around 380 kbps using a L2CAP channel with the stream going from the NRF52 to the iPhone which is much better than the original 128 kbps.

    However, this is still below below the 400 kbps obtained in the other directions and without the lightweight protocol advantage of L2CAP.

    I still need to try the L2CAP channel from the iPhone to the NRF52.

Children
Related