Hello,
-
Goal: We are developing a long-range BLE application using S8 Coded PHY (125 kbps) to operate reliably at extended ranges (RSSI below −80 dBm).
-
Devices:
-
Central: nRF52840 running on Zephyr/nRF Connect SDK v2.5.2.
-
Peripheral: nRF52833 (Address: F8:F2:B5:33:4C:06).
-
-
Crucial Context: S8 Coded PHY is used for the connection which can be seen from the sniffer's advertisement packets below
Frame 211: 75 bytes on wire (600 bits), 75 bytes captured (600 bits) on interface /dev/ttyACM0-4.4, id 0 Section number: 1 Interface id: 0 (/dev/ttyACM0-4.4) Interface name: /dev/ttyACM0-4.4 Interface description: nRF Sniffer for Bluetooth LE Encapsulation type: nRF Sniffer for Bluetooth LE (186) Arrival Time: Dec 3, 2025 11:12:02.163584000 CET UTC Arrival Time: Dec 3, 2025 10:12:02.163584000 UTC Epoch Arrival Time: 1764756722.163584000 [Time shift for this packet: 0.000000000 seconds] [Time delta from previous captured frame: 0.001498000 seconds] [Time delta from previous displayed frame: 0.001498000 seconds] [Time since reference or first frame: 7.355650000 seconds] Frame Number: 211 Frame Length: 75 bytes (600 bits) Capture Length: 75 bytes (600 bits) [Frame is marked: False] [Frame is ignored: False] [Protocols in frame: nordic_ble:btle:btcommon] nRF Sniffer for Bluetooth LE Board: 0 Header Version: 3, Packet counter: 225 Length of payload: 68 Protocol version: 3 Packet counter: 225 Packet ID: 2 Length of packet: 10 Flags: 0x21 .... ...1 = CRC: Ok .... .00. = Aux Type: AUX_ADV_IND (0) .... 0... = Address Resolved: No .010 .... = PHY: LE Coded (2) 0... .... = Reserved: 0 Channel Index: 21 RSSI: -81 dBm Event counter: 0 Timestamp: 2814614713µs [Packet time (start to end): 3792µs] [Delta time (end to start): 330µs] [Delta time (start to start): 1498µs] Bluetooth Low Energy Link Layer Access Address: 0x8e89bed6 .... ..00 = Coding Indicator: FEC Block 2 coded using S=8 (0) Packet Header: 0x3047 (PDU Type: AUX_ADV_IND, TxAdd: Random) .... 0111 = PDU Type: 0x7 AUX_ADV_IND ...0 .... = Reserved: 0 ..0. .... = Reserved: 0 .1.. .... = Tx Address: Random 0... .... = Reserved: 0 Length: 48 Extended Advertising Header ..00 1001 = Extended Header Length: 9 01.. .... = Advertising Mode: Connectable Non-scannable (0x1) Extended Header Flags: 0x09 .... ...1 = Advertiser Address: Present .... ..0. = Target Address: Not Present .... .0.. = CTE Info: Not Present .... 1... = Advertiser Data Info: Present ...0 .... = Aux pointer: Not Present ..0. .... = Sync Info: Not Present .0.. .... = TX Power: Not Present 0... .... = Reserved: Not Present Advertising Address: f8:f2:b5:33:4c:06 (f8:f2:b5:33:4c:06) Advertiser Data Info: 0x1ce2 .... 1100 1110 0010 = Advertiser Data Identifier: 0xce2 0001 .... .... .... = Advertiser Set Identifier: 0x1 Advertising Data Flags Length: 2 Type: Flags (0x01) 000. .... = Reserved: 0x0 ...0 .... = Simultaneous LE and BR/EDR to Same Device Capable (Host): false (0x0) .... 0... = Simultaneous LE and BR/EDR to Same Device Capable (Controller): false (0x0) .... .1.. = BR/EDR Not Supported: true (0x1) .... ..0. = LE General Discoverable Mode: false (0x0) .... ...0 = LE Limited Discoverable Mode: false (0x0) 128-bit Service Class UUIDs Length: 17 Type: 128-bit Service Class UUIDs (0x07) Custom UUID: 38401002-df44-1c14-44c1-d94b0ebbec73 (Unknown) Device Name: Peripheral Key Length: 16 Type: Device Name (0x09) Device Name: Peripheral Key CRC: 0x4c71ef -
Test Environment: Indoors and Outdoor in a open field
- Issue: The Link Layer (LL) handshake either failed completely or was terminated immediately by the Peripheral before the Central's Host stack could signal success and the 3 seconds connection timeout is quite evident.
[ 623.252899] <dbg> Central: start_scan: Scanning successfully started [ 625.945556] <wrn> Central: PriPHY: 4, SecPHY: 4, RSSI: -81 [ 625.945983] <dbg> Central: connect: Connecting to: F8:F2:B5:33:4C:06 (random), coded_phy: 1 [ 625.946014] <wrn> Central: Coded: 1 [ 628.946563] <dbg> Central: disconnected: Disconnected (reason 0x02) [ 823.252899] <dbg> Central: start_scan: Scanning successfully started [ 825.945556] <wrn> Central: PriPHY: 4, SecPHY: 4, RSSI: -95 [ 825.945983] <dbg> Central: connect: Connecting to: F8:F2:B5:33:4C:06 (random), coded_phy: 1 [ 825.946014] <wrn> Central: Coded: 1 [ 828.946563] <dbg> Central: disconnected: Disconnected (reason 0x22)
- Correlation: This failure mode strongly correlates with a marginal RSSI (≈−81 dBm or worse). The connection is stable at shorter ranges.
- Error Code: BT_HCI_ERR_UNKNOWN_CONN_ID and BT_HCI_ERR_LL_RESP_TIMEOUT
Since S8 is confirmed, what are the most common Link Layer parameters (besides PHY) that, if misconfigured, cause an immediate 0x02 rejection at marginal RSSI? Are there recommended minimum Connection Interval values for S8 Coded PHY operation below −80 dBm?
Kindly let me know if you need more details.
Any guidance on identifying the specific root cause for the 0x02 Link Layer rejections or suggestions for optimizing our S8 Coded PHY connection parameters would be highly valued.
Cheers,
Aditya