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

Max. throughput on BLE UART using coded phy

Hi!

I am evaluating BLE UART Demo with longe range (BLE_GAP_PHY_CODED). 

Max. data throughput (using different parameters for ATT_MTU size and connection inverval) seems to be aroung 3 KB/s. 

Can anyone confirm this? Shouldn't there be a higher throughput possible under good conditions?

Thanks!

Andreas

Parents Reply Children
  • Can you share the UART log, I'd like to see if the negotiated parameters are what you think they are. A sniffer trace would also be very helpful. 

  • Well, UART log is simple, but how to make a sniffer trace?

    throughput example:~$ config print
    ==== Current test configuration ====
    Board role: tester
    ATT MTU size: 247
    Data length: 27
    Connection interval: 6 units
    Connection length ext: on
    Preferred PHY: Coded
    GAP event length: 400
    throughput example:~$ config data_length 244
    Data length set to 244.
    throughput example:~$ run
    [00:00:00.083,435] <info> app: Preparing the test.
    [00:00:00.083,465] <info> app: Starting advertising.
    [00:00:00.083,587] <info> app: Starting scanning.
    [00:00:00.087,707] <info> app: Connected as a peripheral.
    [00:00:00.087,738] <info> app: Discovering GATT database...
    [00:00:00.087,768] <info> app: Sending PHY Update, Coded.
    [00:00:00.003,692] <info> app: Data length updated to 244 bytes.
    [00:00:00.010,894] <info> app: ATT MTU exchange completed. MTU set to 247 bytes.
    [00:00:00.084,075] <info> app: PHY update accepted. PHY set to Coded.
    [00:00:00.009,002] <info> app: AMT service discovered at peer.
    [00:00:00.016,540] <info> app: Notifications enabled.
    [00:00:00.022,216] <info> app: Test started
    [00:00:00.005,401] <info> app: Sent 1 KBytes
    [00:00:00.018,737] <info> app: Sent 2 KBytes
    [00:00:00.031,951] <info> app: Sent 3 KBytes
    [00:00:00.060,302] <info> app: Sent 4 KBytes
    [00:00:00.018,066] <info> app: Sent 5 KBytes
    [00:00:00.005,706] <info> app: Sent 6 KBytes
    [00:00:00.034,027] <info> app: Sent 7 KBytes
    [00:00:00.006,774] <info> app: Sent 8 KBytes
    [00:00:00.027,526] <info> app: Sent 9 KBytes
    [00:00:00.048,339] <info> app: Sent 10 KBytes
    [00:00:00.028,564] <info> app: Sent 11 KBytes
    ...
    [00:00:00.030,822] <info> app: Sent 1020 KBytes
    [00:00:00.074,157] <info> app: Sent 1021 KBytes
    [00:00:00.091,918] <info> app: Sent 1022 KBytes
    [00:00:00.041,992] <info> app: Sent 1023 KBytes
    [00:00:00.029,724] <info> app: Sent 1024 KBytes
    [00:00:00.004,119] <info> app: Done.
    [00:00:00.004,119] <info> app: =============================
    [00:00:00.004,119] <info> app: Time: 378.844 seconds elapsed.
    [00:00:00.004,150] <info> app: Throughput: 22.14 Kbps.
    [00:00:00.004,150] <info> app: =============================
    [00:00:00.004,150] <info> app: Sent 1048712 bytes of ATT payload.
    [00:00:00.004,150] <info> app: Retrieving amount of bytes received from peer...
    [00:00:00.010,498] <info> app: Peer received 1048712 bytes of ATT payload.
    [00:00:00.010,498] <info> app: Disconnecting...

    I did a test with 1M. There i get Throughput of around 260 kbps. So 1/8 would be around 32.5 kbps on coded PHY which I can see under good conditions. It seems that regardless of actual PHY my set-up is to "slow"...

  • It looks like you're getting the correct options, but I can't see the actual connection interval. 

    I suggest you set up as sniffer as described here: nRF Sniffer User Guide v2.1.

  • Hi!

    I have two PCA10056 and two PCA10059. As far as I see it, I would need a third PCA10056 to run the sniffer on?

    Did you or someone else have some real results with this setup (example and PCA10056)? I think your mentioned 80-90 kbps is just an estimation, right? I read another post and tried connection intervall 400 and data length 247. I can get 57 kbps. Is this the practical limit?

  • You can use a PCA10040 or a PCA10056 as the sniffer, and two PCA10059 as the BLE peers. Do note that the sniffer does not support Coded PHY yet, but we're interrested in finding the true Connection interval so it does not really matter in this case.

    I just estimated 80-90kbps as being 1/8th of a decent 1mbps link. There is one factor that might reduce the throughput and that is packet loss. Coded PHY is more susceptible to interference because of its packets being 8 times as long, this in turn means that you will have to re-transmit packets that are themselves more susceptible to noise. 
    I suggest lowering the MTU and DLE to 1/8 of maximum as well as decreasing the Connection Interval to 400/8 = 50ms, and event length of 50ms. This way you'll reduce both the chance of packet loss and the time it takes to re-transmit a lost packet. 

    I can get 57 kbps. Is this the practical limit?
    It might be, I've not checked myself, I'll do that tomorrow. 

    What's your Supervisor Timeout and Slave Latency settings?

Related