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
  • when i start sending i set a gpio pin high, this is measured on a other nrf52DK and i take a RTC timestamp wich is 30US per tick. When I receive the message on my other device, i am polling with:

    sizeOfCurrentEvent = sizeOfEvent;
    err = sd_ble_evt_get((u8*)currentEventBuffer, &sizeOfCurrentEvent);
    

    if err == NRF_SUCCES then I check if it my messeage, if so I set another GPIO pin high. my 3rd NRF52Dk will take a second time stamp, timestamp2-timestamp1 = result/32768*1000 = result in ms

Reply
  • when i start sending i set a gpio pin high, this is measured on a other nrf52DK and i take a RTC timestamp wich is 30US per tick. When I receive the message on my other device, i am polling with:

    sizeOfCurrentEvent = sizeOfEvent;
    err = sd_ble_evt_get((u8*)currentEventBuffer, &sizeOfCurrentEvent);
    

    if err == NRF_SUCCES then I check if it my messeage, if so I set another GPIO pin high. my 3rd NRF52Dk will take a second time stamp, timestamp2-timestamp1 = result/32768*1000 = result in ms

Children
No Data
Related