Add xiao nrf54lm20b support - #30
Merged
cumin777 merged 13 commits intoAug 14, 2026
Merged
Conversation
First bring-up of the XIAO nRF54LM20B, built on the nrf54lm20a/cpuapp SoC target. SWD programming baseline (USB DFU / MCUboot / signed packages are follow-up work). Board definition (Zephyr): - boards/seeed/xiao_nrf54lm20b/: Kconfig, board.cmake/yml, defconfig, CPUapp / CPUflpr DTS + yaml, common and pinctrl dtsi, XIAO connector dtsi, doc/index.rst, support/openocd.cfg - boards/pm_static_xiao_nrf54lm20b_nrf54lm20a_cpuapp.yml MicroPython integration: - xiao_nrf54lm20b_manifest.py, _nrf54lm20a_cpuapp.conf/.overlay - example/boards/xiao_nrf54lm20b.py (board pin/peripheral map) - example/boards/xiao.py: nrf54lm20b dispatch branch + XiaoPDM guard Tests / docs: - example/xiao_nrf54lm20b_full_test.py - README: "XIAO nRF54LM20B (SWD baseline)" build/flash/test section Co-Authored-By: Claude <noreply@anthropic.com>
The board was named nRF54LM20B but every SoC-level file targeted nrf54lm20a. nRF54LM20B is a distinct SoC: NCS v3.3.0 ships a dedicated nrf54lm20b SoC, and Nordic's own nrf54lm20dk exposes nrf54lm20a and nrf54lm20b as separate targets. Building the 20B board on the 20A SoC also broke runtime board detection in example/boards/xiao.py, which keys off implementation._machine. Switch the whole board to nrf54lm20b: - board.yml: soc name and runner targets - Kconfig: SOC_NRF54LM20B_* under BOARD_XIAO_NRF54LM20B_NRF54LM20B_* - dtsi: <nordic/nrf54lm20b_cpuapp/cpuflpr.dtsi> - board.cmake: CONFIG_SOC_NRF54LM20B_* and openocd chipname/load proc - yaml identifiers, dts compatible/model, and the _nrf54lm20a file names - README build commands and the cpuapp qualifier OpenOCD CTRL-AP comments and nRF54LM20A/B comparison prose are kept unchanged (they describe the shared debug IP / hardware delta). Co-Authored-By: Claude <noreply@anthropic.com>
…ot config Replace the board device tree with the updated definitions from cumin777/platform-seeedboards (branch xiao_nrf54lm20b_main_integration) and add the USB CDC ACM MCUboot serial-recovery configuration. Device tree (nrf54lm20b_cpuapp_common.dtsi): - Flash layout: shipped 24 KiB no-log mcuboot + slot0 app (1784 KiB @0x6000, imgtool slot_size 0x1BE000) + slot1 loader (116 KiB) + storage (16 KiB) -- single-app-slot + loader scheme, replacing the old 68 KiB / A/B layout. - Console/shell/mcumgr moved from uart20 to the USB CDC ACM device (cdc_acm_uart on &usbhs); +zephyr,boot-mode and gpregret retention; vregusb on; LFXO load capacitance 16000. Board config: - Kconfig.defconfig: source the Zephyr CDC ACM serial defconfig and pin the Seeed app CDC VID:PID 2886:8013 / product "XIAO_NRF54LM20B" (the loader CDC is 2886:0013, owned by the pre-flashed mcuboot). - board.cmake: drop the openocd runner (USB-only flashing); jlink device names nRF54LM20A_M33 / nRF54LM20A_RV32. - New mcuboot.conf + mcuboot.overlay: MCUboot serial recovery over USB CDC ACM, button/wait/no-app entry, RSA-3072 software signing, USB_DEVICE_STACK_NEXT. - doc/index.rst: correct the nRF54LM20B description (Axon NPU). Discard support/openocd.cfg entirely. Bootloader and KMU keys are pre-flashed on devices; only the signed app image is built/flashed here (signing + flash tooling in follow-up commits). Co-Authored-By: Claude <noreply@anthropic.com>
The mcuboot.conf brought in with the platform-seeedboards DT forced BOOT_SIGNATURE_TYPE_RSA / RSA-3072, overriding the nRF54LM20B SoC default (Ed25519). The device's pre-flashed boot actually verifies Ed25519 "pure" signatures with the public key in KMU -- matching the PlatformIO flow (boards/seeed-xiao-nrf54lm20b.json signature_key_file root-ed25519.pem, pure=true) and the GitLab boot bringup (BOOT_SIGNATURE_TYPE_PURE + SIGNATURE_USING_KMU). RSA-3072 and Ed25519 are mutually exclusive, so the RSA selection would have produced images the device rejects. Switch to: BOOT_SIGNATURE_TYPE_ED25519 + BOOT_SIGNATURE_TYPE_PURE + BOOT_SIGNATURE_USING_KMU App images are signed with the mcuboot default root-ed25519.pem. Co-Authored-By: Claude <noreply@anthropic.com>
User-facing flashing for the XIAO nRF54LM20B -- no SWD/J-Link needed.
Flow: hold USER + press RESET to enter the MCUboot USB serial-recovery
loader (USB CDC VID:PID 2886:0013), then this helper auto-detects that
loader port and uploads the signed app image with `nrfutil mcumgr image
upload`. The bootloader and KMU public key are factory-flashed, so only
the signed application is transferred.
- xiao_nrf54lm20b_flash.py: pyserial-based loader-port detection
(2886:0013), firmware auto-select, optional --mtu/--port, button+reset
wait loop.
- xiao_nrf54lm20b_flash.{sh,bat}: platform wrappers (mirrors the
xiao_nrf54lm20a_flash layout).
- .gitignore: ignore __pycache__/*.pyc so helper caches aren't committed.
Prereq: pip install nrfutil (bundles pyserial).
Co-Authored-By: Claude <noreply@anthropic.com>
… .ps1 The flasher used `nrfutil mcumgr ...`, which fails on nrfutil 8.x (the subcommand is `mcu-manager`; `mcumgr` is not installed). Align with the validated flow (`nrfutil mcu-manager serial image-upload`), which also accepts a signed .bin directly. - xiao_nrf54lm20b_flash.py: switch to `mcu-manager serial image-upload` (+ reset); resolve a portable bundled nrfutil before falling back to PATH (NRFUTIL_HOME set when a bundled home is present). - xiao_nrf54lm20b_flash.ps1: new portable Windows flasher (WMI auto-detect of the 2886:0013 loader port; bundled-nrfutil resolution; zero install). - flash_usb_dfu.cmd: double-click / cmd launcher for the .ps1. The ~9 MB nrfutil binary is NOT committed -- it is bundled only in the release/delivery zip so the repo stays small. Co-Authored-By: Claude <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Add xiao nrf54lm20b support