Hi.
Our project is based on the simple_peripheral project from SDK 4.20.00.35.
We are using connection parameters with a connection interval of 100-150ms and a slave latency of 10, because we want the peripheral to easily switch between mostly sleeping and transmitting decent amounts of data. In idle phases (the peripheral is sending no data) we observe that the peripheral will mostly exploit the full slave latency and connection events occur every 1-1.5s. However sometimes we see multiple connection events close together. We were able to determine that these multiple events coincide with the central sending a LL_CHANNEL_MAP_IND PDU. The peripheral then also wakes for the next connection event sending an empty PDU. We have observed some centrals sending LL_CHANNEL_MAP_IND PDUs every 10s, leading to ~10% more power consumption than expected in this situation due to the additional connection events.
In the context of these observations it would be nice if you could answer the following questions:
- Is there any particular reason for the additional connection events? As far as I can tell, the SIG does not seem to specify a response to a LL_CHANNEL_MAP_IND PDU. Or does the BLE5 Stack use the connection event to prepare the new channel map? Could this be optimized to happen before the next "necessary" connection event instead?
- Are there any hard criteria for when the BLE5 Stack will seize a connection event and when it will skip it? E.g. PDU queue not empty.
We have also looked at switching between fast and slow connection parameters for guaranteed intervals instead of using the slave latency. However there can be long (multiple seconds) delays during negotiation of new parameters which make the experience suboptimal in contrast to simply using slave latency.
Sincerely,
Alexander Wenner