This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts
This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

BLE send and receive speed, GATTS

Hello,

Currently i am doing some testing with the NRF52 DK. I am measuring the time it takes to send and receive a BLE message. I am using the high bandwidth setting the the TX and RX.

conn_bw.conn_bw.conn_bw_rx = BLE_CONN_BW_HIGH;
conn_bw.conn_bw.conn_bw_tx = BLE_CONN_BW_HIGH;

also i am using a write command instead of a write request.

writeParameters.write_op = BLE_GATT_OP_WRITE_CMD;
err = sd_ble_gattc_write(connectionHandle, &writeParameters);

For the connection interval I use both on 7.5 ms

uint16_t meshMinConnectionInterval = MSEC_TO_UNITS(7.5, UNIT_1_25_MS);   	
uint16_t meshMaxConnectionInterval = MSEC_TO_UNITS(7.5, UNIT_1_25_MS);  

The packet length is 20 bytes. What i found was that the time it took to send and receive that message was very unreliable. I did the test a 100 times and found these results:

> Average time = 35,86364746 ms 
> longest time = 86,36474609 ms 
> shortest time =1,525878906 ms

I was wondering how this can take so long sometimes?

Thanks in advance.

Parents
  • How are you measuring? Do you measure from the sd_ble_gattc_write(..) command is sent to the TX complete event is received or to the packet is received on the other side?

    You will naturally have variable latency in BLE because of the connection interval. If you manage to update the SoftDevice buffer right before the connection event, you will have the lowest latency, if you do it right after, you will have the highest latency (lowest + connection interval).

    You should check that the connection interval is actually set to 7.5 ms, from your measurements it looks like it may be closer to 85 ms.

    The application can also delay the measurements depending on interrupt levels and where you start/stop the measurements or where you call sd_ble_gattc_write(..).

Reply
  • How are you measuring? Do you measure from the sd_ble_gattc_write(..) command is sent to the TX complete event is received or to the packet is received on the other side?

    You will naturally have variable latency in BLE because of the connection interval. If you manage to update the SoftDevice buffer right before the connection event, you will have the lowest latency, if you do it right after, you will have the highest latency (lowest + connection interval).

    You should check that the connection interval is actually set to 7.5 ms, from your measurements it looks like it may be closer to 85 ms.

    The application can also delay the measurements depending on interrupt levels and where you start/stop the measurements or where you call sd_ble_gattc_write(..).

Children
No Data
Related