Environment
- SoC / board: nRF54L15 on Ezurio BL54L15U DVK (board target bl54l15u_dvk/nrf54l15/cpuapp)
- nRF Connect SDK: v3.3.1
- SoftDevice Controller build: v252.31313
- Samples: nrf/samples/bluetooth/channel_sounding/ras_initiator (central) and ras_reflector (peripheral), lightly modified for 2 antennas.
Summary
With an asymmetric Channel Sounding antenna configuration A2_B1 (initiator = 2 antennas, reflector = 1 antenna, N_AP = 2 paths), the reflector's SoftDevice Controller periodically hits an internal assertion and the device hard-faults / reboots:
SoftDevice Controller ASSERT: 131, 1143
***** HARD FAULT *****
>>> ZEPHYR FATAL ERROR 3: Kernel oops on CPU 0
Fault during interrupt handling
addr2line on the faulting PC resolves to sdc_assertion_handler() (nrf/subsys/bluetooth/controller/hci_driver.c:357), i.e. the SDC's own assertion callback, so the assert originates inside the SDC.
After the reflector reboots it stops responding on the ACL; ~10 s later the initiator hits the LE supervision timeout and disconnects with reason 0x08. Time-to-crash has high run-to-run variance (~50 s typical; adding deferred RRSP debug logging on the reflector stretches it to ~4 min but does not prevent it).
The symmetric configuration A2_B2 (2:2, N_AP = 4), with everything else identical, runs indefinitely (5 min, 0 crashes, 0 disconnects in our tests).
What we ruled out (by measurement)
- Timing: the controller-negotiated schedule reported by procedure_enable_complete is byte-identical for A2_B1 and A2_B2 (subevent_len 18000 us, subevents_per_event 1, event_interval 2, procedure_interval 12, max_procedure_len 528).
- ACL/RAS throughput: the reflector logged 633 successful "All segments sent" and 0 send failures right up to the crash instant.
Procedure parameters used by the initiator (bt_le_cs_set_procedure_parameters)
- max_subevent_len = min_subevent_len = 18000
- procedure_interval = 12, max_procedure_len = 528
- phy = 2M, tone_antenna_config_selection = A2_B1
- preferred_peer_antenna = ANTENNA_1 (single bit; peer reflector has 1 antenna)
Reflector declares CTLR_SDC_CS_NUM_ANTENNAS=1 and does not set its own procedure parameters (initiator is sole source of truth).
Note on configuration: the reflector path settings match the documented ras_reflector/android_ranging.conf fragment for the "initiator has 2 antennas" case (BT_RAS_MAX_ANTENNA_PATHS=2, BT_CTLR_SDC_CS_MAX_ANTENNA_PATHS=2, NUM_ANTENNAS left at default 1).
UPDATE - reproduced on latest main: we rebuilt the same A2_B1 setup on NCS main (VERSION 3.3.99, nrfxlib/SDC @ dd8a2e1, Zephyr SDK 1.0.1) and the SAME assert reproduces: 14x "SoftDevice Controller ASSERT: 131, 1143" -> reflector reboot -> initiator reason 0x08, over a 6-minute run. So the defect is NOT fixed on the current development branch.
Questions
1. Is A2_B1 (asymmetric 2:1) expected to be supported on nRF54L15 with SDC v252.31313? (The SDK's ras_reflector/android_ranging.conf documents the "initiator has 2 antennas" case.)
2. What do SDC assert id 131 / line 1143 correspond to, and is there a known fix / newer SDC build?
We can provide full dual-console logs, the merged timeline, and the exact build config on request.