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
  • I guess you are calling requestConnectionPriority() with CONNECTION_PRIORITY_HIGH? Then you should get 11.25-15ms connection interval, but I would check what the actual connection interval is, see this.

    As far as I know Nexus 5 supports 6 packets of 20 bytes per connection interval.

    With 15ms connection interval and 6 packets of 20 bytes in every connection interval you should be able to achieve a throughput of 6 * 20 * 8/0.015 = 64kbps. But this is assuming that you have no packet loss, that you fill all packets with 20 bytes, that Android allows you to send 6 packets in every connection interval.

    I would check the actual connection interval, and then I would use a sniffer to see what is actually happening on air. Also keep in mind that you will have to process the packets in the peripheral quickly.

Reply
  • I guess you are calling requestConnectionPriority() with CONNECTION_PRIORITY_HIGH? Then you should get 11.25-15ms connection interval, but I would check what the actual connection interval is, see this.

    As far as I know Nexus 5 supports 6 packets of 20 bytes per connection interval.

    With 15ms connection interval and 6 packets of 20 bytes in every connection interval you should be able to achieve a throughput of 6 * 20 * 8/0.015 = 64kbps. But this is assuming that you have no packet loss, that you fill all packets with 20 bytes, that Android allows you to send 6 packets in every connection interval.

    I would check the actual connection interval, and then I would use a sniffer to see what is actually happening on air. Also keep in mind that you will have to process the packets in the peripheral quickly.

Children
No Data
Related