Getting continuous disconnects with iOS 16

Our product has been in production for over two years now and works fine. However I am seeing continuous disconnects with iOS 16 and customers are reporting the same thing. Advertising and connection appear normal, then the nRF appears to drop the connection after 2-3 seconds. 

Before I start debugging this I wanted to ask if anyone was aware of the problem. My guess it Apple changed something in the connection parameters and the nRF device does not like it.

Parents
  • In our firmware we configure the connection interval (min and max) to 15ms. This was accepted by iOS15 however iOS 16 is sending 24ms (sometimes but not always) which is rejected by Softdevice after 3 retries. This triggers the event BLE_CONN_PARAMS_EVT_FAILED which triggers a disconnect in our app. 

  • Hi. 

    Have you made sure that all the connection parameters match the requirements from the Apple accessory design guidelines?

    https://developer.apple.com/accessories/Accessory-Design-Guidelines.pdf 

    Br, 
    Joakim

  • They don't. We are requesting connection interval with min=15ms and max=15ms which was always accepted by iOS until iOS 16. However, in section 41.6 of Apple's accessory design guidelines there is a note that says some devices may "scale up to 30ms" and this is what we are seeing now in iOS 16 for the first time. To be compliant we changed max=30ms and now all is well. 

    But this is only half of the reason why our system went into a loop connecting/disconnecting. Our project was based on one of the blePeripheral example projects. When the BLE central sends us connection parameters this triggers a call to on_conn_params_evt() with the event BLE_CONN_PARAMS_EVT_FAILED. The example project handles this by forcing a disconnect. 

    It is the responsibility of the application designer (myself) to know how the application will behave in cases like this one. However I did not know what this event means or what would trigger it. After using this example project for 3+ years now I'm still not sure where I would learn about critical events such as this one. 

Reply
  • They don't. We are requesting connection interval with min=15ms and max=15ms which was always accepted by iOS until iOS 16. However, in section 41.6 of Apple's accessory design guidelines there is a note that says some devices may "scale up to 30ms" and this is what we are seeing now in iOS 16 for the first time. To be compliant we changed max=30ms and now all is well. 

    But this is only half of the reason why our system went into a loop connecting/disconnecting. Our project was based on one of the blePeripheral example projects. When the BLE central sends us connection parameters this triggers a call to on_conn_params_evt() with the event BLE_CONN_PARAMS_EVT_FAILED. The example project handles this by forcing a disconnect. 

    It is the responsibility of the application designer (myself) to know how the application will behave in cases like this one. However I did not know what this event means or what would trigger it. After using this example project for 3+ years now I'm still not sure where I would learn about critical events such as this one. 

Children
Related