- 操作系统
- 嵌入式
- RTOS
- 物联网
【免费下载链接】zephyr
Primary Git Repository for the Zephyr Project. Zephyr is a new generation, scalable, optimized, secure RTOS for multiple hardware architectures.
FRDM-KW41Z 是 NXP 基于 Kinetis W 系列 KW41Z/31Z/21Z 无线 SoC 的 Freedom 开发套件,片上集成 ARM Cortex-M0+ 处理器与支持 BLE v4.2、IEEE 802.15.4、Thread 和 Generic FSK 的 2.4 GHz 收发器。本文以 boards/nxp/frdm_kw41z/doc/index.rst 为核心,完整梳理该板卡在 Zephyr 中的硬件特性、引脚连接、系统时钟、串口控制台配置,以及基于 pyOCD 与 J-Link 的烧录调试全流程,并结合仓库中的设备树、pinctrl、Kconfig 与构建脚本源码,深入讲解板级支持背后的实现细节。
板卡概述
FRDM-KW41Z 开发套件基于 Kinetis W 系列 KW41Z/31Z/21Z(KW41Z)家族,核心为 ARM Cortex-M0+ 处理器,并集成了高度优化的 2.4 GHz 收发器,支持:
- Bluetooth Smart / Bluetooth Low Energy(BLE)v4.2
- Generic FSK
- IEEE 802.15.4
- Thread
该套件包含两块 Freedom 板卡,既可作为独立开发板使用,也可作为 Shield 连接到主机处理器。FRDM-KW41Z 板卡与 Arduino R3 引脚布局兼容,可扩展大量生态板卡。
板卡的 2.4 GHz 射频前端采用高灵敏度 PCB F 型天线,并可通过 SMA 连接器旁路以接入外部天线进行测试。此外还提供多种供电方式、按压/电容触摸按键、开关、LED 以及板载传感器,适合用于 BLE、802.15.4/Thread 无线应用的原型验证与开发。
硬件特性
根据板卡文档与 board.yml 的定义,FRDM-KW41Z 的核心硬件特性包括:
- 双模式用途:可配置为 Host(主机)或 Shield(子板)模式连接主机处理器
- 完整 DC-DC 支持:支持 Buck、Boost、Bypass 全部 DC-DC 配置
- PCB 倒 F 型天线(inverted F-type antenna),可旁路以切换 SMA 连接
- SMA 射频连接器,便于连接外部天线与测试仪器
- 射频法规认证(RF regulatory certified)
- 串行 Flash,用于 OTA 固件升级
- 板载 NXP FXOS8700CQ 数字传感器:3D 加速度计(±2g / ±4g / ±8g)+ 3D 磁力计
- OpenSDA 与 JTAG 调试接口
从设备树 frdm_kw41z.dts 可以看到板卡被标识为model = "NXP Freedom KW41Z board",compatible 为"nxp,kw41z", "nxp,mkw41z4",对应的 SoC 型号为 MKW41Z512VHT4(见 Kconfig.frdm_kw41z)。
支持的硬件特性
Zephyr 的板卡定义文件 frdm_kw41z.yaml 明确列出了该板卡当前支持的驱动能力:
| 特性 | 说明 |
|---|---|
| adc | 板载 ADC0,通过 PTB2 引出 ADC0 通道 3 |
| arduino_gpio | Arduino R3 排针 GPIO 映射 |
| counter | 计数/定时器支持 |
| flash | 板载 512 KB 内部 Flash(含分区) |
| gpio | GPIOA / GPIOC 两组控制器 |
| i2c | I2C1 接口,连接 FXOS8700 |
| spi | SPI0 接口 |
| pwm | TPM0 / TPM2 定时器 PWM 输出 |
板卡资源方面:RAM 96 KB,Flash 512 KB;支持的编译工具链为zephyr与gnuarmemb。值得注意的是,testing段设置了ignore_tags: [bluetooth],即自动化测试默认跳过蓝牙相关标签用例(KW41Z 的蓝牙协议栈与射频行为需在真实射频环境下验证)。
连接与 IO 引脚
KW41Z SoC 拥有三对 pinmux/GPIO 控制器,但在 FRDM-KW41Z 板卡上目前仅启用了其中两对:PORTA/GPIOA与PORTC/GPIOC。这一点既体现在文档的说明中,也可以在 frdm_kw41z.dts 中看到——设备树仅对&gpioa与&gpioc设置了status = "okay"。
以下是板卡文档给出的关键引脚连接表:
| 引脚 | 功能 | 用途 |
|---|---|---|
| PTC1 | GPIO | 红色 LED / FXOS8700 INT1 |
| PTA19 | GPIO | 绿色 LED |
| PTA18 | GPIO | 蓝色 LED |
| PTB2 | ADC | ADC0 通道 3 |
| PTC2 | I2C1_SCL | I2C / FXOS8700 |
| PTC3 | I2C1_SDA | I2C / FXOS8700 |
| PTC4 | GPIO | SW3 按键 |
| PTC5 | GPIO | SW4 按键 |
| PTC6 | LPUART0_RX | UART 控制台 |
| PTC7 | LPUART0_TX | UART 控制台 |
| PTC16 | SPI0_SCK | SPI |
| PTC17 | SPI0_SOUT | SPI |
| PTC18 | SPI0_SIN | SPI |
| PTC19 | SPI0_PCS0 | SPI |
设备树中的引脚定义
在源码层面,上述引脚关系由 frdm_kw41z.dts 中的节点精确定义:
- LED:
red_led使用&gpioc 1(PTC1)、green_led使用&gpioa 19(PTA19)、blue_led使用&gpioa 18(PTA18),均为GPIO_ACTIVE_LOW有效电平。 - PWM LED:三色 LED 还可通过
tpm2通道 0/1 与tpm0通道 2 输出 PWM 调光,周期 20 ms、极性反转(PWM_MSEC(20) PWM_POLARITY_INVERTED)。 - 按键:
user_button_3(SW3)接&gpioc 4、user_button_4(SW4)接&gpioc 5,均为GPIO_ACTIVE_LOW,并映射为 Zephyr 输入子系统事件码INPUT_KEY_0/INPUT_KEY_1。 - Arduino R3 排针:通过
arduino_header节点(compatible = "arduino-header-r3")将 A1~A4、D0~D15 映射到对应 GPIO 控制器,例如 D0/D1 对应 PTC6/PTC7(与 UART 控制台复用),D14/D15 对应 PTC3/PTC2(与 I2C1 复用)。A0 无法复用为 GPIO,因此映射表从 A1 开始。 - FXOS8700 传感器:挂在 I2C1 总线上,器件地址
0x1f,中断引脚 INT1 连接到 PTC1,与红色 LED 复用。
pinctrl 引脚复用配置
引脚复用功能在自动生成的 frdm_kw41z-pinctrl.dtsi 中集中定义(由gen_board_pinctrl.py依据 MKW41Z512VHT4 的信号配置文件生成),各外设的默认复用如下:
adc0_default:ADC0_SE3_PTB2,低速驱动、慢斜率i2c1_default:I2C1_SCL_PTC2、I2C1_SDA_PTC3,低速驱动、慢斜率lpuart0_default:TX 为UART0_TX_PTC7(快速斜率)、RX 为UART0_RX_PTC6(慢斜率)spi0_default:SCK/SIN/SOUT/PCS0 分别对应 PTC16/PTC18/PTC17/PTC19,快速斜率tpm0_default:TPM0_CH2_PTC1tmp2_default:TPM2_CH0_PTA18、TPM2_CH1_PTA19
系统时钟
KW41Z SoC 在 FRDM-KW41Z 板卡上使用板上 32 MHz 外部晶振,配合片内 FLL(Frequency-Locked Loop)生成40 MHz 系统时钟。
在源码中可以找到对应的三处配置:
- frdm_kw41z_defconfig 中设置
CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC=40000000与CONFIG_OSC_EXTERNAL=y,明确 40 MHz 系统时钟频率并使用外部振荡器。 - Kconfig.defconfig 中定义
OSC_XTAL0_FREQ默认 32000000(即 32 MHz 晶振)、MCG_FRDIV默认 5、MCG_FCRDIV默认 0,这些是 MCG 模块 FLL 分频参数,决定从 32 MHz 晶振倍频到 40 MHz 的具体路径。 - 设备树 frdm_kw41z.dts 中
&sim节点设置pllfll-select = <KINETIS_SIM_PLLFLLSEL_MCGPLLCLK>(选择 MCG PLL/FLL 时钟作为核心时钟源)、er32k-select = <KINETIS_SIM_ER32KSEL_OSC32KCLK>(32 kHz 外部参考时钟选择 OSC32KCLK)。
SoC 层面,nxp_kw41z.dtsi 定义了 MCG(nxp,kinetis-mcg)、OSC(nxp,kw41z-osc)、SIM(nxp,kinetis-sim)等时钟控制器节点,以及 96 KB SRAM(地址 0x20000000)与 512 KB Flash(擦除块 2 KB、写块 4 字节)。核心时钟经sim的core_clk(1 分频)与flash_clk(2 分频)两个固定分频时钟输出。
串口(Serial Port)
KW41Z SoC 仅有一路 UART(LPUART0),在 FRDM-KW41Z 板卡上用作控制台输出。
设备树中chosen节点做了明确绑定:
zephyr,console = &lpuart0; zephyr,shell-uart = &lpuart0; zephyr,uart-mcumgr = &lpuart0;同时lpuart0节点配置了current-speed = <115200>的默认波特率,配合 frdm_kw41z_defconfig 中的CONFIG_CONSOLE=y、CONFIG_UART_CONSOLE=y、CONFIG_SERIAL=y,即可在串口终端上看到内核日志与 shell 提示符。
编程与调试
FRDM-KW41Z 板卡的烧录与调试依赖调试探针(debug probe),板载的 OpenSDA 微控制器承担这一角色。板卡默认配置为使用OpenSDA DAPLink探针,底层通过 pyOCD 驱动。
构建与烧录应用程序的方式与其他 Zephyr 板卡一致(参见samples/hello_world等示例的构建流程)。
配置调试探针
方案一:OpenSDA DAPLink(推荐,默认)
- 安装 pyOCD 调试主机工具,并确保其位于系统搜索路径中。
- 按照 OpenSDA DAPLink 探针的使用说明,将
OpenSDA DAPLink FRDM-KW41Z Firmware固件烧录到板载 OpenSDA 微控制器。
在构建系统中,pyOCD 作为默认 runner 的配置位于 board.cmake:
board_runner_args(pyocd "--target=kw41z4") include(${ZEPHYR_BASE}/boards/common/pyocd.board.cmake)方案二:OpenSDA J-Link
- 安装 J-Link 调试主机工具,并确保其位于系统搜索路径中。
- 按照 OpenSDA J-Link 探针的使用说明,将
OpenSDA J-Link FRDM-KW41Z Firmware固件烧录到板载 OpenSDA 微控制器。 - 构建时通过
west build参数覆盖默认 runner(从 pyOCD 切换为 J-Link):
west build -b frdm_kw41z samples/hello_world \ -DBOARD_FLASH_RUNNER=jlink -DBOARD_DEBUG_RUNNER=jlinkJ-Link 的器件参数同样在 board.cmake 中预置:board_runner_args(jlink "--device=MKW41Z512xxx4"),并include(${ZEPHYR_BASE}/boards/common/jlink.board.cmake)。
配置串口控制台
无论选择哪种调试探针,都使用板载 OpenSDA 微控制器作为USB 转串口适配器:
- 使用 USB 线缆将 PC 连接到板卡J6接口。
- 使用任意串口终端软件(minicom、PuTTY 等),采用以下参数连接:
| 参数 | 值 |
|---|---|
| 波特率(Speed) | 115200 |
| 数据位(Data) | 8 |
| 校验位(Parity) | None |
| 停止位(Stop bits) | 1 |
即常见的115200-8-N-1配置。
烧录示例
以hello_world示例为例,构建并烧录:
west build -b frdm_kw41z samples/hello_world west flash打开串口终端,按下板卡上的SW1按键复位板卡,即可在终端中看到如下启动输出:
***** Booting Zephyr OS v1.14.0-rc1 ***** Hello World! frdm_kw41z说明:上述输出中的版本号
v1.14.0-rc1来自板卡文档的示例输出。在当前仓库版本下实际输出中的 Zephyr 版本号会不同,但Hello World! frdm_kw41z的输出格式保持一致。
调试示例
同样以hello_world为例,启动调试会话:
west build -b frdm_kw41z samples/hello_world west debug打开串口终端,在调试器中逐步执行(step through)应用程序,终端中同样可以看到启动信息与Hello World! frdm_kw41z输出。
从源码看板级支持的关键细节
分区布局
frdm_kw41z.dts 中为 512 KB Flash 定义了 MCUboot 兼容的分区布局:
slot0_partition:地址 0x00000000,大小 0x70000(448 KB),作为固件镜像主分区image-0storage_partition:地址 0x00070000,大小 0x10000(64 KB),作为存储分区
chosen节点中的zephyr,code-partition = &slot0_partition表明应用镜像默认链接到 slot0 分区,这与板卡文档提到的"串行 Flash 用于 OTA 固件升级"相互印证——配合 MCUboot 即可实现无线升级。
Kconfig 板级默认值
Kconfig.defconfig 还包含若干值得关注的默认配置:
FXOS8700_DRDY_INT1默认开启(依赖FXOS8700_TRIGGER),即 FXOS8700 使用 INT1(PTC1)作为数据就绪中断触发源WDT_DISABLE_AT_BOOT默认开启,启动时禁用看门狗- ADC 参考电压选择
ADC_MCUX_ADC16_VREF_ALTERNATE(交替参考电压)
板卡注册信息
board.yml 中socs: mkw41z4与 Kconfig.frdm_kw41z 中select SOC_MKW41Z4、select SOC_PART_NUMBER_MKW41Z512VHT4共同将板卡与具体的 SoC 型号绑定。SoC 层的完整外设定义(MCG/OSC/SIM 时钟、FTFA Flash 控制器、I2C0/I2C1、LPUART0、SPI0/SPI1、TPM0/1/2、ADC0、TRNG 随机数发生器、IEEE802154 射频控制器等)见 nxp_kw41z.dtsi,其中 TRNG 被绑定为zephyr,entropy,FTFA 被绑定为zephyr,flash-controller,IEEE802154 射频控制器则被板级设备树使能并绑定为zephyr,ieee802154。
开发注意事项
- GPIO 控制器范围:SoC 虽有三组 pinmux/GPIO,但板卡仅启用 PORTA 与 PORTC,涉及 PORTB 的引脚(如 ADC 的 PTB2、Arduino 排针的 A1~A4 模拟引脚映射)不能作为普通 GPIO 使用——这正是 Arduino 映射注释中"A0 cannot be muxed as gpio"的原因。
- 射频测试:默认使用 PCB F 天线;如需进行传导测试,可旁路天线走 SMA 连接。
- 控制台复用:UART 控制台引脚(PTC6/PTC7)与 Arduino D0/D1 复用,使用时注意避免冲突。
- 调试探针固件:pyOCD 与 J-Link 两种方案需要烧录不同的 OpenSDA 固件,切换前请确认板载 OpenSDA 固件与所选 runner 匹配。
- 操作系统
- 嵌入式
- RTOS
- 物联网
【免费下载链接】zephyr
Primary Git Repository for the Zephyr Project. Zephyr is a new generation, scalable, optimized, secure RTOS for multiple hardware architectures.
相关推荐
Zephyr RTOS 实战:NXP FRDM-MCXA346 开发板支持与开发指南
Zephyr RTOS 实战:NXP FRDM MCXA346 开发板支持与开发指南 FRDM MCXA346 是 NXP 面向 MCX A27X 系列 MCU
操作系统嵌入式RTOS物联网Zephyr 板级支持指南:NXP FRDM-K32L2B3 开发板评估与实战
Zephyr 板级支持指南:NXP FRDM K32L2B3 开发板评估与实战 导读 本文以 Zephyr 仓库中 FRDM K32L2B3 板级文档 http
操作系统嵌入式RTOS物联网NXP FRDM-K64F 开发板 Zephyr RTOS 支持详解:Kinetis K 系列超集板卡的烧录、调试与引脚配置指南
NXP FRDM K64F 开发板 Zephyr RTOS 支持详解:Kinetis K 系列超集板卡的烧录、调试与引脚配置指南 FRDM K64F 是 NXP
操作系统嵌入式RTOS物联网
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考