🍒 XIAO nRF54LM20A + nRF Connect SDK v3.2.1 Bring-Up Log

Hi there,

So here is the steps I used to Begin the journey of discovery…
:grin:

Using the nRF54L15 DK as an External J-Link Programmer

Date: June 2026

Status: SUCCESS :white_check_mark:

I attached the included Flag antenna to the Newly opened Xiao and added it to the expansion board.



After some experimentation, I have the Seeed XIAO nRF54LM20A building and flashing under Nordic nRF Connect SDK v3.2.1.

This is a summary of the complete process that got me there.

Hardware Used

  • Seeed XIAO nRF54LM20A
  • Seeed Expansion Board (SWD)
  • Nordic nRF54L15 DK (P19)
  • USB-C cable to both boards (not at the same time)
  • Windows 11
  • nRF Connect SDK v3.2.1

Step 1 - Connect the Hardware

The XIAO was plugged into the Expansion Board.

The Expansion Board SWD connector was wired directly to the External Debug (P19) connector on the nRF54L15 DK.

Connections:

SWDIO
SWCLK
RESET
3.3V
GND

Power was supplied normally through USB.

Step 2 - Verify J-Link Can See the Target

Open J-Link Commander.

connect

Device:

NRF54LM20A_M33

Expected output:

Found SW-DP
Found Cortex-M33
Secure debug enabled

This confirms:

  • SWD wiring good
  • Target powered
  • Debug unlocked

Step 3 - Halt CPU

halt

Expected:

PC = xxxxxxxx

Registers should be readable.

Step 4 - Verify Flash

mem32 0x00000000,16

Expected:

20000C60
000002CD...

If the vector table is readable,

the connection is working.


Step 5 - Backup Factory Firmware

Backup first 64 KB

savebin d:\ncs\tmp\nrf54lm20a_factory_stub_64k.bin,0x00000000,0x10000

Expected

Reading 65536 bytes...O.K.

Convert to HEX

arm-zephyr-eabi-objcopy-I binary-O ihex

Result

factory_stub_64k.hex

Now factory firmware is preserved. :backhand_index_pointing_left: :smiling_face_with_sunglasses:

Step 6 - Install Seeed Board Files

Clone

platform-seeedboards

Extract only

boards/soc/

to

D:\ncs\seeed-lm20a-only

Avoid copying xiao_nrf54l15 because it conflicts with NCS 3.2.1.


Step 7 - Verify Board Exists

west boards --board-root D:\ncs\seeed-lm20a-only

Expected

xiao_nrf54lm20a

Step 8 - Build Hello World

west build

Board

xiao_nrf54lm20a/nrf54lm20a/cpuapp

Extra CMake

-DBOARD_ROOT=D:/ncs/seeed-lm20a-only

Expected

FLASH:RAM:Generating merged.hex

No errors.


Step 9 - J-Link Flash Failure

Attempting

west flash

or

loadfile merged.hex

failed with

Timeout while preparing targetRAMCode did not respond

This turned out NOT to be an SWD problem.

It was the flash loader.


Step 10 - Install nrfutil

Found inside

C:\ncs\toolchains\936afb6332\nrfutil\bin

Version

7.12.0

Step 11 - Verify Debugger

nrfutil device list

Expected

1057729516ProductJ-LinkBoardPCA10156

Perfect.


Step 12 - Flash Successfully

nrfutil device program

Firmware

merged.hex

Output

Programmed

Success!


Step 13 - Reset

nrfutil device reset

Step 14 - Open Serial Port

Immediately after reset

COM port begins printing

XIAO nRF54LM20A Demo, LED ONaccel data:...gyro data:...

Then

LED OFFaccel...gyro...

Repeated continuously.


Final Result

The following are now verified:

:white_check_mark: NCS v3.2.1 builds successfully

:white_check_mark: Custom XIAO board support works

:white_check_mark: nRF54L15 DK external SWD works

:white_check_mark: J-Link debugging works

:white_check_mark: Flash backup completed

:white_check_mark: Factory firmware preserved

:white_check_mark: nrfutil flashing works

:white_check_mark: Serial output works

:white_check_mark: IMU working

:white_check_mark: LED working

SEGGER J-Link Commander V8.94 (Compiled Dec 10 2025 14:46:23)
DLL version V8.94, compiled Dec 10 2025 14:45:18

Connecting to J-Link via USB...O.K.
Firmware: J-Link OB-nRF5340-NordicSemi compiled Jul  8 2025 10:15:34
Hardware version: V1.00
J-Link uptime (since boot): 0d 00h 01m 49s
S/N: 1057729516
License(s): RDI, FlashBP, FlashDL, JFlash, GDB
USB speed mode: Full speed (12 MBit/s)
VTref=3.300V


Type "connect" to establish a target connection, '?' for help

J-Link>connect
Device "NRF54LM20A_M33" selected.


Connecting to target via SWD
ConfigTargetSettings() start
ConfigTargetSettings() end - Took 2us
InitTarget() start
InitTarget() end - Took 1.83ms
Found SW-DP with ID 0x6BA02477
DPIDR: 0x6BA02477
CoreSight SoC-400 or earlier
AP map detection skipped. Manually configured AP map found.
AP[0]: AHB-AP (IDR: Not set, ADDR: 0x00000000)
AP[1]: APB-AP (IDR: Not set, ADDR: 0x00000000)
AP[2]: MEM-AP (IDR: Not set, ADDR: 0x00000000)
Iterating through AP map to find AHB-AP to use
AP[0]: Core found
AP[0]: AHB-AP ROM base: 0xE00FE000
CPUID register: 0x411FD210. Implementer code: 0x41 (ARM)
Feature set: Mainline
Cache: No cache
Found Cortex-M33 r1p0, Little endian.
FPUnit: 8 code (BP) slots and 0 literal slots
Security extension: implemented
Secure debug: enabled
CoreSight components:
ROMTbl[0] @ E00FE000
[0][0]: E00FF000 CID B105100D PID 000BB4C9 ROM Table
ROMTbl[1] @ E00FF000
[1][0]: E000E000 CID B105900D PID 000BBD21 DEVARCH 47702A04 DEVTYPE 00 Cortex-M33
[1][1]: E0001000 CID B105900D PID 000BBD21 DEVARCH 47701A02 DEVTYPE 00 DWT
[1][2]: E0002000 CID B105900D PID 000BBD21 DEVARCH 47701A03 DEVTYPE 00 FPB
[1][3]: E0000000 CID B105900D PID 000BBD21 DEVARCH 47701A01 DEVTYPE 43 ITM
[1][5]: E0041000 CID B105900D PID 002BBD21 DEVARCH 47724A13 DEVTYPE 13 ETM
[0][1]: E0040000 CID B105900D PID 000BBD21 DEVARCH 00000000 DEVTYPE 11 TPIU
Memory zones:
  Zone: "Default" Description: Default access mode
Cortex-M33 identified.
J-Link>ShowHWStatus
VTref=3.300V
ITarget=0mA
TCK=0 TDI=1 TDO=1 TMS=1 TRES=1 TRST=?
Supported target interface speeds:
 - 128 MHz/n, (n>=64). => 2000kHz, 1969kHz, 1939kHz, ...

Build with West command

PS C:\ncs\v3.2.1> west build -p always `
>>   -b xiao_nrf54lm20a/nrf54lm20a/cpuapp `
>>   zephyr\samples\hello_world `
>>   -- "-DBOARD_ROOT=D:/ncs/seeed-lm20a-only"
-- west build: generating a build system
Loading Zephyr module(s) (Zephyr base): sysbuild_default
-- Found Python3: C:/Users/Dude/AppData/Local/Microsoft/WindowsApps/PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0/python.exe (found suitable version "3.11.9", minimum required is "3.10") found components: Interpreter
-- Cache files will be written to: C:/ncs/v3.2.1/zephyr/.cache
-- Found west (found suitable version "1.3.0", minimum required is "0.14.0")
-- Board: xiao_nrf54lm20a, qualifiers: nrf54lm20a/cpuapp
Parsing C:/ncs/v3.2.1/zephyr/share/sysbuild/Kconfig
Loaded configuration 'C:/ncs/v3.2.1/build/_sysbuild/empty.conf'
Merged configuration 'C:/ncs/v3.2.1/build/_sysbuild/empty.conf'
Configuration saved to 'C:/ncs/v3.2.1/build/zephyr/.config'
Kconfig header saved to 'C:/ncs/v3.2.1/build/_sysbuild/autoconf.h'
--
   *********************************
   * Running CMake for hello_world *
   *********************************
yada,yada,yada,

[10/10] Generating ../merged.hex

Flash & Reset

PS C:\ncs\v3.2.1> nrfutil device list
C865297E600C
Product         nRF52 Connectivity
Ports           COM7
Traits          nordicUsb, nordicDfu, serialPorts, usb

1057729516
Product         J-Link
Board version   PCA10156
Ports           COM3, vcom: 0
                COM4, vcom: 1
Traits          jlink, seggerUsb, serialPorts, usb, devkit, boardController

Supported devices found: 2

PS C:\ncs\v3.2.1> nrfutil device program --firmware C:\ncs\v3.2.1\build\merged.hex --serial-number 1057729516
[00:00:00] ###### 100% [2/3 1057729516] Programmed
PS C:\ncs\v3.2.1> nrfutil device reset --serial-number 1057729516
v Reset was applied to 1057729516
PS C:\ncs\v3.2.1> nrfutil device reset --serial-number 1057729516
v Reset was applied to 1057729516
PS C:\ncs\v3.2.1>

Serial output

UART20_BOOT_PROBE
Hello, XIAO nRF54LM20A
accel data:0.134596,0.485144,11.073384gyro data: -0.131717,-0.000305,-0.023671
XIAO nRF54LM20A Demo, LED ON
accel data:-0.098703,0.303888,10.412965gyro data: -0.009162,-0.057726,0.060628
XIAO nRF54LM20A Demo, LED OFF
accel data:-0.018544,0.308075,10.399207gyro data: -0.008704,-0.054290,0.063224
XIAO nRF54LM20A Demo, LED ON
accel data:-0.046660,0.331405,10.368698gyro data: -0.010766,-0.054672,0.064217
XIAO nRF54LM20A Demo, LED OFF
accel data:-0.070588,0.270388,10.378269gyro data: -0.008628,-0.054748,0.061086
XIAO nRF54LM20A Demo, LED ON
accel data:-0.083748,0.315852,10.387242gyro data: -0.007406,-0.054519,0.063835
XIAO nRF54LM20A Demo, LED OFF
accel data:-0.042472,0.329013,10.401001gyro data: -0.005345,-0.049785,0.063988
XIAO nRF54LM20A Demo, LED ON

code is in the system

zephyr\samples\hello_world `

More discoveries to be made and more testing…

Lessons Learned

The biggest discoveries:

  • The board files from Seeed work with NCS 3.2.1 after removing duplicate board definitions.
  • The nRF54L15 DK makes an excellent external debugger for the LM20A.
  • Raw J-Link Commander can debug the LM20A but cannot reliably program flash because of the RAMCode/flash algorithm issue.
  • nrfutil is currently the reliable flashing method.
  • Once this workflow is established, development becomes straightforward.
  • Bleeding edge , expect some cuts…LOL

Stay tuned for more from this tiny firehorse

HTH
GL :slight_smile: PJ :v:

3 Likes

GitHub - lolren/open-nrf-ocd: Native C CMSIS-DAP flash programmer for nRF54 — zero-Python pyOCD replacement. Cross-platform Linux/macOS/Windows. · GitHub easier method:)

Also, easier method to run code: GitHub - lolren/nrf54-arduino-core: nRF54 Arduino core for XIAO nRF54L15 and other nRF54 boards using a register-level runtime · GitHub

1 Like

Hi there,

So to UPDATE… The segger folks released an update for the ON-BOARD J-Link on the nrf54L15DK, prior to the update it was NOT able to Erase , or Write (loadfile) properly without errors.

FYI, PSA…

Updated to V9.54 for the on-board J-Link on the nRF54L15_DK , restores the ERASE and LOADFILE for the Xiao nRF54LM20A . After updating ALL Jlink functions are working again. :+1: The RAMCode errors are gone.
Here is the Flow:
device nRF54LM20A_M33
si SWD
speed 500
connect
r
h
erase
r
h
loadfile D:\Nordic\myapps\workspace\hello_world_2\build\merged.hex
r
g
__ Proves to work reliably__

Now if only my Code wasn’t garbage. :grin:

HTH
GL :slight_smile: PJ :v:

Also moved to th Version 3.2.4 for the Nrf_SDK and Toolchain. SOFar AOK :+1:

Hi there,

And Major Props… for the Arduino Core work. Brilliant really to use the AI to build what we needed, some here would complain but to Make a fast prototype possible without breaking many brain cells and AI prompts… LOL :grin: it’s Perfect! :+1:

As it matures and more parts work, like debugging it will help the community. I’m thankful, you resuscitated the Nordic new stuff in the arduino realm. You proved they are just LAZY in both camps, IMO :sweat_smile:

Thank You. :wink: :index_pointing_at_the_viewer:

I’ll keep testing with it and post any issues, I feel a LM20A “Rolo” with round display coming up.

HTH
GL :slight_smile: PJ :v:

2 Likes

I actually think this is the first vibe-coded Arduino core :slight_smile:
I hope all things will be on par with Zephyr. One thing I don’t think can be solver is CRACEN, which Nordic uses a proprietary micro-code. I’ve asked them for help, but their response was a generic corporate talk for “piss-off“.

This would make Thread and Matter under perform on this core.

I was thinking that for the next project , I might finish the ESP32 open WIFI stack :slight_smile:

1 Like

It looks like LM20A will be officially released tomorrow. I sure hope a lot of testers will join in on the debugging of the actual device.

Hi there,

Absolutely agree, Once it is official and available I bet more do test it and switch, as it offers so much over the Previous Xiao’s. So much yet to be explored. PHAT flash and Starting with the Crashproof DFU possabilities , ship mode, RiscV Flipper, Find my device compatibility, NFC Wake/Sleep and some of the newer BLE 6.0 features, and that is just a run up to the “B” variant more suited to Inferencing and AI tasks. :exploding_head:

I saw a demo of the IMU doing “anti-tamper” drilling and grinding model training that was seriously cool. what is coming and what is possible is amazing. :fight_cloud:
I want to test it ALL!

GL :slight_smile: PJ :v:

As always though the Lag in Software updates , for newer silicon features will always sadly be a thing. I Imagine just what @Loren_Bufanu has done in extending the life of some Arduino projects to this newer more powerful silicon, which otherwise would have no choice but to be abandon or redesign. :+1:

1 Like

Hi there,


So, if you received the Breakout for the nRF54LM20A ahead of the release, I stretched the grove pad to work here, enjoy. the STL is in the ZIP.

HTH
GL :slight_smile: PJ :v:
Xiao_LM20A_dK-Body.zip (612.2 KB)