Zephyr 在 NXP MCX-N9XX-EVK 开发板上的完整实战指南:双核 MCXN947、QSPI XIP 启动与调试
2026/9/20 4:00:21 网站建设 项目流程
  • 操作系统
  • 嵌入式
  • RTOS
  • 物联网

【免费下载链接】zephyr

Primary 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
点击查看免费下载

导读

本文以 Zephyr 仓库中的 MCX-N9XX-EVK 板级文档 为主线,系统讲解在 NXP MCX-N9XX-EVK 评估板上使用 Zephyr RTOS 进行开发的全流程:从硬件资源认知、双核(CPU0/CPU1)镜像构建,到 LinkServer/J-Link 调试、QSPI 外部 Flash XIP 启动与 MCUboot 集成。读完本文,你将能够独立完成该板卡的工程配置、双核与外部 QSPI 启动方案的构建、烧录与调试,并理解其底层分区与内存映射的源码依据。

板卡概述

MCX-N9XX-EVK 是面向 MCX N94 / N54 系列 MCU 原型设计的一体化评估套件。板卡提供行业标准排针以访问 MCU 的 I/O,集成开放标准的串行接口,并板载一颗支持功耗测量的 MCU-Link 调试器。MCX N 系列属于高性能、低功耗微控制器,内置智能外设与硬件加速器,具备多任务处理能力与高效能表现。

核心硬件资源

  • 主控:MCX-N947 双核 Arm Cortex-M33,运行于 150 MHz
  • 片内 Flash:2 MB 双 Bank 结构
  • 片内 RAM:512 KB
  • 外部存储:经 FlexSPI 接口连接的外部 Quad SPI Flash(板载 Winbond W25Q64 等,见下文 QSPI 变体)
  • USB:高速 USB(Host/Device,片上 HS PHY)与全速 USB(Host/Device,片上 FS PHY)
  • 串行接口:10 路 LP Flexcomm,每路均可配置为 SPI、I2C、UART
  • 其他外设:支持 CAN FD 的 FlexCAN、I3C、SAI 音频接口
  • 以太网:1 路带 QoS 的 Ethernet
  • 调试器:板载 MCU-Link 调试器(CMSIS-DAP)
  • 扩展接口:Arduino Header、FlexIO/LCD Header、mikroBUS、M.2

支持的功能与 Shields

板卡支持的功能矩阵由 :zephyr:board-supported-hw:: 指令自动生成(对应源码可见 mcx_n9xx_evk_mcxn947_cpu0.yaml 等 YAML 定义),其中部分功能通过 Zephyr Shield 在板卡上完成了实测验证:

  • lcd_par_s035Shield:支持显示接口。该 Shield 使用 MIPI_DBI 接口,经板卡片上 FlexIO 外设连接。

双核架构与内存映射

MCX-N947 内含两个 Cortex-M33 核心。文档给出了双核 Flash 与 RAM 的划分方案,这是理解双核镜像构建的基础:

CoreBoot Address说明
CPU00x10000000 [1856K]主核(primary core)Flash 空间
CPU10x101d0000 [192K]从核(secondary core)Flash 空间
MemoryAddress [Size]说明
srama0x20000000 [320K]CPU0 的 RAM
sramg0x20050000 [64K]CPU1 的 RAM
sramh0x20060000 [32K]双核共享内存

从源码可以进一步印证这套划分:

  • mcx_n9xx_evk_mcxn947_cpu1.dts 中通过chosenzephyr,sram指向sramgzephyr,code-partition指向slot1_partition,并启用了mbox(邮箱)、sema42(信号量,domain-id = <4>)作为核间通信基础;
  • 对应地,CPU0 侧(mcx_n9xx_evk_mcxn947_cpu0.dtsi)将sema42配置为domain-id = <1>,形成双核间的互斥域。

可用 Target 与主从核关系

默认配置文件 mcx_n9xx_evk_mcxn947_cpu0_defconfig 只使能第一个核心。需要注意:

  • CPU0 是唯一可以独立运行的 target
  • CPU1 无法脱离 CPU0 自行工作,必须先由 CPU0 将其使能。

要使能 CPU1,需要创建 System Build 应用工程,并通过配置项CONFIG_SECOND_CORE_MCUX使能第二个核心。仓库中已提供若干启用双核的参考示例:

  • ipc-static-vrings
  • openamp
  • mbox
  • mbox_data

连接与 I/O

MCX-N947 SoC 共含 6 个 GPIO 控制器,并带有可用于配置引脚功能的 pinmux 寄存器。文档给出了板级默认的 UART 引脚分配(也是串口控制台与双核串口的基础):

NameFunctionUsage
P0_PIO1_8UARTUART RX cpu0
P1_PIO1_9UARTUART TX cpu0
P4_PIO4_3UARTUART RX cpu1
P4_PIO4_2UARTUART TX cpu1

系统时钟

MCX-N947 SoC 配置使用PLL0 运行于 150 MHz作为系统时钟源,与 Cortex-M33 双核的主频一致。

串口控制台

MCX-N9XX-EVK 的 SoC 提供 10 路 FLEXCOMM 接口用于串行通信,其中Flexcomm 4 被配置为控制台 UART。将 USB 线从 PC 连接到板卡J5接口,即可使用 minicom、putty 等任意串口终端,参数设置如下:

  • 波特率:115200
  • 数据位:8
  • 校验:无(None)
  • 停止位:1

即标准的115200 8N1串口配置。

以太网使用

若要使用以太网接口运行网络相关示例,需要将跳线JP13调整到2-3引脚位置。

编程与调试

构建与烧录应用的方式与其他 Zephyr 板卡一致(可参考 Zephyr 文档中的“构建应用”与“运行应用”章节)。

配置调试探针

该板卡默认使用板载MCU-Link CMSIS-DAP 调试探针进行烧录与调试。

使用 LinkServer(默认 Runner)

LinkServer 是本板卡的默认 runner,支持出厂默认的 MCU-Link 固件。如果默认板载调试电路固件被更改过,才需要按照 MCU-Link CMSIS-DAP 板载调试探针的说明重新刷写默认固件。进入ISP mode的方法是短接跳线 JP24

从 board.cmake 可以看到 LinkServer runner 的默认参数:设备为MCXN947:MCX-N9XX-EVK,CPU0 场景使用--core=cm33_core0,双核(CONFIG_SECOND_CORE_MCUX)场景使用--core=all,并为老版本 LinkServer 补充了安全区域(Secure Region)与片上外设区域的地址映射 override。

使用 J-Link

有两种方式:

  1. 更新板载调试电路固件:按照 MCU-Link J-Link 板载调试探针的说明,将板载调试电路刷写为 Segger J-Link 固件。刷写固件前同样需要短接跳线 JP24 进入ISP mode
  2. 外接 J-Link 探针:将外部调试探针连接到板卡的20 针 SWD 连接器(J11),同时短接跳线 JP6

两种方式下,均使用-r jlink选项让 west 使用 jlink runner 进行烧录:

west flash -r jlink

board.cmake 中对应配置的 J-Link 设备号为MCXN947_M33_0(CPU0)与MCXN947_M33_1(CPU1),并附加了--reset-after-load参数。

烧录示例(hello_world)

hello_world应用为例:

west build -b mcx_n9xx_evk/mcxn947/cpu0 samples/hello_world west flash

打开串口终端,按下板卡上的RESET 按钮复位,终端中应看到:

*** Booting Zephyr OS build vX.X.X *** Hello World! mcx_n9xx_evk/mcxn947/cpu0

调试示例(hello_world)

west build -b mcx_n9xx_evk/mcxn947/cpu0 samples/hello_world west debug

打开串口终端,在调试器中单步执行应用,终端中同样应看到上面的 Hello World 输出。

双核镜像的调试

对于双核构建,应先将从核(secondary core)置于一个循环中,然后再附加调试器。可参考 NXP 应用笔记 AN13264 第 4.2.3 节(该笔记面向 RT1170,但类似技巧同样适用于本板卡)。

构建双核镜像

双核示例统一使用mcx_n9xx_evk/mcxn947/cpu0target 运行:

  • mcx_n9xx_evk/mcxn947/cpu1构建的镜像,会在选择CONFIG_SECOND_CORE_MCUX后,从 Flash 加载并在第二颗核心上执行。

双核(System Build)构建的完整示例可参考ipc-static-vrings。这里以mbox_data应用为例:

west build -b mcx_n9xx_evk/mcxn947/cpu0 zephyr/samples/drivers/mbox_data --sysbuild west flash

注意使用了--sysbuild参数,由 Sysbuild 同时编排 CPU0 与 CPU1 两个镜像的构建与打包。

QSPI 板型:从外部 Flash 启动并执行(XIP)

MCX-N9XX-EVK 板卡包含一颗外部 QSPI Flash。MCXN947 可以通过 FlexSPI 接口直接从此 Flash 启动并执行代码(XIP,Execute in Place)。QSPI 板型(variant)使能了从 QSPI 构建和执行应用的方案,相关 Flash 配置源码位于 xip/mcxn_flexspi_nor_config.c 与 xip/mcxn_flexspi_nor_config.h。

为外部 QSPI 编程 ROM Bootloader

默认情况下,MCXN947 的 ROM 启动程序从内部 Flash 启动。若要让 MCU 从 FlexSPI 接口的外部存储器启动,需要先按以下步骤将板卡配置为从 QSPI 启动:

配置 ROM Bootloader 需要编程Protected Flash Region(PFR)。PFR 的编程使用 NXP 的 ROM Bootloader 工具完成(如blhost,配合bootfromflexspi.bin/bootfromflash.bin二进制文件)。以下步骤通过 UART 串口与 ROM Bootloader 通信,使用 USB 也是另一种可选方式。

  1. 断开 UART 串口上的任何终端程序——后续步骤要占用该串口。
  2. 将 micro USB 线连接到主机与板卡左上角的J5接口。该操作同时完成三件事:为板卡供电、连接调试探针、连接blhost命令所需的 UART 串口。
  3. 使 MCU 进入 ISP 模式:按住板卡右下角的 ISP 按钮 SW3,然后按下再松开左下角的 Reset 按钮 SW1,此时 MCU 已进入 ISP 模式,再松开 ISP 按钮。
  4. 运行blhost命令:

Ubuntu(假设 MCU 串口为/dev/ttyACM0):

blhost -t 2000 -p /dev/ttyACM0,115200 -j -- write-memory 0x01004000 bootfromflexspi.bin

Windows(将COMxx替换为实际的 COM 端口号):

blhost -t 2000 -p COMxx -j -- write-memory 0x01004000 bootfromflexspi.bin

编程成功时的输出类似:

$ blhost -t 2000 -p /dev/ttyACM0,115200 -j -- write-memory 0x01004000 bootfromflexspi.bin { "command": "write-memory", "response": [ 256 ], "status": { "description": "0 (0x0) Success.", "value": 0 } }
  1. SW1复位板卡退出 ISP 模式。至此,MCU 已准备好从 QSPI 启动。

如需恢复从内部 Flash 启动,重复以上步骤编程 PFR,并改烧写bootfromflash.bin文件即可。

使用 QSPI 板型构建、烧录与调试

PFR 配置为从 QSPI 启动后,即可按 Zephyr 常规流程,配合QSPI 板型进行构建、烧录与调试。QSPI 板型的 board target 为mcx_n9xx_evk/mcxn947/cpu0/qspi(注意路径中的双斜杠是板型层级分隔)。

hello_world示例:

west build -b mcx_n9xx_evk/mcxn947/cpu0/qspi zephyr/samples/hello_world west flash
QSPI 分区布局(源码依据)

在 mcx_n9xx_evk_mcxn947_cpu0_qspi.dts 中,QSPI 板型删除了内部 Flash 的默认分区(boot_partitionslot0_partitionslot1_partitionstorage_partition),并将zephyr,flashzephyr,flash-controller分别指向外部 QSPI Flash(w25q64jwtbjq,8 MB)与其控制器。新分区如下:

分区偏移地址大小用途
boot_partition0x0000000080 KBMCUboot(label: "mcuboot")
slot0_partition0x000140003 MB应用镜像槽 0(image-0)
slot1_partition0x003140003 MB应用镜像槽 1(image-1)
storage_partition0x006140001968 KB数据存储(storage)
与 MCUboot 配合使用

MCUboot 同样可以与 QSPI 板型配合使用。默认情况下,MCUboot Bootloader 被放置在 QSPI Flash 的boot-partition中,应用镜像紧随其后。启动链路为:ROM Bootloader 先启动并加载 QSPI 中的 MCUboot,再由 MCUboot 加载应用

使用 Sysbuild 构建并烧录blinky示例(同时使能 MCUboot):

west build -b mcx_n9xx_evk/mcxn947/cpu0/qspi zephyr/samples/basic/blinky --sysbuild -DSB_CONFIG_BOOTLOADER_MCUBOOT=y west flash

打开串口终端,用SW1复位板卡,控制台将打印:

*** Booting MCUboot vX.Y.Z *** *** Using Zephyr OS build vX.Y.Z *** I: Starting bootloader I: Image index: 0, Swap type: none I: Bootloader chainload address offset: 0x14000 I: Image version: v0.0.0 I: Jumping to the first image slot *** Booting Zephyr OS build vX.Y.Z *** LED state: OFF LED state: ON

其中Bootloader chainload address offset: 0x14000与 QSPI 分区表中 slot0 的偏移地址0x00014000完全对应,直观印证了分区表与启动流程的一致性。

疑难排查

  • 调试探针识别异常、SystemView 相关问题时,可参考 Zephyr 文档中 Segger ECC/SystemView 的通用排查章节;
  • 更多板卡层面的通用问题(文档修订、技术支持、故障排查建议),可查看 Zephyr 文档中的板卡通用结尾章节(board-footer)。

相关文件索引

为便于继续深入阅读源码,以下是与本文内容直接相关的仓库文件:

  • 板级文档:boards/nxp/mcx_nx4x_evk/doc/mcx_n9xx_evk.rst
  • CPU0 默认配置:mcx_n9xx_evk_mcxn947_cpu0_defconfig
  • CPU0 设备树:mcx_n9xx_evk_mcxn947_cpu0.dts、mcx_n9xx_evk_mcxn947_cpu0.dtsi
  • CPU1 设备树与配置:mcx_n9xx_evk_mcxn947_cpu1.dts、mcx_n9xx_evk_mcxn947_cpu1_defconfig
  • QSPI 板型:mcx_n9xx_evk_mcxn947_cpu0_qspi.dts、mcx_n9xx_evk_mcxn947_cpu0_qspi_defconfig、xip/mcxn_flexspi_nor_config.c
  • 板级公共设备树:mcx_n9xx_evk.dtsi、mcx_nx4x_evk.dtsi、mcx_n9xx_evk-pinctrl.dtsi
  • 调试 Runner 配置(LinkServer / J-Link / pyOCD):board.cmake
  • 板卡元数据:board.yml
  • 示例应用:samples/hello_worldsamples/drivers/mbox_datasamples/basic/blinky,以及ipc-static-vringsopenampmbox等双核参考示例

需要注意的是,本文中涉及的所有板卡引脚、跳线(JP13、JP24、JP6、J11、J5)、按键(SW1、SW3)与 PFR 编程流程,均以 MCX-N9XX-EVK 板卡实物的用户手册与原理图为准;blhost工具与bootfromflexspi.bin/bootfromflash.bin二进制文件来自 NXP MCUXpresso SDK 的hello_world_qspi_xip示例,使用前请确认版本匹配。

  • 操作系统
  • 嵌入式
  • RTOS
  • 物联网

【免费下载链接】zephyr

Primary 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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询