nRF52832 + S132 v7.3.0 immediate disconnect reason 0x22 on iPad Pro 12.9 5th gen with iPadOS 26.3 (works fine on Android and iOS 17.7.10 / iPad Pro 10.5)
Content:
Hello Nordic support team and community,
I'm facing a persistent BLE disconnect issue with my nRF52832 peripheral when connecting to an iPad Pro 12.9-inch (5th generation) running iPadOS 26.3 (build 23D127). The connection is established (BLE_GAP_EVT_CONNECTED), but the iPad immediately terminates it with disconnect reason 0x22 (BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION) — usually within 1 second. This creates a reconnect-disconnect loop.
Importantly, the same firmware works perfectly on:
- Android devices (tested with nRF Connect app)
- Older iPad Pro 10.5-inch running iOS 17.7.10
This strongly suggests the problem is specific to iPadOS 26.3 (or the combination of iPad Pro 5th gen hardware + iPadOS 26.3).
The issue also occurs with the unmodified ble_app_uart example from nRF5 SDK 17.0.2, so it's not caused by my custom code.
Setup Details
- Hardware: nRF52832 (custom board, similar layout to pca10040; 32 MHz crystal and antenna matching verified)
- SDK: nRF5 SDK 17.0.2_d674dde
- SoftDevice: S132 v7.3.0 (upgraded from v7.2.0 via nrfjprog)
- Compiler: Keil v5.06 (ARMCC)
- Problematic central: iPad Pro 12.9-inch (5th gen, M1), iPadOS 26.3 build 23D127
- Working centrals: Android phones (nRF Connect), iPad Pro 10.5-inch (iOS 17.7.10)
- Test apps: nRF Connect for iOS/iPadOS (latest), LightBlue — same failure on iPadOS 26.3
- Connection parameters: min 7.5 ms, max 30 ms, slave_latency 0, supervision timeout 4 s
- GATT MTU: 158 (iOS 18+ compatible)
- Advertising: connectable + scannable + undirected, UUID in scan response, LE-only general discoverable
Observed Behavior
- Advertising is discovered and connection is accepted
- UART debug log: A1 00 00 (connected, conn_handle=0x0000) → C3 00 (sd_ble_gatts_sys_attr_set success) → A2 22 (disconnected by central with reason 0x22)
- No security events (BLE_GAP_EVT_CONN_SEC_UPDATE / 0xC1 byte never appears)
- iPad bluetoothd console: encryptionStatusChangedCb status=4803, TS_LE_EncryptionCompleteCb error 4803, "Encryption is now disabled", then disconnect
- Loop: disconnect → re-advertise → reconnect → repeat
Custom UART Debug Codes (my own implementation)
I use simple UART byte codes for event logging (no full logger). Meanings:
- A1 = BLE_GAP_EVT_CONNECTED
C
case BLE_GAP_EVT_CONNECTED: m_conn_handle = p_ble_evt->evt.gap_evt.conn_handle; uart_debug_tx_byte(0xA1); uart_debug_tx_byte((uint8_t)(m_conn_handle & 0xFF)); uart_debug_tx_byte((uint8_t)((m_conn_handle >> 8) & 0xFF)); // sys_attr_set call follows break; - A2 = BLE_GAP_EVT_DISCONNECTED
C
case BLE_GAP_EVT_DISCONNECTED: uart_debug_tx_byte(0xA2); uart_debug_tx_byte(p_ble_evt->evt.gap_evt.params.disconnected.reason); // 0x22 here m_conn_handle = BLE_CONN_HANDLE_INVALID; (void)advertising_start(); break; - C3 00 = sd_ble_gatts_sys_attr_set() called and returned NRF_SUCCESS
C
ret_code_t err = sd_ble_gatts_sys_attr_set(m_conn_handle, NULL, 0, BLE_GATTS_SYS_ATTR_FLAG_SYS_SRVCS | BLE_GATTS_SYS_ATTR_FLAG_USR_SRVCS); uart_debug_tx_byte(0xC3); uart_debug_tx_byte((uint8_t)err);
What I've Already Tried (no effect)
- Upgraded SoftDevice from v7.2.0 → v7.3.0
- iPad network settings reset, device forget, Bluetooth toggle, Airplane Mode cycle
- Loosened connection parameters (min 20 ms, max 75 ms)
- GATT MTU 158, CAR exclude enabled
- Bonding fully disabled (no authenticate call, io_caps=NONE, sec_params.bond=0)
- Immediate sys_attr_set in CONNECTED event
- Advertising flags adjusted, UUID in scan response
- sdk_config.h additions: BLE_GAP_SLAVE_LATENCY_WAIT_FOR_ACK=1, NRF_SDH_BLE_GATT_MAX_MTU_SIZE=247
- Switched to Nordic NUS UUID (same issue)
- Stock ble_app_uart example (unmodified) — same disconnect behavior
Questions
- Is this a known compatibility issue between S132 v7.3.0 and iPadOS 26.3 (especially on iPad Pro 5th gen)?
- Any recommended sdk_config.h settings, event handler changes, or patches for iOS/iPadOS 26+?
- Could this be related to hardware (crystal drift, power noise, antenna)? How to rule it out?
- Any other iPadOS 26.x users seeing similar BLE peripheral disconnect loops?
Thank you very much for any guidance — I've been stuck on this for a long time.
Best regards, Jeongjin (Gangwon-do, South Korea – using nRF5 SDK 17.0.2)