Connection parameter negotiation with iOS extremely slow


to save power, our product negotiates a slow connection interval of around 1s (usually ended up being 960ms) when going into deep sleep. 

when waking up the device from the app, the device would then renegotiate the connection parameters to get back to a fast connection. Oddly, this took forever! Until the app became useable again, in the worst case 1 minute and 30s would pass. 

Most of that was our fault, since we subscribed to lots of characteristics and read them, more or less at the same time as starting the negotiation. so most of the bluetooth events were queued and still happened with the extremely slow connection interval of 960ms. So we made sure this won't happen anymore.

However, even with nothing else happening via BLE, the negotiation from 960ms down to the normal 30ms still takes almost 20 seconds, with an iOS device!

Can I get some feedback from you if this is expected/normal, or if there's something we can optimise. We've already reduced the deep sleep interval to 660ms which improves it greatly, but are still left wondering why it's so slow. 

I've attached a screenshot of a capture session using the nrf52 dk as a sniffer.

From the device requesting the connection parameter update until the Master sends the LL_CONNECTION_UPDATE_REQ, it takes 8 intervals (9 including the response immediately following the connection parameter update request)

and from the LL_CONNECTION_UPDATE_REQ util the connection interval actually changes, it takes another 10 intervals!

let me know if you'd like to see the details of any of those packets.

Thanks already!

Parents Reply Children