Matter para XIAO nRF54LM20A

Introducción
Impulsada por el SoC nRF54LM20A, la Serie XIAO nRF54LM20A es compatible con Bluetooth LE, Matter, Thread, Zigbee y protocolos propietarios de 2,4 GHz, ofreciendo una velocidad de datos máxima de 4 Mbps ideal para escenarios de baja latencia.
Este tutorial utiliza dos placas XIAO nRF54LM20A para verificar la creación de red Matter: una actúa como router de borde conectado a Home Assistant, y la otra funciona como un dispositivo Matter que se une a la red Thread para mostrar datos simulados de temperatura y humedad en el panel de Home Assistant.
Gracias al autor @tutoduino por las ideas del WiKi
Este tutorial se basa en VS Code y la extensión nRF Connect. Si eres nuevo en ellas, puedes consultar XIAO nRF54LM20A nRFConnect SDK Usage
Qué es Matter
Matter (anteriormente CHIP) es un estándar universal de capa de aplicación desarrollado por la Connectivity Standards Alliance (CSA).
- Interoperabilidad entre proveedores sobre redes IP (Wi-Fi/Ethernet/Thread)
- Tipos de dispositivos estandarizados (por ejemplo, luces, cerraduras de puertas, termostatos)
- Puesta en servicio segura mediante códigos QR/NFC
- Cifrado de extremo a extremo con Distributed Compliance Ledger (DCL)
Qué es OpenThread
OpenThread es una implementación de código abierto del protocolo de red Thread. Crea redes malladas de bajo consumo y seguras para dispositivos IoT utilizando la tecnología de radio IEEE 802.15.4. Características clave:
- Compatibilidad integrada con IPv6 (6LoWPAN)
- Topología de red autoorganizada
- Cifrado AES-128 para todas las comunicaciones
- Compatible con dispositivos tan pequeños como bombillas o sensores
Cuál es la relación entre Matter y Thread
Gracias al autor@tutoduino por una explicación muy detallada de este punto, ¡citando a partir de ella!
Después de esta breve introducción a Matter y Thread, ahora entiendes que Thread y Matter tienen propósitos diferentes y operan en distintas capas de la pila tecnológica. Para recapitular:
Thread:
- Thread es un protocolo de red mallada inalámbrica de bajo consumo diseñado para dispositivos del hogar conectado. Proporciona una forma fiable y segura para que los dispositivos se comuniquen entre sí y con Internet.
- Thread crea una red local que permite que los dispositivos se comuniquen entre sí incluso si se cae la conexión a Internet.
Matter:
- Matter es un protocolo de capa de aplicación que se sitúa sobre protocolos de red como Thread, Wi-Fi y Ethernet. Su objetivo es simplificar y unificar el ecosistema del hogar inteligente garantizando que los dispositivos de distintos fabricantes puedan funcionar juntos sin problemas.
- Matter define cómo se comunican e interactúan los dispositivos a nivel de aplicación, centrándose en la interoperabilidad, la seguridad y la facilidad de uso.
Conexión entre Thread y Matter:
- Matter puede utilizar Thread como uno de sus protocolos de red subyacentes. Esto significa que los dispositivos que usan el protocolo Matter pueden comunicarse a través de una red Thread.
- La combinación de Matter y Thread permite un ecosistema de hogar inteligente robusto, seguro e interoperable donde los dispositivos pueden comunicarse localmente y de forma eficiente.

Introducción a Home Assistant
Home Assistant es una potente plataforma de automatización del hogar de código abierto que te permite controlar y supervisar tus dispositivos de hogar inteligente desde una única interfaz unificada. Actúa como el concentrador central de tu hogar inteligente, lo que te permite automatizar rutinas, supervisar sensores y crear un espacio vital más inteligente.

Preparación de hardware
Se requieren dos XIAO nRF54LM20A Sense para la preparación del hardware.
| Home Assistant Green | SeeedStudio XIAO nRF54LM20A × 2 |
|---|---|
![]() | ![]() |
Antena Bluetooth
Esta placa utiliza una antena Bluetooth externa. Para garantizar una mejor calidad de la señal Bluetooth y mejorar tu experiencia de uso de Bluetooth, se recomienda instalar una antena Bluetooth. El método de conexión se muestra a continuación:

Conectar a HomeAssistant mediante Matter
Instalar el complemento
Ve a Settings -> Apps y selecciona Install app para añadir el complemento.
- Añade Open Thread Border Router y modifica su configuración.
- Ve a Settings -> Apps, selecciona Install app para añadir el complemento, luego busca Open Thread Border Router y completa la instalación.

- Añade Matter Server

Configurar el enrutamiento Thread
Sigue los pasos a continuación para flashear un XIAO nRF54LM20A como coprocesador para emular un dispositivo router de borde.
También se pueden utilizar dispositivos de enrutamiento Thread como Connect ZBT-1, Connect ZBT-2 o Home Assistant Yellow.
Flashear el XIAO nRF54LM20A con firmware de coprocesador RCP
Este tutorial se basa en VS Code y la extensión nRF Connect. Si eres nuevo en ellas, puedes consultar XIAO nRF54LM20A nRFConnect SDK Usage
- Selecciona Create a new application, elige copy a sample, busca Coprocessor y crea el proyecto.

- Añade y modifica los archivos de configuración del árbol de dispositivos en la carpeta boards. Desactiva la configuración I2C utilizada por el PMIC para evitar conflictos y establece la velocidad en baudios de UART20 en 1000000.
Ruta del archivo: ~/boards:
- xiao_nrf54lm20a_nrf54lm20a_cpuapp.overlay.
&uart20 {
current-speed = <1000000>;
status = "okay";
hw-flow-control;
};
/ {
chosen {
zephyr,ot-uart = &uart20;
};
};
&pmic_i2c {
status = "disabled";
};
- xiao_nrf54lm20a_nrf54lm20a_cpuapp.conf.
CONFIG_SPI_NOR=n
# Increase Main and shell stack sizes to avoid stack overflow
# while using CRACEN
CONFIG_MAIN_STACK_SIZE=2048
CONFIG_I2C_GPIO=n
CONFIG_MFD_NPM13XX=n
CONFIG_NPM13XX_CHARGER=n
- Compila y habilita la configuración.
- Configura y compila el proyecto.

- Flashea el firmware usando
west flash.

- Para detectar el dispositivo en Home Assistant, conecta el XIAO nRF54LM20A flasheado con el firmware de coprocesador a Home Assistant Green mediante USB-C.
- Abre la tienda de complementos, localiza Open Thread Border Router y configúralo. Verás el dispositivo llamado XIAO nRF54LM20A; configura la velocidad en baudios y otros parámetros, luego guarda la configuración.

- Selecciona Start en la pestaña Info.

- Puedes comprobar el estado de la configuración en el Log: la configuración se ha realizado correctamente como se muestra en la figura siguiente.

- Ve a Settings -> Thread para descubrir el dispositivo, que normalmente se llama
ha-thread-c6c8.

Configurar el dispositivo Matter
- Elige Create a new application, selecciona copy a sample, busca Matter-Template y crea el proyecto.

- Modifica los archivos del device tree y los archivos de configuración.
-
Debido a las diferencias de hardware entre la XIAO nRF54LM20A y la placa de evaluación oficial de Nordic, es necesario revisar los archivos del device tree y de configuración. La placa de evaluación oficial está equipada con un chip de memoria flash externo MX25R64, mientras que la XIAO nRF54LM20A utiliza un PY25Q64; se deben realizar los ajustes correspondientes.
-
Los archivos que se deben añadir se enumeran a continuación:

Ruta del archivo: ~/boards:
- xiao_nrf54lm20a_nrf54lm20a_cpuapp_internal.overlay
- xiao_nrf54lm20a_nrf54lm20a_cpuapp.overlay
xiao_nrf54lm20a_nrf54lm20a_cpuapp_internal.overlay
/*
* Copyright (c) 2025 Nordic Semiconductor ASA
*
* SPDX-License-Identifier: LicenseRef-Nordic-5-Clause
*/
/ {
aliases {
/* Use watchdog wdt31 as the application watchdog */
watchdog0 = &wdt31;
};
};
&py25q64 {
status = "disabled";
};
&wdt31 {
status = "okay";
};
xiao_nrf54lm20a_nrf54lm20a_cpuapp.overlay
/*
* Copyright (c) 2025 Nordic Semiconductor ASA
*
* SPDX-License-Identifier: LicenseRef-Nordic-5-Clause
*/
/ {
chosen {
nordic,pm-ext-flash = &py25q64;
};
aliases {
/* Use watchdog wdt31 as the application watchdog */
watchdog0 = &wdt31;
};
};
&py25q64 {
status = "okay";
};
&wdt31 {
status = "okay";
};
Ruta del archivo: ~/sysbuild/mcuboot/boards:
xiao_nrf54lm20a_nrf54lm20a_cpuapp_internal.conf
#
# Copyright (c) 2025 Nordic Semiconductor ASA
#
# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause
#
CONFIG_HW_STACK_PROTECTION=n
CONFIG_BOOT_WATCHDOG_FEED=n
# Disable all debug features
CONFIG_ASSERT_VERBOSE=n
CONFIG_ASSERT_NO_FILE_INFO=y
CONFIG_PRINTK=n
# Bootloader size optimization to fit into 28 KB partition.
# These options can be safely disabled because in this configuration,
# the secondary slot resides in the internal RRAM, so features
# needed to handle the external flash are not needed.
CONFIG_SPI_NOR=n
CONFIG_SPI=n
# Increase the maximum number of sectors to 512 to fit the big image size (> 1024 kB).
CONFIG_BOOT_MAX_IMG_SECTORS=512
# Currently, without tickless kernel, the SYSCOUNTER value after the software
# reset is not set properly and due to that the first system interrupt is not called
# in the proper time - the SYSCOUNTER value is set to the value from before
# reset + 1. Hence, the reboot time increases more and more.
# To avoid it enable tickless kernel for mcuboot.
CONFIG_TICKLESS_KERNEL=y
xiao_nrf54lm20a_nrf54lm20a_cpuapp_internal.overlay
/*
* Copyright (c) 2025 Nordic Semiconductor ASA
*
* SPDX-License-Identifier: LicenseRef-Nordic-5-Clause
*/
/* Disable the external flash, as it's not needed
* for the configuration with secondary slot residing
* in the internal RRAM.
*/
&py25q64 {
status = "disabled";
};
xiao_nrf54lm20a_nrf54lm20a_cpuapp.conf
#
# Copyright (c) 2025 Nordic Semiconductor ASA
#
# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause
#
CONFIG_HW_STACK_PROTECTION=n
CONFIG_BOOT_WATCHDOG_FEED=n
# XIAO nRF54LM20A uses SPI NOR external flash (PY25Q64)
CONFIG_GPIO=y
CONFIG_SPI=y
CONFIG_SPI_NOR=y
CONFIG_SPI_NOR_SFDP_DEVICETREE=y
CONFIG_SPI_NOR_FLASH_LAYOUT_PAGE_SIZE=4096
# Increase the maximum number of sectors to 512 to fit the big image size (> 1024 kB).
CONFIG_BOOT_MAX_IMG_SECTORS=512
# Currently, without tickless kernel, the SYSCOUNTER value after the software
# reset is not set properly and due to that the first system interrupt is not called
# in the proper time - the SYSCOUNTER value is set to the value from before
# reset + 1. Hence, the reboot time increases more and more.
# To avoid it enable tickless kernel for mcuboot.
CONFIG_TICKLESS_KERNEL=y
xiao_nrf54lm20a_nrf54lm20a_cpuapp.overlay
/*
* Copyright (c) 2025 Nordic Semiconductor ASA
*
* SPDX-License-Identifier: LicenseRef-Nordic-5-Clause
*/
/ {
chosen {
nordic,pm-ext-flash = &py25q64;
};
};
&py25q64 {
status = "okay";
};
Ruta del proyecto ~/ :
pm_static_xiao_nrf54lm20a_nrf54lm20a_cpuapp_internal.yml
mcuboot:
address: 0x0
region: flash_primary
size: 0xA000
mcuboot_pad:
address: 0xA000
region: flash_primary
size: 0x800
app:
address: 0xA800
region: flash_primary
size: 0x125800
mcuboot_primary:
address: 0xA000
orig_span: &id001
- app
- mcuboot_pad
region: flash_primary
size: 0x126000
span: *id001
mcuboot_primary_app:
address: 0xA800
orig_span: &id002
- app
region: flash_primary
size: 0x125800
span: *id002
mcuboot_secondary:
address: 0x130000
orig_span: &id003
- mcuboot_secondary_pad
- mcuboot_secondary_app
region: flash_primary
size: 0xC0000
span: *id003
mcuboot_secondary_pad:
region: flash_primary
address: 0x130000
size: 0x800
# Compression rate 34.75%
mcuboot_secondary_app:
region: flash_primary
address: 0x130800
size: 0xBF800
factory_data:
address: 0x1F0000
region: flash_primary
size: 0x1000
settings_storage:
address: 0x1F1000
region: flash_primary
size: 0xC000
pm_static_xiao_nrf54lm20a_nrf54lm20a_cpuapp.yml
mcuboot:
address: 0x0
region: flash_primary
size: 0xD000
mcuboot_pad:
address: 0xD000
region: flash_primary
size: 0x800
app:
address: 0xD800
region: flash_primary
size: 0x1E2800
mcuboot_primary:
address: 0xD000
orig_span: &id001
- app
- mcuboot_pad
region: flash_primary
size: 0x1E3000
span: *id001
mcuboot_primary_app:
address: 0xD800
orig_span: &id002
- app
region: flash_primary
size: 0x1E2800
span: *id002
factory_data:
address: 0x1F0000
region: flash_primary
size: 0x1000
settings_storage:
address: 0x1F1000
region: flash_primary
size: 0xC000
mcuboot_secondary:
address: 0x0
orig_span: &id003
- mcuboot_secondary_pad
- mcuboot_secondary_app
region: external_flash
size: 0x1E3000
span: *id003
mcuboot_secondary_pad:
region: external_flash
address: 0x0
size: 0x800
mcuboot_secondary_app:
region: external_flash
address: 0x800
size: 0x1E2800
external_flash:
address: 0x1E3000
size: 0x5DB000
device: PY25Q64
region: external_flash
Descripción del propósito de los archivos añadidos
| File | Description |
|---|---|
1. Archivos Overlay de la placa (boards/)Overlays del device tree a nivel de aplicación para la XIAO nRF54LM20A. | |
xiao_nrf54lm20a_nrf54lm20a_cpuapp.overlay | Variante con Flash externa: habilita la memoria Flash SPI NOR PY25Q64 como ranura secundaria OTA; |
xiao_nrf54lm20a_nrf54lm20a_cpuapp_internal.overlay | Variante con Flash interna: deshabilita el PY25Q64 (reduce el coste de la BOM y el consumo de energía); |
2. Archivos de configuración de MCUboot (sysbuild/mcuboot/boards/)MCUboot es una imagen Zephyr independiente que requiere sus propios archivos Kconfig y overlays de device tree. | |
xiao_nrf54lm20a_nrf54lm20a_cpuapp.conf | Flash externa — Kconfig: habilita los controladores SPI/SPI_NOR para el acceso al PY25Q64; |
xiao_nrf54lm20a_nrf54lm20a_cpuapp.overlay | Flash externa — Overlay DTS: habilita el PY25Q64 como |
xiao_nrf54lm20a_nrf54lm20a_cpuapp_internal.conf | Flash interna — Kconfig: deshabilita SPI/SPI_NOR; |
xiao_nrf54lm20a_nrf54lm20a_cpuapp_internal.overlay | Flash interna — Superposición DTS: Desactiva PY25Q64, garantizando que MCUboot use solo la Flash interna. |
3. Archivos de partición estática (pm_static_*.yml)Tablas de particiones estáticas para el Partition Manager, que definen la disposición completa de la Flash para MCUboot, APP, OTA, datos de fábrica y ajustes. | |
pm_static_xiao_nrf54lm20a_nrf54lm20a_cpuapp.yml | Variante con Flash externa: |
pm_static_xiao_nrf54lm20a_nrf54lm20a_cpuapp_internal.yml | Variante con Flash interna: |
Flashear y descargar al dispositivo
- Continúa con la configuración de la compilación.

- Selecciona otro XIAO nRF54LM20A como dispositivo de destino, inicia OpenTerminal y flashea el firmware usando el comando
west flash.

Conecta el dispositivo Matter usando la app de Home Assistant.
- Conecta el dispositivo Matter y genera el código QR del dispositivo.
- En el entorno de desarrollo NCS, abre el nRF Serial Terminal.

- Aparecerá una lista de puertos serie en la parte superior de la interfaz; selecciona el puerto serie correspondiente a XIAO nRF54LM20A.

- La información del dispositivo Matter y el enlace del código QR de emparejamiento se mostrarán a través de los registros serie.

- Toca directamente el enlace del código QR o copia el enlace en un navegador web por separado.

- Descarga la app de Home Assistant.
- La inclusión del dispositivo Matter en Home Assistant se completa mediante la aplicación móvil; escanea el código QR proporcionado para descargar la app.

- Ve a los ajustes para añadir el dispositivo Matter y luego escanea el código QR generado en el navegador para finalizar el emparejamiento.
![]() | ![]() | ![]() | ![]() | ![]() |
- La información del dispositivo Matter se puede ver en el panel del navegador de Home Assistant.
![]() | ![]() | ![]() |
- Añade el dispositivo al panel.

- Los datos en tiempo real del dispositivo Matter se mostrarán en el panel.

Resumen
Siguiendo los procedimientos anteriores, hemos configurado una red Matter over Thread usando dos módulos XIAO nRF54LM20A y conectado correctamente la red a Home Assistant. El protocolo Matter admite el acceso a una gama más amplia de tipos de sensores, mientras que la demostración anterior solo simula la adquisición de datos de temperatura y humedad. Al integrar otros dispositivos sensores, verifica si existen Clusters coincidentes definidos dentro de la especificación Matter. Para más detalles, consulta la documentación oficial en Home Assistant Matter.
Soporte técnico y debate sobre el producto
Gracias por elegir nuestros productos. Estamos aquí para ofrecerte diferentes tipos de soporte y garantizar que tu experiencia con nuestros productos sea lo más fluida posible. Ofrecemos varios canales de comunicación para adaptarnos a diferentes preferencias y necesidades.









