Skip to content

XIAO nRF54LM20A: BLE advertising reports success but is never detected by a real scanner #65

Description

@lboue

Summary

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/zephyr main (this board isn't in any tagged Zephyr release or in nrfconnect/sdk-zephyr yet)
  • Flashed via 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_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:

west build -b xiao_nrf54lm20a/nrf54lm20a/cpuapp tests/bluetooth/shell -- \
  -DCONFIG_BT_CTLR_DTM_HCI=y \
  -DCONFIG_CLOCK_CONTROL_NRF_HFINT_CALIBRATION=y \
  -DCONFIG_BT_CTLR_ASSERT_OPTIMIZE_FOR_SIZE=n

Shell session:

uart:~$ bt id-show
*0: DF:04:FB:9B:C9:2F (random)
uart:~$ bt advertise on
Advertising started
uart:~$ bt test_tx 0 ff 0 1
test_tx...
uart:~$ bt test_end
num_rx= 0.

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_BT_LL_SW_SPLIT=y, CONFIG_BT_LLL_VENDOR_NORDIC=y -- correct open-source Nordic LL controller selected
  • 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:

  1. 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).
  2. 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.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

Status
No status

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions