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:

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)

Parents Reply Children
No Data
Related