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

nRF8001 What is the maximum data rate with peered device?

As stated in standard the maximum data rate is 0.27Mbps. So is that is true for nRF8001 ??

  • Around 20ms, what Apple supports (from another post):

    If you're working with Apple devices, it's useful to be aware of the fact that they have their own document detailing their recommendations for connection parameters. This document can be found here: https://developer.apple.com/hardwaredrivers/BluetoothDesignGuidelines.pdf

  • The reason I asked about the connection interval was that I couldn’t get your numbers to add up; at 20 ms you should be able to get a data throughput of about 8*20 bits * (1000 ms / 20 ms) = 8kbit/s Notifying, and 3 – 4 times that when receiving writes from the peer.

  • I paste a new reply from the Nordic employee who just corrected his reply:

    Ole Morten44 minutes ago I just realized my calculations were wrong by a factor 8... If you read the above as kilobytes per second, not kilobits, they are correct. The throughput of nRF8001 is hence 0.67 kBps or 1-2 kBps (or 5-6 kbps and 10-16 kbps), given a 30 ms connection interval. Sorry for the confusion!

  • Now that we understand the theory behind the communications using BLE and the nRF8001 stack, I would like to state clear the theoretical and experimental numbers. I think it is a really valuable information for the community of developers:

    nRF8001 Max Throughput: It can send only one packet and receive two-three packets for each connection event. Each packet contains 20 bytes.

    1. Theory:

    With iOS, this becomes 0.67 kBps or 1-2 kBps (or 5-6 kbps and 10-16 kbps), given a 30 ms connection interval.

    1. Actual/Real (measured during experiments):

    Receive packets in the iPhone every 32ms. 1 packet each 32ms -> 31 packets/sec -> 620Bps -> 4960bps

    Please, if anyone has a counter example, feel free to add it to these numbers. Figures for Android devices are also welcome.

  • I'm trying to use this as a solution for transmitting SteamVR positional information to a mobile device. In my 20 byte packet im packing the following:

    • 0: Device ID
    • 1-4: translation X float value
    • 5-8: translation X float value
    • 9-12: translation X float value

    For a total of 13bytes out of the 20bytes allotted. My data is being fed from Serial USB and I'm transmitting this information to my mobile device as fast as I can. I've tried the follow:

    1. Changing Serial baud rates
    2. Setting Serial timeouts to low value
    3. adjusting SPI clock dividers
    4. commenting out code to buffer untransmitted data

    All of which yielded roughly around 30fps of data received at the mobile device although my experience was running at 60+fps on my zenfone AR in a fairly empty VR scene.

    I'm going to try to use wifi now. But it seems pretty consistent with the data provided above.

Related