You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
BLE advertising reports success at every software layer (host stack bt_enable(), bt_le_adv_start(), and the Zephyr shell's bt advertise on), but the device is never actually detected by a real BLE scanner, even at close range and with a scanner independently confirmed to be working (it finds ~27 other nearby BLE devices in the same scan).
Hardware / setup
Board: Seeed XIAO nRF54LM20A
Built against upstream zephyrproject-rtos/zephyrmain (this board isn't in any tagged Zephyr release or in nrfconnect/sdk-zephyr yet)
1. ESPHome's zephyr_ble_server component (a thin wrapper around bt_enable() + bt_le_adv_start()):
[I][zephyr_ble_server:050]: Advertising successfully started
[C][zephyr_ble_server:291]: ble server:
connected: NO
name: xiao-nrf54lm20a-test
appearance: 0
ready: YES
2. Zephyr's own tests/bluetooth/shell sample, built directly (bypassing ESPHome entirely) with:
No crash, no ASSERTION FAIL (ruling out the historical GRTC/DTM timing bug fixed by zephyrproject-rtos/zephyr#100819 for bt test_tx specifically).
Scan side: a USB BLE dongle (hci0, confirmed working -- bluetoothctl scan on found ~27 real nearby devices including named ones) never shows the board's own address (DF:04:FB:9B:C9:2F) or name (xiao-nrf54lm20a-test / the shell's default test shell), across multiple 12-15s scans, with advertising confirmed still running (bt advertise on a second time returns err -120 = EALREADY, i.e. it never stopped).
Also tried with the board placed ~5 cm from the dongle (point-blank range) -- still zero detection, re-confirming advertising was still active at the time. This close-range result is why hardware defect is starting to look more likely than a driver/scheduling bug: even a badly mismatched antenna would typically still leak some signal detectable at 5 cm.
What's been ruled out
Checked the generated .config for the DTM shell build -- nothing looks misconfigured:
CONFIG_BT_CTLR_TX_PWR_0=y, CONFIG_BT_CTLR_TX_PWR_DBM=0 -- normal, not attenuated
CONFIG_DT_HAS_NORDIC_NRF54L_HFXO_ENABLED=y -- matches the board's own devicetree (&hfxo { status = "okay"; ... })
No clock/radio warnings or errors anywhere in the boot log
Open question
Two possibilities I can't distinguish between without a spectrum analyzer or a second BLE-capable device:
A radio-scheduling bug specific to real advertising (distinct from bt test_tx's DTM path, which completes without crashing but can't be independently confirmed to radiate either -- DTM bursts aren't valid advertising PDUs so a scanner wouldn't show them regardless).
A hardware defect on this specific unit (e.g. an antenna/RF-trace issue) -- everything that doesn't touch the RF front-end (IMU over I2C, GPIO/LED, USB serial console, the DTM command executing without error) works fine, which is exactly what you'd expect if the antenna path itself were the problem rather than the software stack.
Posting here first since this is the board support repo and others with a second unit (or a spectrum analyzer) may be able to tell quickly which of the two it is. Happy to provide more logs/builds on request.
Summary
BLE advertising reports success at every software layer (host stack
bt_enable(),bt_le_adv_start(), and the Zephyr shell'sbt advertise on), but the device is never actually detected by a real BLE scanner, even at close range and with a scanner independently confirmed to be working (it finds ~27 other nearby BLE devices in the same scan).Hardware / setup
zephyrproject-rtos/zephyrmain(this board isn't in any tagged Zephyr release or innrfconnect/sdk-zephyryet)west flash(OpenOCD/CMSIS-DAP), with the RRAM write-buffer fix from boards: xiao_nrf54lm20a: commit RRAM write-buffer after flash load #59 applied locally (otherwise flashing itself is unreliable -- see that issue)Reproduction
Two independent apps show the same symptom:
1. ESPHome's
zephyr_ble_servercomponent (a thin wrapper aroundbt_enable()+bt_le_adv_start()):2. Zephyr's own
tests/bluetooth/shellsample, built directly (bypassing ESPHome entirely) with:Shell session:
No crash, no
ASSERTION FAIL(ruling out the historical GRTC/DTM timing bug fixed by zephyrproject-rtos/zephyr#100819 forbt test_txspecifically).Scan side: a USB BLE dongle (
hci0, confirmed working --bluetoothctl scan onfound ~27 real nearby devices including named ones) never shows the board's own address (DF:04:FB:9B:C9:2F) or name (xiao-nrf54lm20a-test/ the shell's defaulttest shell), across multiple 12-15s scans, with advertising confirmed still running (bt advertise ona second time returnserr -120=EALREADY, i.e. it never stopped).Also tried with the board placed ~5 cm from the dongle (point-blank range) -- still zero detection, re-confirming advertising was still active at the time. This close-range result is why hardware defect is starting to look more likely than a driver/scheduling bug: even a badly mismatched antenna would typically still leak some signal detectable at 5 cm.
What's been ruled out
Checked the generated
.configfor the DTM shell build -- nothing looks misconfigured:CONFIG_BT_CTLR_TX_PWR_0=y,CONFIG_BT_CTLR_TX_PWR_DBM=0-- normal, not attenuatedCONFIG_BT_LL_SW_SPLIT=y,CONFIG_BT_LLL_VENDOR_NORDIC=y-- correct open-source Nordic LL controller selectedCONFIG_DT_HAS_NORDIC_NRF54L_HFXO_ENABLED=y-- matches the board's own devicetree (&hfxo { status = "okay"; ... })Open question
Two possibilities I can't distinguish between without a spectrum analyzer or a second BLE-capable device:
bt test_tx's DTM path, which completes without crashing but can't be independently confirmed to radiate either -- DTM bursts aren't valid advertising PDUs so a scanner wouldn't show them regardless).Posting here first since this is the board support repo and others with a second unit (or a spectrum analyzer) may be able to tell quickly which of the two it is. Happy to provide more logs/builds on request.