BLE device disconnect after 90s on iOS 16 beta

Hi,  Since the three last iOS 16 Beta (8, 7 & 6), I'm having some issues with the connection stability with our custom device that is using the nRF52832 Nordic chip. On iOS 15 all is good but as soon as you update any Apple devices (iPad and iPhone) to iOS 16, the issue remains: 

  • the connection last 90s and then disconnect. 

If using our custom App, the device is automatically reconnected. But if you use nRF Connect, the connection is lost. I'm in contact with Nordic but it really seems to be related to a change into iOS 16 with BLE devices... Anybody is having the same problem? There is no mention on the change logs about BLE...

The issue is also on iPadOS (16.1 included) On Apple M1 chips, there is no bugs, neither on Androïd.

Thanks for your help.

  • I'm seeing the same thing in the released version of iOS16. In Segger Studio debug console the event is : app_ble: BLE_GAP_EVT_DISCONNECTED event received. It then reconnects right away with : app_ble: BLE_GAP_EVT_CONNECTED event received. It runs for a couple minutes, and then disconnects and reconnects. I'm running on our BT Sensor using an nRF52833 with the latest Nordic SDK nRF5 SDK 17.0 I've tried turning off and on BT, restarting the iPhone, this seems to help, but it still occurs.

Add a Comment

Accepted Reply

So another post on this iOS16 issue. It appears Apple changed the Bluetooth Development guidelines so Minimum and Maximum connection intervals are now Min 15 ms, and Max 30 ms. This is defined in Nordic SDK in app_ble.c you need to change your parameters to this now: /* Minimum acceptable connection interval (20ms). Force the connection interval to be 15ms to maximize throughput. iOS devices will not handle a faster interval. Refer to the Apple Bluetooth development guidelines for further details. / #define MIN_CONN_INTERVAL MSEC_TO_UNITS(15U, UNIT_1_25_MS) / Maximum acceptable connection interval (30ms). */ #define MAX_CONN_INTERVAL MSEC_TO_UNITS(30U, UNIT_1_25_MS)

  • Thank you very much! It is working now by changing those parameters.

  • I had the same problem with our device. Thank you very much, I solved the problem and now the device remains connected. But now I have another problem. When my app is not in the background it makes extensive use of BLE, because in some cases the device acquires and transmits streaming signals to display them in real-time graphs. Now these features are not working correctly, possibly due to packet loss. Maybe I can fix the problem by reducing the stream, but it's not the best solution for us.

  • I had the same problem with our device. Thank you very much, I solved the problem and now the device remains connected. But now I have another problem. When my app is not in the background it makes extensive use of BLE, because in some cases the device acquires and transmits streaming signals to display them in real-time graphs. Now these features are not working correctly, possibly due to packet loss. Maybe I can fix the problem by reducing the stream, but it's not the best solution for us.

Replies

Update: We have discovered that after an iOS update, the bug is not happening during the first connection of the device... But happen as soon as you reconnect it.

  • Update 2: I don't know if it's related, but when we connect for the first time ever the device to iOS, the bug is not happening. It happens always from the 2nd time.

  • We are also experiencing a bluetooth issue that occurs only on the first connection after we restart the iphone. And it doesn't matter how long it's been since restart. But for us it's related to the throughput of the peripheral(_:didUpdateValueFor:error:) method

Add a Comment

Hi - I’m not an iOS developer so I won’t be of much help but two things may help you:

  1. I am experiencing issues with my BLE car key app beginning with Public Beta about 3-4 weeks ago. It’s still happening in the now released ios 16 version, so I do feel like something was changed.
  2. My issues go away for 24-48 hours after restarting my phone. This may or may not help you at least while testing.
Add a Comment

I had the connection last 30s and then disconnect. But CABTMIDICentralViewController didn't.

So another post on this iOS16 issue. It appears Apple changed the Bluetooth Development guidelines so Minimum and Maximum connection intervals are now Min 15 ms, and Max 30 ms. This is defined in Nordic SDK in app_ble.c you need to change your parameters to this now: /* Minimum acceptable connection interval (20ms). Force the connection interval to be 15ms to maximize throughput. iOS devices will not handle a faster interval. Refer to the Apple Bluetooth development guidelines for further details. / #define MIN_CONN_INTERVAL MSEC_TO_UNITS(15U, UNIT_1_25_MS) / Maximum acceptable connection interval (30ms). */ #define MAX_CONN_INTERVAL MSEC_TO_UNITS(30U, UNIT_1_25_MS)

  • Thank you very much! It is working now by changing those parameters.

  • I had the same problem with our device. Thank you very much, I solved the problem and now the device remains connected. But now I have another problem. When my app is not in the background it makes extensive use of BLE, because in some cases the device acquires and transmits streaming signals to display them in real-time graphs. Now these features are not working correctly, possibly due to packet loss. Maybe I can fix the problem by reducing the stream, but it's not the best solution for us.

  • I had the same problem with our device. Thank you very much, I solved the problem and now the device remains connected. But now I have another problem. When my app is not in the background it makes extensive use of BLE, because in some cases the device acquires and transmits streaming signals to display them in real-time graphs. Now these features are not working correctly, possibly due to packet loss. Maybe I can fix the problem by reducing the stream, but it's not the best solution for us.