Zephyr RTOS 驱动 Arduino Nano Matter:基于 MGM240S(EFR32MG24)的 Matter/Thread 开发板完整指南
【免费下载链接】zephyrPrimary Git Repository for the Zephyr Project. Zephyr is a new generation, scalable, optimized, secure RTOS for multiple hardware architectures.项目地址: https://gitcode.com/GitHub_Trending/ze/zephyr
导读
Arduino Nano Matter 是 Arduino 与 Silicon Labs 合作的紧凑型开发板,将 Matter 智能家居协议带入创客生态,其核心是集成 802.15.4(Thread)与 Bluetooth LE 双模无线能力的 MGM240S SiP(SiP 内部为 EFR32MG24 SoC)。本指南以 Zephyr 仓库中该板卡的官方文档(boards/arduino/nano_matter/doc/index.rst)为主体,结合仓库内该板卡的设备树、引脚复用、构建配置与烧录脚本源码,完整讲解板卡硬件规格、引脚功能、Zephyr 支持特性、系统时钟配置、串口控制台,以及从零开始编译烧录hello_world的完整实战流程。读完本文,你将掌握在 Zephyr 环境下为 Arduino Nano Matter 配置、构建、烧录并调试应用的全套方法。
板卡概述:把 Matter 带进创客世界
Nano Matter 将 Arduino 一贯"让复杂技术变得平易近人"的理念,与 Silicon Labs 的 MGM240S 模块相结合,把 Matter 以市场上最小巧的形态之一带到创客领域。它同时启用 802.15.4(Thread)和 Bluetooth Low Energy 两种连接方式,配合友好的软件抽象层,可与 Matter 兼容设备快速交互、进行原型开发。
该板卡的软件侧由 Zephyr 原生支持,板级定义位于 boards/arduino/nano_matter/ 目录,其设备树模型声明为"arduino,arduino_nano_matter", "silabs,mgm240sd22vna"(见 arduino_nano_matter.dts),对应的 SoC 选择在 Kconfig.arduino_nano_matter 中通过select SOC_MGM240SD22VNA完成。
硬件规格
Nano Matter 采用紧凑高效的设计,由 Silicon Labs MGM240SD22VNA 模块驱动。该模块是针对电池供电和市电供电物联网设备在 2.4 GHz 网状网络场景优化过的高性能无线模组,核心规格如下:
- 主控模块:MGM240SD22VNA Mighty Gecko SiP(系统级封装)
- CPU 核心:ARM Cortex-M33(带 FPU)
- Flash:1536 kB
- RAM:256 kB
- 发射功率:最高 +20 dBm
- 工作频率:2.4 GHz
- 晶振:LFXO(32.768 kHz)与 HFXO(39 MHz)
- 板载资源:用户 RGB LED、用户按键
从 Zephyr 侧看,板卡在 arduino_nano_matter.yaml 中被声明为arch: arm的 MCU 类型板卡,Flash 1536 kB、RAM 256 kB,官方支持 bluetooth、gpio、uart、dma、watchdog、comparator 等设备类别,可用工具链为 zephyr 与 gnuarmemb。
Zephyr 支持的特性
在 Zephyr 中,该板卡启用了一系列与 Matter 场景密切相关的底层能力。查看设备树 arduino_nano_matter.dts 的chosen节点可以看到,板卡将以下关键设备指定为系统默认:
zephyr,console与zephyr,shell-uart、zephyr,uart-pipe均指向usart0,即串口控制台;zephyr,bt-hci = &bt_hci_silabs启用 Silicon Labs 蓝牙 HCI;zephyr,ieee802154 = &ieee802154启用 802.15.4(Thread 所需的 radio);zephyr,openthread-counter = &protimer为 OpenThread 提供计数器;zephyr,flash = &flash0与zephyr,code-partition = &slot0_partition指定固件分区。
默认 defconfig(arduino_nano_matter_defconfig)启用了CONFIG_ARM_MPU(Cortex-M33 的 MPU 内存保护)、CONFIG_CONSOLE、CONFIG_UART_CONSOLE、CONFIG_SERIAL与CONFIG_GPIO。此外 Kconfig.defconfig 还根据启用特性做了针对性调整:
- 启用 SWO 日志后端(
LOG_BACKEND_SWO)时,默认 SWO 频率为 875000 Hz; - 使用 RAIL(Silicon Labs 无线抽象层)或蓝牙(
BT)时自动开启 FPU; - 启用蓝牙时,主线程栈
MAIN_STACK_SIZE默认 2304 字节,若同时启用电源管理(PM)则提高到 3072 字节——这是在多协议无线场景下保证栈空间充足的重要调优。
引脚功能与 Arduino 兼容连接器
板载外设引脚
下表列出板卡的主要功能引脚。其中Name列为引脚名,例如 PA2 表示 PORTA 上的 2 号引脚,与板卡数据手册和 Arduino 文档中的命名一致。
| Name | Function | Usage |
|---|---|---|
| PC1 | GPIO | LED0 |
| PC2 | GPIO | LED1 |
| PC3 | GPIO | LED2 |
| PA0 | GPIO | Button |
| PC4 | USART0_TX | UART Console TX |
| PC5 | USART0_RX | UART Console RX |
上述定义与设备树完全对应:三颗 LED 在 arduino_nano_matter.dts 的gpio-leds节点中以GPIO_ACTIVE_LOW方式驱动(LED 低电平点亮);按键在gpio-keys节点中定义为 PA0、低电平有效,并映射输入事件码INPUT_KEY_0。同时aliases提供了led0/led1/led2、sw0、watchdog0、adc0等兼容别名,方便各类 sample 直接使用。
值得注意:RGB LED 还以 PWM 方式驱动,见pwm-leds节点(arduino_nano_matter.dts):红、绿、蓝三通道分别由timer0_pwm的 CC0/CC1/CC2 输出,周期 20 ms(PWM_MSEC(20)),极性取反,对应别名pwm-led0/1/2,可用于精确控制 LED 亮度与混色。
Arduino 兼容 GPIO 连接器
在 arduino_nano_matter_connector.dtsi 中定义了完整的 Arduino 兼容连接器映射(arduino,arduino_nano_matter-gpio),将 Arduino 标准编号 D0~D13、A0~A7 映射到 MCU 具体引脚:
| Arduino 编号 | MCU 引脚 | Arduino 编号 | MCU 引脚 |
|---|---|---|---|
| D0 | PA4 | D8 | PD3 |
| D1 | PA5 | D9 | PD4 |
| D2 | PA3 | D10 | PD5 |
| D3 | PC6 | D11 | PA9 |
| D4 | PC7 | D12 | PA8 |
| D5 | PC8 | D13 | PB4 |
| D6 | PC9 | A0~A7 | PB0 / PB2 / PB5 / PC0 / PA6 / PA7 / PB1 / PB3 |
| D7 | PD2 |
连接器同时把三组常用总线别名映射到具体外设:
arduino_nano_matter_serial: &eusart0:串口(默认映射到 EUSART0,引脚 PA4/PA5);arduino_nano_matter_spi: &eusart1:SPI(EUSART1,SCLK=PB4、TX=PA9、RX=PA8,片选为 PC7);arduino_nano_matter_i2c: &i2c0:I2C(SCL=PA7、SDA=PA6,开漏并启用上拉,见 arduino_nano_matter-pinctrl.dtsi)。
模拟输入通道
设备树中为 IADC(增量式模数转换器)配置了 8 个模拟通道(arduino_nano_matter.dts),对应 A0~A7。每个通道统一采用 12 位分辨率、ADC_GAIN_1增益、ADC_REF_VDD_1参考电压、默认采样时间,且zephyr,vref-mv = <3300>(3.3 V 参考)。具体通道与引脚对应关系如下:
- channel 0 → PB0(A0)、channel 1 → PB2(A1)、channel 2 → PB5(A2)
- channel 3 → PC0(A3)、channel 4 → PA6(A4)、channel 5 → PA7(A5)
- channel 6 → PB1(A6)、channel 7 → PB3(A7)
模拟引脚的 IADC 总线分配(ABUS_AEVEN0_IADC0、ABUS_AODD0_IADC0等)在 pinctrl 文件 arduino_nano_matter-pinctrl.dtsi 中统一声明。
系统时钟配置
MGM240S SiP 被配置为使用 DPLL 与 39 MHz 内部振荡器运行在78 MHz。这一配置在设备树中有完整的表达:
cpu0的clock-frequency = <78000000>(arduino_nano_matter.dts);- 39 MHz HFXO 使能,
ctune = <95>、精度 50 ppm; - 32.768 kHz LFXO 使能,
ctune = <44>、精度 50 ppm; hfrcodpll以 HFXO 为时钟源,目标频率DT_FREQ_M(78),并配置了 DPLL 倍频/分频参数(dpll-m = <1919>、dpll-n = <3839>)以及dpll-autorecover、dpll-edge = "fall"、dpll-lock = "phase"等锁定与恢复策略;- EM23/EM4 低功耗组、SYSRTC、看门狗(wdog0/wdog1)等低速外设时钟均取自 LFXO。
串口控制台
MGM240S SiP 具有一个 USART 和两个 EUSART。其中USART0 连接板载控制器(SAMD11),用作 Zephyr 控制台。在设备树中(arduino_nano_matter.dts),usart0配置为波特率 115200,引脚 TX=PC4、RX=PC5(见 arduino_nano_matter-pinctrl.dtsi)。
除 USART0 外,板卡还使能了两路 EUSART:
eusart0以silabs,eusart-uart兼容串口使用,115200 波特率,引脚 PA4/PA5(即 Arduino 连接器的 D0/D1 串口);eusart1以silabs,eusart-spi用作 SPI 主机,4 MHz 时钟,片选 PC7。
烧录与调试:借助板载 CMSIS-DAP
Arduino Nano Matter 板载一颗SAMD11 芯片运行 CMSIS-DAP,可通过 USB 口完成烧录、调试、日志输出等操作。这也意味着 Zephyr 的调试链路直接复用该板载调试器。
OpenOCD 支持说明
要正常烧录,需要一个包含MG24 Flash 支持的 OpenOCD 版本。在社区版 OpenOCD 尚未合入相关改动之前,可以使用 Arduino 官方捆绑的 OpenOCD,或安装 Arduino 维护的 OpenOCD 分支。执行烧录、调试等命令时,可能需要附加如下参数来指定自定义 OpenOCD 路径:
--openocd=/usr/local/bin/openocd --openocd-search=/usr/local/share/openocd/scripts/仓库为板卡提供了开箱即用的 OpenOCD 配置 boards/arduino/nano_matter/support/openocd.cfg:默认通过cmsis-dap接口(可用OPENOCD_INTERFACE环境变量覆盖)连接,传输选择 SWD,目标芯片配置为efm32s2_g23,并在 GDB 附加/分离时自动执行 halt/resume。此外 board.cmake 同时注册了 OpenOCD 与 J-Link 两种 runner,J-Link 使用--device=MGM240SD22VNA参数,方便你按手头调试器选择。
烧录 hello_world 示例
将 Arduino Nano Matter 通过 USB 口连接到主机后,主机上会出现一个 USB CDC ACM 串口设备,可用于查看烧录应用的日志输出。
以hello_world示例为例,执行标准 Zephyr 构建烧录流程:
west build -b arduino_nano_matter samples/hello_world west flash示例源码位于 samples/hello_world,板卡名称即arduino_nano_matter。烧录完成后,打开串口终端(minicom、putty 等)连接 USB CDC ACM 串口,复位板卡,即可在终端看到如下输出:
Hello World! arduino_nano_matterFlash 分区布局
设备树的flash0分区(arduino_nano_matter.dts)展示了 1536 kB Flash 的分配方式,这对理解 OTA 与 MCUboot 启动流程很有帮助:
- boot_partition(
0x0起,48 kB):保留给 bootloader(mcuboot,只读); - slot0_partition(
0xc000起,736 kB):主应用槽 image-0,即zephyr,code-partition指向的默认固件区域; - slot1_partition(
0xc4000起,736 kB):备用应用槽 image-1,用于 A/B 升级; - storage_partition(
0x17c000起,16 kB):位于 Flash 末尾的存储分区。
这种双槽位 + 独立存储分区的布局,为 Matter 设备常见的固件升级与设置持久化需求预留了完整的空间结构。
无线能力:Thread 与 Bluetooth LE
作为 Matter 设备,Nano Matter 的两条无线通路在设备树中均被显式启用:
&ieee802154(802.15.4 PHY)设为status = "okay",并关联hfxo(射频参考时钟)与sleep-clock = <&lfxo>(休眠时钟);&bt_hci_silabs启用 Silicon Labs 蓝牙 HCI 控制器;&protimer作为 OpenThread 协议栈的运行计数器。
由于同时支持 Thread 和 BLE,Kconfig.defconfig 在启用蓝牙时自动调大主线程栈,正是为了容纳双协议栈的运行时开销。结合 Zephyr 的 Matter(通过 OpenThread/蓝牙子系统)能力,你可以直接在 samples 与 subsys/bluetooth、subsys/net 中寻找 Thread/Matter 相关的示例进一步实践。
小结
Arduino Nano Matter 在 Zephyr 中获得了一等公民级的板级支持:78 MHz 的 MGM240S(EFR32MG24)双模无线、完善的 pinctrl 与外设映射、开箱即用的 CMSIS-DAP 烧录链路,以及为 Thread/BLE/Matter 场景调优过的默认配置。无论你是想快速跑通hello_world,还是在此基础上开发 Matter 终端设备原型,都可以以本文为起点,结合 boards/arduino/nano_matter/ 目录下的设备树与配置逐项展开探索。
【免费下载链接】zephyrPrimary Git Repository for the Zephyr Project. Zephyr is a new generation, scalable, optimized, secure RTOS for multiple hardware architectures.项目地址: https://gitcode.com/GitHub_Trending/ze/zephyr
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考