Beware that this post is related to an SDK in maintenance mode
More Info: Consider nRF Connect SDK for new designs

Repeated connection interval updates on iOS 26

We have noticed an issue with our device built on nRF5 SDK + nRF52832 when connected to iOS 26.

Initially after connection, everything is ok. Then we attempt a connection parameters update. After this update, seemingly regardless of the parameters, iOS 26 gets stuck in a loop switching between 7.5ms and 15ms intervals. I have monitored the connection with PacketSniffer, and can't see any further requests after our initial request. I've attached the packet log. I've tried connection interval ranges of 7.5-15ms, 11.25-15ms and 15-15ms, all have the same effect. Also when the connection interval is later changed to 50-75ms, the updates continue.

This seems like an iOS bug and I will report it to Apple, but I wondered if Nordic might have any insight?

Packet log attached.

packetlog.pklg

Parents
  • Does your device expose HID service?

    Those get different connection intervals on iOS, and may cause the central to switch to low latency connection parameters. I believe this is documented by apple somewhere.

  • Yes it does. Apple's guidelines from developer.apple.com/.../Accessory-Design-Guidelines.pdf

    General connection parameter request guidelines:
    ● Peripheral Latency ≤ 30 connection intervals.
    ● Supervision Timeout from 6 seconds to 18 seconds.
    ● Interval Min ≥ 15 ms.
    ● Interval Min ≤ 2 seconds.
    ● Interval Min is a multiple of 15 ms.
    ● One of the following:
    ● Interval Max at least 15 ms greater than Interval Min.
    ● Interval Max and Interval Min are both 15 ms.
    ● Interval Max * (Peripheral Latency + 1) of 6 seconds or less.
    ● Supervision Timeout greater than Interval Max * (Peripheral Latency + 1) * 3.
    If Bluetooth Low Energy HID is one of the connected services of an accessory, a connection interval
    down to 11.25 ms may be accepted by some devices.
    Note:
    When Interval Max and Interval Min are both 15 ms, some devices (such as Apple Watch) will
    offer a 30 ms interval to better balance power and performance constraints.

    As mentioned, I tried using a variety of intervals, all have the same issue. I've checked all calls to sd_ble_gap_conn_param_update, we aren't calling it repeatedly, and also the packet trace shows all updates are coming from iOS side. This doesn't happen in previous iOS versions

Reply
  • Yes it does. Apple's guidelines from developer.apple.com/.../Accessory-Design-Guidelines.pdf

    General connection parameter request guidelines:
    ● Peripheral Latency ≤ 30 connection intervals.
    ● Supervision Timeout from 6 seconds to 18 seconds.
    ● Interval Min ≥ 15 ms.
    ● Interval Min ≤ 2 seconds.
    ● Interval Min is a multiple of 15 ms.
    ● One of the following:
    ● Interval Max at least 15 ms greater than Interval Min.
    ● Interval Max and Interval Min are both 15 ms.
    ● Interval Max * (Peripheral Latency + 1) of 6 seconds or less.
    ● Supervision Timeout greater than Interval Max * (Peripheral Latency + 1) * 3.
    If Bluetooth Low Energy HID is one of the connected services of an accessory, a connection interval
    down to 11.25 ms may be accepted by some devices.
    Note:
    When Interval Max and Interval Min are both 15 ms, some devices (such as Apple Watch) will
    offer a 30 ms interval to better balance power and performance constraints.

    As mentioned, I tried using a variety of intervals, all have the same issue. I've checked all calls to sd_ble_gap_conn_param_update, we aren't calling it repeatedly, and also the packet trace shows all updates are coming from iOS side. This doesn't happen in previous iOS versions

Children
Related