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

How do I calculate throughput for a BLE link?

How can I calculate the maximum throughput for an application running on the nRF51822 and the S110, when connecting to different kind of Central devices?

Parents
  • There are primarily 3 factors that determine maximum throughput with BLE:

    • operation type,
    • connection interval, and
    • number of packets transmitted per connection event.

    Operation For high-throughput applications, you should make sure to use either Write Commands (Write without response) or Notification. In each such Write Command or Notification, you can have 20 B data. These packets are link-level ACK-ed, but does not provide any application level ACK-ing, and can hence be queued. If you instead use Write Requests or Indications, you can by spec not queue packets and must wait for an ACK to the first packet before sending the next. This significantly reduces throughput (perhaps 10-fold).

    Connection interval Both the nRF8001 and the nRF51822 supports the lowest connection interval allowed by spec, 7.5 ms. This is also supported by some Android devices, while others does not seem to allow intervals below 37.5 ms. The latest versions of iOS seems to have 30 ms as the lowest documented interval supported.

    Number of packets per event With regard to number of packets per connection event, the nRF8001 will be able to receive 2-3 but can transmit only 1. The nRF51822 on the other hand can both send or transmit up to 6 packets per interval. It seems that most Android devices supports ~4 packets per interval, while most iOS devices supports up to 6 packets.

    Calculation As you can see from the above, throughput with BLE isn't quite straightforward, but given a number of packets per interval n and a connection interval T, the maxiumum throughput can be calculated like this:

    n * 20 B * 1/T

    Some examples:

    • iPhone 5/6 + IOS 8.0/8.1 with nRF51822: 6 * 20 B * 1/0.030 s = 4 kB/s = 32 kbps
    • iPhone 5/6 + IOS 8.2/8.3 with nRF51822: 3 * 20 B * 1/0.030 s = 4 kB/s = 16 kbps
    • iPhone 5/6 + IOS 8.x with nRF8001: 1 * 20 B * 1/0.030 s = 0.67 kB/s = 5.3 kbps
    • Nexus 4 with nRF51822: 4 * 20 B * 1/0.0075 s = 10.6 kB/s = 84 kbps
    • Master Emulator Firmware (MEFW) with nRF51822 0.9.0: 1 * 20 B 1/0.0075 = 2.67 kB/s = 21.33 kbps
    • Master Emulator Firmware (MEFW) with nRF51822 0.11.0: 6 * 20 B 1/0.0075 = 16 kB/s = 128 kbps

    How to receive BLE packets via nRF51822/nRF51422 and Master Emulator Firmware is described in this tutorial, section "Using the nRF51 Dongle". Further discussion on BLE throughput test is on this thread. Also different BLE packet types heavily influence the maximum throughput, as described in this blog.

Reply
  • There are primarily 3 factors that determine maximum throughput with BLE:

    • operation type,
    • connection interval, and
    • number of packets transmitted per connection event.

    Operation For high-throughput applications, you should make sure to use either Write Commands (Write without response) or Notification. In each such Write Command or Notification, you can have 20 B data. These packets are link-level ACK-ed, but does not provide any application level ACK-ing, and can hence be queued. If you instead use Write Requests or Indications, you can by spec not queue packets and must wait for an ACK to the first packet before sending the next. This significantly reduces throughput (perhaps 10-fold).

    Connection interval Both the nRF8001 and the nRF51822 supports the lowest connection interval allowed by spec, 7.5 ms. This is also supported by some Android devices, while others does not seem to allow intervals below 37.5 ms. The latest versions of iOS seems to have 30 ms as the lowest documented interval supported.

    Number of packets per event With regard to number of packets per connection event, the nRF8001 will be able to receive 2-3 but can transmit only 1. The nRF51822 on the other hand can both send or transmit up to 6 packets per interval. It seems that most Android devices supports ~4 packets per interval, while most iOS devices supports up to 6 packets.

    Calculation As you can see from the above, throughput with BLE isn't quite straightforward, but given a number of packets per interval n and a connection interval T, the maxiumum throughput can be calculated like this:

    n * 20 B * 1/T

    Some examples:

    • iPhone 5/6 + IOS 8.0/8.1 with nRF51822: 6 * 20 B * 1/0.030 s = 4 kB/s = 32 kbps
    • iPhone 5/6 + IOS 8.2/8.3 with nRF51822: 3 * 20 B * 1/0.030 s = 4 kB/s = 16 kbps
    • iPhone 5/6 + IOS 8.x with nRF8001: 1 * 20 B * 1/0.030 s = 0.67 kB/s = 5.3 kbps
    • Nexus 4 with nRF51822: 4 * 20 B * 1/0.0075 s = 10.6 kB/s = 84 kbps
    • Master Emulator Firmware (MEFW) with nRF51822 0.9.0: 1 * 20 B 1/0.0075 = 2.67 kB/s = 21.33 kbps
    • Master Emulator Firmware (MEFW) with nRF51822 0.11.0: 6 * 20 B 1/0.0075 = 16 kB/s = 128 kbps

    How to receive BLE packets via nRF51822/nRF51422 and Master Emulator Firmware is described in this tutorial, section "Using the nRF51 Dongle". Further discussion on BLE throughput test is on this thread. Also different BLE packet types heavily influence the maximum throughput, as described in this blog.

Children
Related