XIAO nrf54l15 with a Coin Battery

Hi there,

and Welcome here…

So You’re seeing a classic “back-powering the UART bridge” problem. With CONFIG_SERIAL/CONFIG_UART_CONSOLE on, the MCU brings up UARTE and actively drives TX at boot. If the USB-UART chip (on the XIAO that’s the on-board debug/bridge) is unpowered on battery, your TX line back-feeds it through ESD diodes. Result: brownout-ish behavior or no boot until you plug in USB-C.

Make RTT your default console everywhere (works on battery, no external power needed), and keep a second profile that enables UART for bench time.
Use this prj.conf (battery-safe, Default)

# Console/logging over RTT (safe on battery)
CONFIG_SERIAL=n
CONFIG_UART_CONSOLE=n

CONFIG_USE_SEGGER_RTT=y
CONFIG_RTT_CONSOLE=y
CONFIG_LOG=y
CONFIG_LOG_BACKEND_RTT=y
CONFIG_LOG_DEFAULT_LEVEL=3

Build (default) :

west build -p always -d build_batt ^
  -b xiao_nrf54l15/nrf54l15/cpuapp . ^
  -DBOARD_ROOT="C:/ncs/Seeed/platform-seeedboards/zephyr"

prj_uart.conf (bench profile with USB plugged in)

# Include the battery-safe base first if you like layering; or copy prj.conf and flip these:
CONFIG_SERIAL=y
CONFIG_UART_CONSOLE=y

# Optional: leave RTT on too (can be handy)
CONFIG_USE_SEGGER_RTT=y
CONFIG_RTT_CONSOLE=y
CONFIG_LOG_BACKEND_RTT=y
CONFIG_LOG_BACKEND_UART=y

Build with uart profile:

west build -p always -d build_uart ^
  -b xiao_nrf54l15/nrf54l15/cpuapp . ^
  -DBOARD_ROOT="C:/ncs/Seeed/platform-seeedboards/zephyr" ^
  -DOVERLAY_CONFIG="prj_uart.conf"

This gives you one image that always boots on battery (RTT), and another that speaks UART when USB is present. Same source, just flip the config.

HTH
GL :slight_smile: PJ :v:

for you right now

  • Switch your default to RTT (CONFIG_SERIAL=n, CONFIG_RTT_CONSOLE=y). That will boot on battery every time.
  • Keep a second config (prj_uart.conf) that turns UART console back on for bench work when USB-C is plugged.

This keeps behavior identical across all projects and avoids chasing per-board quirks.

1 Like