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! 

Related