- 操作系统
- 嵌入式
- RTOS
- 物联网
【免费下载链接】zephyr
Primary Git Repository for the Zephyr Project. Zephyr is a new generation, scalable, optimized, secure RTOS for multiple hardware architectures.
TWR-KV58F220M 是 NXP 面向电机控制与功率转换场景推出的 Kinetis KV5x 系列开发板,其主控 MKV58F1M0VLQ24 基于 Arm Cortex-M7 内核,主频最高 240 MHz。本文以仓库中的官方板级文档 boards/nxp/twr_kv58f220m/doc/index.rst 为主线,结合该板的设备树、Kconfig、默认配置与 FXOS8700 传感器驱动源码,完整讲解在 Zephyr 下配置系统时钟、串口控制台、六轴传感器触发模式,以及通过 OpenSDA(仅限烧录)与外部 J-Link(调试)完成构建、烧录与调试的完整流程。读完本文,你将能够在 Zephyr 环境中为 TWR-KV58F220M 独立构建并运行 hello_world,并掌握该板在调试手段上的特殊限制与应对方案。
TWR-KV58F220M 开发板实拍图
概述
TWR-KV58F220M 是面向 NXP Kinetis KV5x 系列 32 位 MCU 平台设计的开发板。板载的 OpenSDAv2 串口与调试适配器运行开源引导程序,可提供串口通信、固件烧录与运行控制调试三类能力——不过如后文所述,在 KV58 这颗芯片上,OpenSDA 目前仅能用于烧录与串口,无法承担调试功能。
在 Zephyr 仓库中,该板支持信息集中在 boards/nxp/twr_kv58f220m/twr_kv58f220m.yaml,其声明的关键元数据如下:
identifier:twr_kv58f220march:arm(Arm Cortex-M7)- 可用工具链:
zephyr(Zephyr SDK)、gnuarmemb(GNU Arm Embedded) - 内存声明:
ram: 128(KB)、flash: 1024(KB) supported:flash、i2c- SoC:
mkv58f24(见 boards/nxp/twr_kv58f220m/board.yml)
硬件资源
TWR-KV58F220M 的板级硬件特性如下:
- 主控MKV58F1M0VLQ24:最高 240 MHz,1 MB Flash,256 KB RAM,144 引脚 LQFP(Low profile Quad Flat Package)封装
- 支持 1.8 V 或 3.3 V 两种 MCU 工作电压
- 板载FXOS8700CQ六轴数字加速度计与磁力计
- 四颗用户 LED
- 四个用户按键
- 电位器
- 两个通用 TWRPI 扩展排针
- 电机排针(Motor pin header,面向电机控制应用)
上述引脚与器件的实际连接关系,可以从板级设备树 boards/nxp/twr_kv58f220m/twr_kv58f220m.dts 中确认,例如:
- 四颗 LED 均挂在 GPIOE 上:红色
led_0(D4,PTE11)、绿色led_1(D3,PTE12)、蓝色led_2(D2,PTE29)、橙色led_3(D1,PTE30),并通过aliases映射为led0~led3; - 四个按键分别为 SW2(PTA4)、SW3(PTE4)、SW4(PTB5)、SW5(PTB4),均为
GPIO_ACTIVE_LOW,映射为sw0~sw3,其中sw0同时被用作mcuboot-button0; aliases中将accel0与magn0均指向 FXOS8700 节点。
支持的板级特性
Zephyr 使用板级 YAML 声明该板支持的子系统,TWR-KV58F220M 当前声明支持flash与i2c。从 boards/nxp/twr_kv58f220m/twr_kv58f220m_defconfig 可以看到板级默认启用的功能:
CONFIG_SERIAL=y CONFIG_CONSOLE=y CONFIG_UART_CONSOLE=y CONFIG_UART_INTERRUPT_DRIVEN=y CONFIG_GPIO=y CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC=237500000 # Enable MPU CONFIG_ARM_MPU=y CONFIG_HW_STACK_PROTECTION=y即默认启用串口与控制台、GPIO,并开启 ARM MPU 与硬件栈保护(CONFIG_HW_STACK_PROTECTION),为运行时的内存安全提供基础保障。
系统时钟
KV58 SoC 在 Zephyr 中配置为使用板载50 MHz 外部晶振,配合片上 PLL 生成237.5 MHz的系统时钟。这一配置在板级 Kconfig boards/nxp/twr_kv58f220m/Kconfig.defconfig 中体现:
config OSC_XTAL0_FREQ default 50000000 # 外部晶振 50 MHz config MCG_PRDIV0 default 0x3 # MCG 预分频 config MCG_VDIV0 default 0x16 # MCG VCO 倍频 config MCG_FCRDIV default 1时钟链路(晶振 → MCG PLL → 内核/总线时钟)的最终结果对应CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC=237500000。设备树中 twr_kv58f220m.dts 的 SIM 节点配置也与之呼应,将 PLL/FLL 时钟源选择为KINETIS_SIM_PLLFLLSEL_MCGPLLCLK。若在 KV5x 系列其他芯片上移植,可参考同目录下 SoC 级配置 soc/nxp/kinetis/kv5x/Kconfig.defconfig,其中声明了中断数量NUM_IRQS=121以及 Flash 选项寄存器KINETIS_FLASH_CONFIG_FOPT=0xFB(禁用 NMI 引脚/中断)。
串口(Serial Port)
KV58 SoC 内置六个 UART,本板仅将UART0配置为控制台使用,其余 UART 未使用。UART0 的引脚复用与波特率在设备树中定义:
- twr_kv58f220m.dts:
uart0节点status = "okay",current-speed = <115200>,引用uart0_default引脚组; - twr_kv58f220m-pinctrl.dtsi:
UART0_RX_PTB0、UART0_TX_PTB1,配置为低驱动强度、快速压摆率。
设备树chosen节点中将zephyr,console、zephyr,shell-uart、zephyr,uart-pipe、zephyr,uart-mcumgr全部指向&uart0,因此控制台、Shell 与 MCUmgr 默认共用 UART0(115200 8N1)。
加速度计与磁力计(FXOS8700)
板载的 FXOS8700CQ 六轴传感器挂接在 I2C1 总线上,设备树配置见 twr_kv58f220m.dts:
&i2c1 { status = "okay"; pinctrl-0 = <&i2c1_default>; pinctrl-names = "default"; fxos8700: fxos8700@1c { compatible = "nxp,fxos8700"; reg = <0x1c>; int1-gpios = <&gpioc 18 GPIO_ACTIVE_LOW>; int2-gpios = <&gpioc 19 GPIO_ACTIVE_LOW>; }; };I2C1 的引脚为I2C1_SCL_PTD8/I2C1_SDA_PTD9(开漏、快速压摆率,见 twr_kv58f220m-pinctrl.dtsi),传感器地址为0x1c,中断引脚INT1(PTC18)与INT2(PTC19)已预留在设备树中。
默认轮询模式与中断触发模式
官方文档明确指出:
- 默认情况下,TWR-KV58F220M 仅支持**轮询(polling)**方式读取 FXOS8700 的加速度与磁力计数据(
CONFIG_FXOS8700_TRIGGER_NONE=y); - 若要支持**触发(中断)**模式,必须:
- 在跳线J2与J9上放置短路帽(shunts);
- 在 Kconfig 中启用触发选项,二选一:
CONFIG_FXOS8700_TRIGGER_GLOBAL_THREAD=y或CONFIG_FXOS8700_TRIGGER_OWN_THREAD=y。
驱动侧的实现印证了这一配置逻辑:FXOS8700 驱动源码 drivers/sensor/nxp/fxos8700/fxos8700_trigger.c 中,CONFIG_FXOS8700_TRIGGER_OWN_THREAD会为该传感器创建独立线程(fxos8700_thread_main),而CONFIG_FXOS8700_TRIGGER_GLOBAL_THREAD则把触发处理挂到 Zephyr 全局工作队列;CONFIG_FXOS8700_TRIGGER还会将 fxos8700_trigger.c 编入构建。
仓库中的两个示例也给出了现成的触发配置:
- 加速度触发示例 samples/sensor/accel_trig/boards/twr_kv58f220m.conf:
CONFIG_FXOS8700_TRIGGER_OWN_THREAD=y CONFIG_FXOS8700_MODE_ACCEL=y - 磁力计触发示例 samples/sensor/magn_trig/boards/twr_kv58f220m.conf:
CONFIG_FXOS8700_TRIGGER_OWN_THREAD=y
编程与调试
构建与烧录应用的方式与 Zephyr 常规流程一致(可参考 samples/hello_world 与 Zephyr 应用构建文档)。以下以samples/hello_world为例。
配置调试探针(Debug Probe)
这是 TWR-KV58F220M 最需要注意的硬件特性,官方文档给出三点关键结论:
- OpenSDA 探针目前只能用于烧录:将编译好的固件复制到 USB 大容量存储设备即可完成烧录;
- OpenSDA 不能用于调试:因为 pyOCD 不支持 KV58 这一目标器件;
- OpenSDA 的 J-Link 固件(截至 2019-06-03 版本)同样不可用:其针对 KV58 的 Flash 算法疑似存在缺陷。
因此,调试目标必须通过连接在 JTAG 排针 J13 上的外部 J-Link 调试探针来完成。使用前请安装 Zephyr 的 J-Link 主机工具(jlink-debug-host-tools),并确保其位于搜索路径中。
Zephyr 侧的 J-Link 烧录配置在 boards/nxp/twr_kv58f220m/board.cmake 中声明:
board_runner_args(jlink "--device=MKV58F1M0xxx24") include(${ZEPHYR_BASE}/boards/common/jlink.board.cmake)即烧录器 runner 使用 J-Link,目标器件型号为MKV58F1M0xxx24。构建 hello_world:
west build -b twr_kv58f220m samples/hello_world配置控制台(Console)
尽管 OpenSDA 探针无法用于调试,但仍可作为USB 转串口适配器使用:
- 用 USB 线连接 PC 与板上的J22接口;
- 在串口终端(minicom、putty 等)中使用以下参数:
- 波特率(Speed):115200
- 数据位(Data):8 bits
- 校验(Parity):None
- 停止位(Stop bits):1
烧录(Flashing)
OpenSDA 作为 USB 大容量存储设备时,烧录流程为:先构建固件,再将其复制到 OpenSDA 虚拟出的 U 盘中。对应 Zephyr 命令:
west build -b twr_kv58f220m samples/hello_world west flash烧录完成后,打开串口终端,按下SW1 复位按键,终端中应看到如下输出:
***** Booting Zephyr OS v1.14.0-xxx-gxxxxxxxxxxxx ***** Hello World! twr_kv58f220m(启动横幅中的具体版本号会随当前仓库版本变化,示例中的v1.14.0为板级文档写作时的参考版本。)
调试(Debugging)
使用外部 J-Link(连接 JTAG 排针 J13)时,调试命令如下:
west build -b twr_kv58f220m samples/hello_world west debug打开串口终端,在调试器中单步执行应用,终端中同样应输出:
***** Booting Zephyr OS v1.14.0-xxx-gxxxxxxxxxxxx ***** Hello World! twr_kv58f220mFlash 分区布局(补充)
除官方文档内容外,从设备树 twr_kv58f220m.dts 可以看到该板为 MCUboot 准备的 Flash 分区布局(Flash 扇区大小为 8 KB,分区大小均按扇区对齐):
| 分区 | 起始地址 | 大小 | 用途 |
|---|---|---|---|
boot_partition | 0x00000000 | 64 KB | MCUboot 引导程序(只读) |
slot0_partition | 0x00010000 | 424 KB | 固件镜像槽 0(image-0) |
slot1_partition | 0x0007a000 | 424 KB | 固件镜像槽 1(image-1) |
storage_partition | 0x000e4000 | 112 KB | 存储区 |
chosen节点的zephyr,code-partition = &slot0_partition指向镜像槽 0,使能 MCUboot 双槽 A/B 升级时可直接复用该布局。
小结
TWR-KV58F220M 在 Zephyr 中的支持要点可归纳为:KV58 SoC 以 50 MHz 外部晶振经 PLL 得到 237.5 MHz 系统时钟;UART0(PTB0/PTB1,115200 8N1)作为默认控制台与 Shell;FXOS8700 默认仅支持轮询,启用中断触发需同时放置 J2/J9 跳线帽并选择CONFIG_FXOS8700_TRIGGER_GLOBAL_THREAD或CONFIG_FXOS8700_TRIGGER_OWN_THREAD;烧录依赖 OpenSDA 的 USB 大容量存储模式,调试则必须借助 J13 上的外部 J-Link。围绕这些要点,结合 twr_kv58f220m.dts、twr_kv58f220m_defconfig 与 fxos8700_trigger.c 等仓库文件,即可快速上手该板的应用开发与调试。
- 操作系统
- 嵌入式
- RTOS
- 物联网
【免费下载链接】zephyr
Primary Git Repository for the Zephyr Project. Zephyr is a new generation, scalable, optimized, secure RTOS for multiple hardware architectures.
相关推荐
Zephyr 下 NXP FRDM-MCXA577 开发板实战指南:硬件特性、设备树配置与烧录调试
Zephyr 下 NXP FRDM MCXA577 开发板实战指南:硬件特性、设备树配置与烧录调试 导读 本文以 Zephyr RTOS 仓库中的 FRDM M
操作系统嵌入式RTOS物联网Zephyr 板级支持实战:NXP FRDM-K82F(Kinetis K82)的硬件解析与构建、烧录、调试全流程
Zephyr 板级支持实战:NXP FRDM K82F(Kinetis K82)的硬件解析与构建、烧录、调试全流程 FRDM K82F 是 NXP 面向 Kin
操作系统嵌入式RTOS物联网Zephyr 中 NXP LPCXpresso55S36 开发板实战指南:硬件特性、引脚映射、时钟配置与烧录调试
Zephyr 中 NXP LPCXpresso55S36 开发板实战指南:硬件特性、引脚映射、时钟配置与烧录调试 本文围绕 Zephyr 内核仓库中 board
操作系统嵌入式RTOS物联网
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考