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

Slow BLE throughput with Nexus 5X

Hi,

I am trying to transfer large amounts of data over BLE, to a large amount of devices so speed is critical.

So far, i am able to send the nRF51422 (S110 V8.0.0) a 48Kbyte chunk of data in 12.6 seconds which is roughly 32kBits a second if i am right, which is far from the value of 125kbits i have seen in another thread.

Writes in the app are queued, so whenever onCharacteristicWrite is called, another 20 byte packet is sent to the device. Also i use the BluetoothGatt#requestConnectionPriority to get a better connection interval prior to the transfer.

To my understanding, via this method of transferring, the nexus 5 should transfer 6 packets per interval, which should be around 10mS, resulting in much faster speed than i have now.

At the minute packets seem to be going to the device at a rate of around 5mS which would indicate that there are multiple packets being sent during the interval, as i think it cannot be lower than 7.5mS (if it was sending 6, then the interval would be 32mS).

The nRF51 is configured to accept a connection interval between 7.5 and 100mS.

Is there a different method i should be using in the app, or some missed config on the nRF51?

Parents
  • That is in 1.25ms units, so then you start off with a connection interval of 36 * 1.25ms = 45 ms, and then it gets updated to 58 * 1.25ms = 72.5ms. With 6 packets with 20 bytes in each you end up with a maximum throughput of:

    6 * 20 * 8 / 0.0725 = 13.241 kbps.

  • thanks for clarifying that, although it does not solve my issue. This morning i have tested this on a lot of different android phones, mostly different nexus, Samsung and Motorola devices and an intel based dell tablet. i have tried many android versions between 4.4.4 to 7.1.1. the requestConnectionPriority method only works on API 21 and above, but on all the devices that have it, always get an interval betweem 45-72.5mS, whether i request high, medium or low priority. Its like the nRF is rejecting the connection parameter updates. When i connect an ipad to it, it gets an interval of 30mS.

    The nRF has S110 V8.0.0, 51422 rev QFAC.

Reply
  • thanks for clarifying that, although it does not solve my issue. This morning i have tested this on a lot of different android phones, mostly different nexus, Samsung and Motorola devices and an intel based dell tablet. i have tried many android versions between 4.4.4 to 7.1.1. the requestConnectionPriority method only works on API 21 and above, but on all the devices that have it, always get an interval betweem 45-72.5mS, whether i request high, medium or low priority. Its like the nRF is rejecting the connection parameter updates. When i connect an ipad to it, it gets an interval of 30mS.

    The nRF has S110 V8.0.0, 51422 rev QFAC.

Children
No Data
Related