This README file provides instructions for building and running MicroPython firmware on select Seeed XIAO development boards.
Before building the MicroPython firmware, ensure you have the following:
- Zephyr Development Environment:
- Install required tools: Python 3.10 or later, CMake 3.20.0 or later, Ninja, DTC,
west, and the Zephyr SDK toolchain. - Install dependences:
sudo apt-get update sudo apt-get install -y git cmake ninja-build gperf ccache \ dfu-util device-tree-compiler python3-dev python3-pip python3-setuptools \ python3-tk python3-wheel xz-utils file libpython3-dev libffi-dev gh pip3 install west pip install requests pip install pyelftools
- Install the Zephyr SDK and set up the development environment by following the Zephyr Getting Started Guide.
- Nordic
nRF54boards are built with the Nordic nRF Connect SDK (NCS), pinned per board so Zephyr and the Nordic SoC support stay aligned:- XIAO nRF54LM20A: NCS v3.3.0 (validated; see
.github/workflows/build_micropython_xiao_nrf54lm20a.yml). - XIAO nRF54L15: NCS v3.0.2 (the revision its CI builds against; see
.github/workflows/build_micropython_xiao_nrf54l15.yml).
- XIAO nRF54LM20A: NCS v3.3.0 (validated; see
- Example commands to initialize a Nordic SDK workspace:
# XIAO nRF54LM20A west init -m https://github.com/nrfconnect/sdk-nrf --mr v3.3.0 zephyrproject west update && west zephyr-export # XIAO nRF54L15 west init -m https://github.com/nrfconnect/sdk-nrf --mr v3.0.2 zephyrproject west update && west zephyr-export # e.g. for XIAO MG24 west init zephyrproject -m https://github.com/zephyrproject-rtos/zephyr --mr v4.2.0 cd zephyrproject/zephyr && west update && west blobs fetch hal_silabs pip3 install -r zephyr/scripts/requirements.txt && cd ..
- Install Zephyr SDK:
wget https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.17.0/zephyr-sdk-0.17.0_linux-x86_64.tar.xz mkdir -p ~/zephyr-sdk tar -xvf zephyr-sdk-0.17.0_linux-x86_64.tar.xz -C ~/zephyr-sdk cd ~/zephyr-sdk/zephyr-sdk-0.17.0 ./setup.sh -t all -h
- Source the Zephyr environment:
source ncs/zephyr/zephyr-env.sh - Clone the MicroPython repository to your local machine:
git clone --recurse-submodules https://github.com/Seeed-Studio/micropython-seeed-boards.git cd micropython-seeed-boards/lib/micropython gh pr checkout 18030
- Install required tools: Python 3.10 or later, CMake 3.20.0 or later, Ninja, DTC,
- ESP32 Developement Environment:
- Install required tools: Python 3.10 or later, CMake 3.20.0 or later, esptool, and the ESP32 toolchain.
- Install dependences:
sudo apt-get update sudo apt-get install git wget flex bison gperf python3 python3-pip python3-venv cmake ninja-build ccache libffi-dev libssl-dev dfu-util libusb-1.0-0 gh
- Install ESP-IDF:
cd ~ git clone -b v5.5 --recursive https://github.com/espressif/esp-idf.git cd ~/esp-idf git submodule update --init --recursive ./install.sh esp32 . ./export.sh
- Source the ESP-IDF environment:
source ~/esp-idf/export.sh
- Clone the MicroPython repository to your local machine:
git clone --recurse-submodules https://github.com/Seeed-Studio/micropython-seeed-boards.git && cd micropython-seeed-boards/lib rm -rf micropython git clone https://github.com/micropython/micropython.git cd micropython gh pr checkout 17912 git submodule update --init --recursive git submodule update --init lib/berkeley-db-1.xx
- Renesas RA Developement Environment:
- Install dependences:
sudo apt-get update sudo apt-get install -y git make cmake ninja-build gperf ccache gcc-arm-none-eabi dfu-util device-tree-compiler python3-dev python3-pip python3-setuptools python3-tk python3-wheel xz-utils file libpython3-dev libffi-dev gh
- Clone the MicroPython repository to your local machine:
cd lib && rm -r micropython || true git clone https://github.com/micropython/micropython.git cd micropython && git submodule update --init --recursive && gh pr checkout 16409
- Install dependences:
To build the MicroPython firmware for the Zephyr boards or ESP32 boards, run the following commands from the root of your project directory (where the lib/micropython/ports/zephyr or lib/micropython/ports/esp32 directory exists):
- Building for Zephyr Boards:
- The Nordic
nRF54boards in this repository are built withsysbuildand board-specific overlay/config files. - Before building Nordic
nRF54boards, make sure the Zephyr or NCS environment is active andZEPHYR_SDK_INSTALL_DIRis set correctly for your machine. - For XIAO nRF54L15:
cd micropython-seeed-boards && export PROJECT_DIR=$(pwd) west build ./lib/micropython/ports/zephyr --pristine --board xiao_nrf54l15/nrf54l15/cpuapp --sysbuild -- -DBOARD_ROOT=$PROJECT_DIR/ -DEXTRA_DTC_OVERLAY_FILE=$PROJECT_DIR/boards/xiao_nrf54l15_nrf54l15_cpuapp.overlay -DPM_STATIC_YML_FILE=$PROJECT_DIR/boards/pm_static_xiao_nrf54l15_nrf54l15_cpuapp.yml -DEXTRA_CONF_FILE=$PROJECT_DIR/boards/xiao_nrf54l15_nrf54l15_cpuapp.conf
- For XIAO nRF54LM20A:
cd micropython-seeed-boards && export PROJECT_DIR=$(pwd) west build ./lib/micropython/ports/zephyr --pristine --board xiao_nrf54lm20a/nrf54lm20a/cpuapp --sysbuild -- -DBOARD_ROOT=$PROJECT_DIR/ -DEXTRA_DTC_OVERLAY_FILE=$PROJECT_DIR/boards/xiao_nrf54lm20a_nrf54lm20a_cpuapp.overlay -DPM_STATIC_YML_FILE=$PROJECT_DIR/boards/pm_static_xiao_nrf54lm20a_nrf54lm20a_cpuapp.yml -DEXTRA_CONF_FILE=$PROJECT_DIR/boards/xiao_nrf54lm20a_nrf54lm20a_cpuapp.conf
- For XIAO nRF52840:
west build ./lib/micropython/ports/zephyr --pristine --board xiao_ble
- For XIAO MG24:
cd micropython-seeed-boards && export ZEPHYR_SDK_INSTALL_DIR="~/zephyr-sdk/zephyr-sdk-0.17.0" export PATH="$ZEPHYR_SDK_INSTALL_DIR:$PATH" export PROJECT_DIR=$(pwd) west build lib/micropython/ports/zephyr -b xiao_mg24 --pristine -- -DCONF_FILE=$PROJECT_DIR/boards/xiao_mg24.conf -DEXTRA_DTC_OVERLAY_FILE=$PROJECT_DIR/boards/xiao_mg24.overlay -DUSER_C_MODULES="$PROJECT_DIR/src/cmodules/modadc;$PROJECT_DIR/src/cmodules/modrtc;"
- If you encounter issues with undefined Kconfig symbols, first confirm that your NCS or Zephyr version matches the board family you are building.
- On Windows, if the build fails because of very long command lines during qstr generation, move the repository to a shorter path such as
C:\src\micropython-seeed-boards. - Build artifacts for
nRF54boards are generated underbuild/<board-name>/, includingmerged.hex,zephyr.hex, andzephyr.elf.
- The Nordic
- Building for ESP32 Boards:
- Example For ESP32 Boards:
cd micropython-seeed-boards/lib/micropython/ports/esp32 rm -rf build-ESP32_GENERIC make BOARD=ESP32_GENERIC
- Example For ESP32 Boards:
- Building for Renesas RA Boards:
- Example For XIAO RA4M1 CORE and Other RA Boards:
cd micropython-seeed-boards/lib/micropython/ports/renesas-ra make BOARD_DIR=../../../../boards/seeed/xiao_ra4m1
- Example For XIAO RA4M1 CORE and Other RA Boards:
The compiled firmware is available at https://github.com/Seeed-Studio/micropython-seeed-boards/releases. To flash the compiled firmware to the Zeyphr boards and ESP32 boards, run the following command from the root of your project directory:
- Flashing for Zephyr Boards:
nRF54boards in this repository provide dedicated flash helpers undertools/.- Copy the compiled firmware into the corresponding flash tool folder before running the helper script:
# e.g. for XIAO nRF54L15 cd micropython-seeed-boards/tools/xiao_nrf54l15_flash # e.g. for Windows ./xiao_nrf54l15_flash.bat # e.g. for Linux and Mac chmod +x xiao_nrf54l15_flash.sh && ./xiao_nrf54l15_flash.sh # e.g. for XIAO MG24 cd micropython-seeed-boards/tools/xiao_mg24_flash # e.g. for Windows python -m venv venv Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass -Force .\venv\Scripts\Activate.ps1 ./xiao_mg24_flash.bat # e.g. for Linux and Mac chmod +x xiao_mg24_flash.sh && ./xiao_mg24_flash.sh
- For XIAO nRF54LM20A:
cd micropython-seeed-boards/tools/xiao_nrf54lm20a_flash # Windows ./flash.bat # Linux / macOS chmod +x ./xiao_nrf54lm20a_flash.sh ./xiao_nrf54lm20a_flash.sh
- The XIAO nRF54LM20A flash helper uses OpenOCD by default to match the validated flashing flow used by Seeed's Nordic board support.
- If
openocdis already available in your systemPATH, the script uses it first. If the detected version is not the validated version family, the script prints a warning and you can rerun with:python xiao_nrf54lm20a_flash.py --install-openocd
- If
openocdis not installed, the script automatically downloads and installs the validated OpenOCD package into a per-user default directory:- Windows:
%LOCALAPPDATA%\Seeed\OpenOCD - macOS:
~/Library/Application Support/Seeed/OpenOCD - Linux:
~/.local/share/seeed/openocd
- Windows:
- If multiple CMSIS-DAP probes are connected, list them first and then flash with the selected probe ID:
python -m pyocd list --probes python xiao_nrf54lm20a_flash.py --probe <probe_id>
- Flashing for ESP32 Boards:
- The esptool tool is recommended for flashing. It should be noted that when flashing the MicroPython firmware, the starting address must be specified as 0x2000.
- Example for ESP32 boards:
# e.g. for Linux esptool.py --chip esp32 --port /dev/cu.usbmodem11301 --baud 460800 write_flash -z 0x2000 firmware.bin # e.g. for Windows esptool --chip esp32 --port COM7 --baud 460800 write_flash -z 0x2000 .\firmware.bin
- Flashing for Renesas RA Boards:
- You first need to put the compiled firmware into the flash tool folder of XIAO RA4M1, and then run the following command, the prerequisite is that you must use XIAO Debugger to connect to the XIAO RA4M1 board:
cd micropython-seeed-boards/tools/xiao_ra4m1_flash # e.g. for Windows ./xiao_ra4m1_flash.bat # e.g. for Linux and Mac chmod +x xiao_ra4m1_flash.sh && ./xiao_ra4m1_flash.sh
- You first need to put the compiled firmware into the flash tool folder of XIAO RA4M1, and then run the following command, the prerequisite is that you must use XIAO Debugger to connect to the XIAO RA4M1 board:
The XIAO nRF54LM20B uses a pre-provisioned USB DFU boot chain. The MicroPython build produces only a signed application for its fixed slot0 partition; it does not rebuild or overwrite MCUboot.
Requirements:
- Python 3.10 or newer, CMake 3.20 or newer, Ninja, DTC and
west. - Nordic nRF Connect SDK v3.3.0 or newer.
- Zephyr SDK 0.17.0, including both
arm-zephyr-eabiandriscv64-zephyr-elftoolchains. The RISC-V toolchain is needed for the nRF54LM20 FLPR child image; a host-onlyarm-none-eabi-gccinstallation is not sufficient for sysbuild. - A J-Link probe and J-Link Software v9.24 or newer. The validated J-Link
device name is
nRF54LM20A_M33because the 20B board uses nRF54LM20A/B compatible silicon and thecpuappqualifier isnrf54lm20b.
Linux/macOS clean-environment setup and build:
python3 -m pip install --user west
git clone --recurse-submodules https://github.com/Seeed-Studio/micropython-seeed-boards.git
cd micropython-seeed-boards
git submodule update --init --recursive
cd ..
west init -m https://github.com/nrfconnect/sdk-nrf --mr v3.3.0 ncs-workspace
cd ncs-workspace
west update
west zephyr-export
source zephyr/zephyr-env.sh
cd ../micropython-seeed-boards
export PROJECT_DIR="$PWD"
# Path to the private key whose public part was provisioned into the device KMU.
# Keep this key outside the repository.
export MCUBOOT_SIGNING_KEY="/absolute/path/to/root-ed25519.pem"
west build "$PROJECT_DIR/lib/micropython/ports/zephyr" \
--pristine \
--no-sysbuild \
--board xiao_nrf54lm20b/nrf54lm20b/cpuapp -- \
-DBOARD_ROOT="$PROJECT_DIR" \
-DEXTRA_DTC_OVERLAY_FILE="$PROJECT_DIR/boards/xiao_nrf54lm20b_nrf54lm20b_cpuapp.overlay" \
-DEXTRA_CONF_FILE="$PROJECT_DIR/boards/xiao_nrf54lm20b_nrf54lm20b_cpuapp.conf" \
-DCONFIG_MCUBOOT_SIGNATURE_KEY_FILE:STRING=\"${MCUBOOT_SIGNING_KEY}\"Windows PowerShell clean-environment setup and build:
py -m pip install west
git clone --recurse-submodules https://github.com/Seeed-Studio/micropython-seeed-boards.git
Set-Location micropython-seeed-boards
git submodule update --init --recursive
Set-Location ..
west init -m https://github.com/nrfconnect/sdk-nrf --mr v3.3.0 ncs-workspace
Set-Location ncs-workspace
west update
west zephyr-export
.\zephyr\zephyr-env.cmd
Set-Location ..\micropython-seeed-boards
$env:PROJECT_DIR = (Get-Location).Path
# The corresponding public key is already provisioned in KMU; do not add this
# private signing key to the repository.
$env:MCUBOOT_SIGNING_KEY = "D:/path/to/root-ed25519.pem"
west build "$env:PROJECT_DIR\lib\micropython\ports\zephyr" `
--pristine `
--no-sysbuild `
--board xiao_nrf54lm20b/nrf54lm20b/cpuapp -- `
"-DBOARD_ROOT=$env:PROJECT_DIR" `
"-DEXTRA_DTC_OVERLAY_FILE=$env:PROJECT_DIR/boards/xiao_nrf54lm20b_nrf54lm20b_cpuapp.overlay" `
"-DEXTRA_CONF_FILE=$env:PROJECT_DIR/boards/xiao_nrf54lm20b_nrf54lm20b_cpuapp.conf" `
('-DCONFIG_MCUBOOT_SIGNATURE_KEY_FILE:STRING="{0}"' -f $env:MCUBOOT_SIGNING_KEY)The important build outputs are:
build/xiao_nrf54lm20b/zephyr/zephyr.elf
build/xiao_nrf54lm20b/zephyr/zephyr.signed.bin
For SWD provisioning, flash the prebuilt bootloader package separately, then
program only the signed application at slot0. For normal updates, upload
zephyr.signed.bin through the pre-provisioned USB DFU loader.
JLinkExe -device nRF54LM20A_M33 -if SWD -speed 4000 -autoconnect 1
J-Link> r
J-Link> h
J-Link> loadfile build/xiao_nrf54lm20b/zephyr/zephyr.signed.hex
J-Link> r
J-Link> g
J-Link> q
After reset, the application exposes the MicroPython REPL over USB CDC ACM
(VID:PID 2886:8013). Copy the test script to the MicroPython filesystem
with mpremote, then run:
Linux/macOS example:
python3 -m pip install mpremote
mpremote connect /dev/ttyACM0 fs cp example/xiao_nrf54lm20b_full_test.py :xiao_nrf54lm20b_full_test.pyWindows PowerShell example:
py -m pip install mpremote
mpremote connect COM7 fs cp example\xiao_nrf54lm20b_full_test.py :xiao_nrf54lm20b_full_test.pyimport xiao_nrf54lm20b_full_test as test
test.main()The test console supports help, status, all, uart, adc, pwm,
i2c, led, io, imu, battery, ble, pdm, spi, and exit.
UART21 loopback requires a jumper from P1.8 to P1.9. BLE visibility requires
a phone or another BLE scanner. The battery test reads the nPM1300 fuel-gauge
sensor when the charger device is available. It reports SKIP if the sensor
driver is unavailable; ADC7 must not be treated as VBAT without a board-level
mapping.
Formal firmware archives are intentionally not produced in this bring-up phase. USB DFU, signed application packages, rollback and release packaging are follow-up work.
- Install Thonny IDE:
- Install and open thonny, then configure Thonny following the instruction:
pip install thonny thonny
- Install and open thonny, then configure Thonny following the instruction:
- Configure Thonny Interpreter:
- Go to Run-->Configure Interpreter, select "MicroPython (generic)" and port, then clicking OK, select the port in the lower right corner, usually showing as MicroPython(generic) · Virtual COM-Port @COMX.
- On boards that ship with the frozen
boards.xiaohelper package, such as XIAO nRF54LM20A, you can use the helper APIs directly without uploading theexample/boardsdirectory first. - On older firmware builds that do not freeze
boards.xiao, copy theexample/boardsfolder to the device file system before running board helper examples. - You can then open the example program in the
exampledirectory through Thonny and pressF5to run it:import time from boards.xiao import XiaoPin led = "led" try: # Initialize LED led = XiaoPin(led, XiaoPin.OUT) while True: # LED 0.5 seconds on, 0.5 seconds off led.value(1) time.sleep(0.5) led.value(0) time.sleep(0.5) except KeyboardInterrupt: print("\nProgram interrupted by user") except Exception as e: print("\nError occurred: %s" % {e}) finally: led.value(1)
This repository includes a Zephyr/MicroPython port for the Seeed XIAO STM32C5. The v1 user flow is TinyUF2 double-reset bootloader plus a USART1 REPL. USB CDC REPL and 1200-bps automatic bootloader entry are not required for v1.
The reproducible build uses Python 3.12, west 1.5 or newer, CMake 3.20 or
newer, Ninja, device-tree compiler, and an ARM Cortex-M33 compiler. Zephyr
4.4.0 is the validated framework revision. Either a user-installed Zephyr SDK
or GNU Arm Embedded GCC may be used. No sudo is needed when these tools are
already available or installed under the user's home directory.
From a clean checkout, initialize the MicroPython submodule and a user-owned Zephyr workspace:
git clone --recurse-submodules https://github.com/Seeed-Studio/micropython-seeed-boards.git
cd micropython-seeed-boards
python3 -m venv .venv/micropython-c5
source .venv/micropython-c5/bin/activate
python -m pip install --upgrade pip west jsonschema pyelftools requests PyYAML
west init -m https://github.com/zephyrproject-rtos/zephyr --mr v4.4.0 zephyrproject
cd zephyrproject
west update
cd ..
export ZEPHYR_BASE="$PWD/zephyrproject/zephyr"If using GNU Arm Embedded GCC, set its user/system prefix explicitly when it
is not in PATH:
export ZEPHYR_TOOLCHAIN_VARIANT=gnuarmemb
export GNUARMEMB_TOOLCHAIN_PATH="/path/to/arm-toolchain-prefix"Build from the repository root:
source .venv/micropython-c5/bin/activate
ZEPHYR_BASE="$PWD/zephyrproject/zephyr" \
PYTHON="$PWD/.venv/micropython-c5/bin/python" \
WEST="$PWD/.venv/micropython-c5/bin/west" \
tools/xiao_stm32c5/build.shThe script stages the board root, temporarily applies the STM32C5 HAL2 USB and XSPI backports, restores the Zephyr workspace on exit, and generates:
build/xiao_stm32c5/zephyr/zephyr.elf
build/xiao_stm32c5/zephyr/zephyr.bin
build/xiao_stm32c5/zephyr/zephyr.hex
build/xiao_stm32c5/zephyr/micropython-xiao-stm32c5.uf2
The UF2 application address is 0x08008000, the family ID is
0x00C5C5C5, and the TinyUF2 volume label is XIAOC5BOOT. Verify checksums
with sha256sum before distributing a file.
The XIAO STM32C5 port is validated against Zephyr 4.4.0; build.sh
refuses to build against any other revision. STM32C5 HAL2 support in the
upstream UDC and XSPI flash drivers landed only after the 4.4.0 release
(Zephyr PR #105957), so this repository carries four backport patches under
zephyr/patches/zephyr-4.4.0/:
0001-udc-stm32-hal2-support.patch- USB DRD UDC HAL2 support0002-flash-stm32-xspi-hal2-support.patch- XSPI flash HAL2 support (driver)0003-flash-stm32-xspi-hal2-support.patch- XSPI flash HAL2 support (header)0004-adc-stm32-fix-pcsel-preselection.patch- ADC PCSEL preselection fix
tools/xiao_stm32c5/build.sh backs up each target file, applies its patch
in place, builds, and restores the originals on exit (guarded by flock so
concurrent builds are safe). The CI workflow pins Zephyr to --mr v4.4.0 so
the patches apply cleanly.
Maintainer note: when upgrading to a newer Zephyr revision, regenerate or replace the
zephyr/patches/zephyr-4.4.0/patches against the new tree (patch context lines move between revisions), and update the version check intools/xiao_stm32c5/build.shplus the--mr v4.4.0pin in.github/workflows/build_micropython_xiao_stm32c5.yml. A patch that fails to apply fails the build with a clear error rather than silently producing a broken image.
- Connect the board with USB and double-click Reset.
- Wait for the
XIAOC5BOOTmass-storage volume. - Copy
micropython-xiao-stm32c5.uf2to that volume. TinyUF2 processes the file and reboots the board automatically. - Connect a 3.3-V UART adapter to USART1: PA9 is TX, PA10 is RX, and GND is common. Use 115200 8-N-1. USB CDC REPL is not the v1 acceptance path.
- Copy or paste
example/xiao_stm32c5_full_test.pyinto the MicroPython filesystem and run the single full test entry point:
import xiao_stm32c5_full_test as test
test.main()This full script combines the base-peripheral and FDCAN coverage. It runs
LED, GPIO, ADC, PWM, I2C, IMU, battery, UART, RTC, LittleFS, and all 9 FDCAN
regression tests; tests requiring external wiring report SKIP when absent.
The user-side flash flow requires only the operating system's mass-storage copy operation; it does not require PlatformIO, ST-Link, J-Link, Python, or a local compiler.
The interactive test accepts help, status, all, uart, adc, pwm,
fdcan, i2c, led on|off|blink, io <pin> [count], imu, battery, and
exit. Every test reports PASS, FAIL, or SKIP and uses bounded waits.
- Header I2C1 is D4/PB7 SDA and D5/PB6 SCL.
- The onboard LSM6DS3TR-C is on I2C2, PB3/PB4, address
0x6A. - UART loopback connects PA9 to PA10; do not run it while relying on that same UART for the active REPL.
- PWM uses internal PA8/TIM1_CH1 and requires an oscilloscope, LED, or test point for waveform confirmation.
- FDCAN uses FDCAN2 on PB5/PB13 with PB14 as transceiver standby. Loopback needs no external bus; external testing needs a CAN transceiver and a correctly terminated 120-ohm bus.
- Battery testing requires a supported battery, BAT_EN on PE2, and the
battery sense input on PA4/ADC1_IN4. The script reports
SKIPwhen no voltage is present. - D8-D10 are GPIO-capable in this mapping; no hardware SPI capability is promised for those pins.
After a successful build, create the self-contained package with:
tools/xiao_stm32c5/package.sh 0.1.0The output is placed under dist/ and contains firmware/, tests/, a
standalone README, release notes, LICENSE, and SHA256SUMS.txt. A package
is not a formal release until the real-board TinyUF2, upgrade/rollback,
wrong-UF2 recovery, and ten-cycle acceptance records have been completed.
The MicroPython Zephyr port supports:
- REPL over UART console.
machine.Pinfor GPIO control with IRQ support.machine.I2C,machine.SPI, andmachine.PWMfor peripheral control.socketmodule for networking (IPv4/IPv6, if enabled).- Virtual filesystem with FAT or littlefs, backed by flash storage.
- Frozen modules for bundling Python code with the firmware.
Refer to the MicroPython Zephyr port documentation for more details.
- Kconfig Errors: If you see errors like
undefined symbol NET_SOCKETS_POSIX_NAMES, editlib/micropython/ports/zephyr/prj.confand remove or comment out the problematic line. - Board Not Found: Ensure the Xiao nRF54L15 board files are in
./boards/seeed/xiao_nrf54l15/. - Build Failures: Check
build/CMakeFiles/CMakeError.logfor detailed error messages. - Zephyr / NCS Version Mismatch: Use a Zephyr or NCS release that already supports your target SoC. For
nRF54LM20A, use Nordic nRF Connect SDK v3.3.0 or later. - Multiple Debug Probes Connected: Run
python -m pyocd list --probesand pass--probe <probe_id>to the nRF54LM20A flash script. - OpenOCD Flashing Issues on nRF54LM20A: If your system
openocdis too old or not built withnRF54LM20Asupport, rerun the script with--install-openocdto use the validated package managed by the script.
For further assistance, consult the Zephyr Documentation or the MicroPython community.