Hi,
During our development, we observed that when BLE central and peripheral devices are communicating, then often central device will not receive data from peripheral device at the specified connection interval but receive new data and old data in the next connection interval.
for example, if connection interval is 12.5ms and peripheral device need to send data (assume an incrementing number for simplicity) to central device then central device receives data at following times:
t = 0 ms, received data = 1
t = 12.5 ms, received data = 2
t = 25 ms, no data received
t = 37.5 ms, received data = 3
t = 37.5 ms, received data = 4
t = 50 ms, received data = 5
So when peripheral and central device failed to exchange data at t = 25 ms, then in next connection interval, peripheral soft device not only transmitted new data but also transmitted data queued for transmission in the previous connection interval. Which means soft device must be keeping data in some queue and as long as there is enough guard interval in between connection intervals, it will transmit all queued data. This is happening with 1Mbps PHY.
But when we switched to coded PHY for improved sensitivity, then we are observing difference in this behavior. Upon missing data transmission in a connection interval, peripheral soft device no longer re-transmits the queued data.
t = 0 ms, received data = 1
t = 12.5 ms, received data = 2
t = 25 ms, no data received
t = 37.5 ms, received data = 4
t = 50 ms, received data = 5
This is leading to loss of data which is not acceptable in our application.
So I would like to know that is this a known/expected behavior of soft device when using coded PHY? or am I missing some configuration in coded PHY mode?
My application is using "s140_nrf52_6.1.1_softdevice.hex" and to update PHY after central and peripheral devices have connected, central device uses sd_ble_gap_phy_update() API.
regards
Ankur