news 2026/9/19 23:06:56

Zephyr 中 NXP MCX-N5XX-EVK 双核开发板(MCXN547)上手指南:硬件、双核启动、烧录调试与外部 QSPI 启动

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Zephyr 中 NXP MCX-N5XX-EVK 双核开发板(MCXN547)上手指南:硬件、双核启动、烧录调试与外部 QSPI 启动
  • 操作系统
  • 嵌入式
  • 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
点击查看免费下载

MCX-N5XX-EVK 是 Zephyr 官方支持的 NXP 评估板,它与广为人知的 MCX-N9XX-EVK 板卡高度同源,核心差异仅在于搭载了 MCXN547 而非 MCXN947 芯片。本文以 mcx_n5xx_evk 板卡文档 为骨架,完整继承其指向的 mcx_n9xx_evk 操作指南,并结合板卡目录下的源码与配置逐项印证,帮助你掌握这块板卡的硬件特性、双核(CPU0/CPU1)启动机制、LinkServer/J-Link 调试探针配置、串口控制台设置以及从外部 FlexSPI/QSPI 闪存执行代码(XIP)的完整流程。

MCX-N5XX-EVK 是什么:与 MCX-N9XX-EVK 的同源关系

按照官方板卡文档的定位,MCX-N5XX-EVK 与 MCX-N9XX-EVK 非常相似(very similar),绝大多数使用、构建、烧录与调试流程完全一致,读者可以复用 MCX-N9XX-EVK 的操作说明;两者唯一的本质区别在于:

  • MCX-N5XX-EVK 搭载的是MCXN547(双核 Arm Cortex-M33);
  • MCX-N9XX-EVK 搭载的是MCXN947

这一关系在板卡源码中得到直接印证。board.yml 中同时注册了两个板卡目标,均归属 NXP 厂商,但 SoC 不同:mcx_n9xx_evk对应mcxn947(并额外提供qspi变体),而mcx_n5xx_evk对应mcxn547(当前未声明 qspi 变体,这一点在本文后半部分有进一步说明)。

同时,Kconfig.mcx_n5xx_evk 显示,选择该板卡会根据具体目标自动选择SOC_MCXN547_CPU0SOC_MCXN547_CPU1,并固定SOC_PART_NUMBER_MCXN547VDF;而两块板卡共享同一套公共 Kconfig(见 Kconfig.defconfig,例如默认使能ETH_DRIVER,启用 SD 协议栈时将主栈加大到 1536 字节),印证了"同源、仅 SoC 型号不同"的结论。

硬件特性

由于两块板卡几乎相同,MCX-N9XX-EVK 文档中列出的硬件特性可作为 MCX-N5XX-EVK 的参考(具体芯片规格请以 NXP 官方 MCXN547 数据手册为准):

  • 双核 Arm Cortex-M33 微控制器,主频 150 MHz;
  • 2 MB 双 bank 片上 Flash;
  • 512 KB RAM;
  • 通过 FlexSPI 外接 Quad SPI Flash;
  • USB 高速(Host/Device,片上 HS PHY)与 USB 全速(Host/Device,片上 FS PHY);
  • 10 路 LP Flexcomm,每路均可配置为 SPI、I2C、UART;
  • FlexCAN(含 FD)、I3C、SAI 音频接口;
  • 1 路带 QoS 的 Ethernet;
  • 板载 MCU-Link 调试器(CMSIS-DAP),支持功耗测量;
  • Arduino 兼容排针、FlexIO/LCD 排针、mikroBUS 与 M.2 接口。

针对 MCX-N5XX-EVK,板卡目标的 YAML 描述给出了可确认的资源量:mcx_n5xx_evk_mcxn547_cpu0.yaml 声明 CPU0 目标拥有320 KB RAM、2048 KB Flash,并支持tsi(触摸传感);mcx_n5xx_evk_mcxn547_cpu1.yaml 声明 CPU1 目标拥有64 KB RAM、200 KB Flash,支持dmagpiocrc

板卡目标(Targets)与双核启动机制

MCX-N5XX-EVK 在 Zephyr 中提供两个目标:

目标标识符说明RAMFlash可独立运行
mcx_n5xx_evk/mcxn547/cpu0主核320 KB2048 KB
mcx_n5xx_evk/mcxn547/cpu1从核64 KB200 KB否,需 CPU0 引导

默认配置只启用第一个核。CPU0 是唯一可以独立(standalone)运行的 target;CPU1 无法脱离 CPU0 单独工作,必须由 CPU0 先将其使能。

以 MCX-N9XX-EVK 为例的默认配置文件 mcx_n9xx_evk_mcxn947_cpu0_defconfig 就只使能了第一核;与之对应的 mcx_n5xx_evk_mcxn547_cpu0_defconfig 也遵循同样的思路——仅开启串口控制台(CONFIG_CONSOLE=yCONFIG_UART_CONSOLE=yCONFIG_SERIAL=yCONFIG_UART_INTERRUPT_DRIVEN=y)、GPIO,并额外启用了 ARM MPU(CONFIG_ARM_MPU=y)、硬件栈保护(CONFIG_HW_STACK_PROTECTION=y)以及 TrustZone-M(CONFIG_TRUSTED_EXECUTION_SECURE=y),可见 CPU0 承担了安全世界与系统初始化的职责。

启用 CPU1 的方法:创建一个 System Build(sysbuild)应用工程,并通过CONFIG_SECOND_CORE_MCUX配置启用第二核。Zephyr 中已内置若干开箱即用的双核示例可供参考:

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

其中mbox/mbox_data示例的运行机制在公共设备树 mcx_nx4x_evk_cpu0.dtsi 中也有迹可循:该文件将mbox控制器置为okay,并把zephyr,code-cpu1-partition指向slot1_partition,为第二核镜像预留了代码分区。

双核启动地址与内存布局

文档给出的双核 Flash 分区布局如下(源自 MCX-N9XX-EVK 文档;两块板卡同源,可作为参考,确切数值请以板卡实际分区为准):

CoreBoot Address说明
CPU00x10000000(1856 KB)主核代码分区
CPU10x101d0000(192 KB)从核代码分区
MemoryAddress(Size)说明
srama0x20000000(320 KB)CPU0 RAM
sramg0x20050000(64 KB)CPU1 RAM
sramh0x20060000(32 KB)共享内存

这些数值与源码一致:公共设备树 mcx_nx4x_evk_cpu0.dtsi 中sram0定义为0x20000000、大小 320 KB,与 CPU0 目标 YAML 中ram: 320对应;CPU1 的 64 KB 与 mcx_n5xx_evk_mcxn547_cpu1.yaml 中ram: 64对应。文档还特别提示,默认将 SRAM0–5 全部分配给 CPU0,应用层可以通过应用专属设备树重新划分 SRAM0–7,例如把 SRAM0–6 分配给 CPU0(sram0DT_SIZE_K相应调整为 384)而仅留 SRAM7 给 CPU1,此时需要同步修改 CPU1 的 SRAM 设置。

引脚连接与串口控制台

MCXN547 与 MCXN947 一样拥有 6 个 GPIO 控制器,以及可用于配置引脚功能的 pinmux 寄存器。文档给出的 UART 引脚分配如下:

引脚名功能用途
P0_PIO1_8UARTUART RX(cpu0)
P1_PIO1_9UARTUART TX(cpu0)
P4_PIO4_3UARTUART RX(cpu1)
P4_PIO4_2UARTUART TX(cpu1)

系统时钟

MCXN947 配置为以PLL0 输出 150 MHz作为系统时钟源;MCX-N5XX-EVK 由于 SoC 同属 MCX N 系列(N54x/N94x 同源),默认时钟配置方式一致。

串口与 Flexcomm

MCX-N9XX-EVK 的 SoC 提供 10 路 FLEXCOMM 串行接口,其中Flexcomm 4 被配置为控制台 UART。这一配置在 MCX-N5XX-EVK 的公共设备树中同样生效:mcx_nx4x_evk_cpu0.dtsi 的chosen节点将zephyr,consolezephyr,shell-uartzephyr,uart-mcumgr均指向flexcomm4_lpuart4,并在下方将flexcomm4flexcomm4_lpuart4置为okay。此外该chosen节点还指定了zephyr,sramzephyr,flashzephyr,flash-controller(指向fmu)、zephyr,code-partitionslot0_partition)、zephyr,canbusflexcan0)、zephyr,system-timer-companionlptmr0)、zephyr,edacerm0)与zephyr,crc

Ethernet

若要使用 Ethernet 网口运行网络示例,需将跳线JP13 拨到 2–3 脚。公共设备树中enetenet_mdiophy均默认为启用状态,且板级 Kconfig 默认打开ETH_DRIVER

编程与调试(Programming and Debugging)

MCX-N5XX-EVK 的构建、烧录与调试遵循 Zephyr 标准的应用构建与运行流程,无需特殊处理。

配置调试探针

烧录与调试都需要调试探针。这块板卡默认配置使用板载 MCU-Link(CMSIS-DAP)调试探针

使用 LinkServer(默认 runner)

LinkServer 是这块板卡的默认 runner,直接支持出厂默认的 MCU-Link 固件。若板载调试电路固件被改动过,需要按 MCU-Link CMSIS-DAP 板载调试探针的说明重新烧写默认固件——此时需将跳线JP24 短接,使板卡进入ISP 模式后再编程固件。

board.cmake 中为 MCX-N5XX-EVK 配置了 LinkServer 的设备参数(--device=MCXN547:MCX-N5XX-EVK,CPU1 时追加--core=cm33_core1),并针对 Linkserver 旧版本缺失 MCXN 安全内存区域的问题,通过--override补充了 0x30000000、0x30060000、0x50000000 等 RAM/外设区域的定义。

使用 J-Link

有两种方式:

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

两种方式下,使用west时都需通过-r jlink指定 jlink runner:

west flash -r jlink

对应地,board.cmake 也为 jlink runner 配置了设备名MCXN547_M33_0(CPU0)或MCXN547_M33_1(CPU1),并带--reset-after-load参数。

配置控制台

用 USB 线连接 PC 与板卡J5接口,然后使用任意串口终端(minicom、putty 等)连接,参数如下:

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

烧录示例(hello_world)

hello_world示例演示标准烧录流程(以 MCX-N9XX-EVK 目标为例,N5XX-EVK 将 board 换成mcx_n5xx_evk/mcxn547/cpu0即可):

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

(对应地,使用mcx_n5xx_evk/mcxn547/cpu0目标构建时,输出中的板卡标识将显示为对应目标名。)

构建双核镜像

双核示例以mcx_n9xx_evk/mcxn947/cpu0为目标运行。为cpu1构建的镜像会被放入 Flash,并在选中CONFIG_SECOND_CORE_MCUX时由第二核从 Flash 加载执行。

mbox_data示例演示双核构建(使用 System Build):

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

更完整的双核构建示例可参考ipc-static-vrings示例。

调试示例(hello_world)

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

打开串口终端,在调试器中单步执行,终端中应看到:

*** Booting Zephyr OS build vX.X.X *** Hello World! mcx_n9xx_evk/mcxn947/cpu0
双核镜像的调试技巧

对于双核构建,应先让从核进入一个循环(loop),然后才能附加调试器。具体手法可参考 NXP 应用笔记 AN13264 第 4.2.3 节——该笔记以 RT1170 为例,但同样的技巧也适用于本板卡。

使用 QSPI 变体从外部闪存启动(XIP)

MCX-N9XX-EVK 板卡带有外部 QSPI Flash,MCXN947 可以通过 FlexSPI 接口直接从此 Flash 启动并 XIP 执行代码。需要注意:从 board.yml 看,qspi变体目前仅针对mcx_n9xx_evk(mcxn947)声明,mcx_n5xx_evk(mcxn547)的 YAML 中暂未列出该变体。因此本节内容以 MCX-N9XX-EVK 为准,N5XX-EVK 用户可作为同源参考。

为外部 QSPI 编程 ROM 引导加载程序

默认情况下,MCXN947 的 ROM 引导加载程序从内部 Flash 启动。要让 MCU 改为从 FlexSPI 接口的外部存储启动,需要先按以下步骤对板卡进行编程:

  1. 断开任何占用 UART 串口的终端——下面的步骤需要用到该串口;
  2. 用 micro USB 线将主机与板卡左上角的 J5相连。这一步同时为板卡供电、连接调试探针,并接通blhost命令所需的 UART 串口;
  3. 使 MCU 进入 ISP 模式:按住板卡右下角的ISP 按钮 SW3,再按一下左下角的Reset 按钮 SW1后松开,MCU 即进入 ISP 模式,此时松开 ISP 按钮;
  4. 运行blhost命令(该命令通过 UART 串口与 ROM 引导加载程序通信;USB 是另一种可选途径)。

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 启动。

说明:以上流程的本质是通过 NXP ROM 引导加载程序工具编程Protected Flash Region(PFR)bootfromflexspi.bin与更详细的说明可从 NXP MCUXpresso SDK 的hello_world_qspi_xip示例配套资料中获得(详见 NXP 提供的 "Running code from external memory with MCX N94x" 技术说明)。

若需要恢复到从内部 Flash 启动,重复上述步骤编程 PFR,并将bootfromflexspi.bin替换为bootfromflash.bin即可。

使用 QSPI 变体构建、烧录与调试

PFR 编程为从 QSPI 启动后,即可按 Zephyr 常规流程配合 QSPI 板卡变体进行构建、烧录与调试。hello_world示例:

west build -b mcx_n9xx_evk//cpu0/qspi zephyr/samples/hello_world west flash

MCUboot 也可以配合 QSPI 变体使用:默认将 MCUboot 引导程序放在 QSPI Flash 的boot-partition中,与应用程序镜像一起;ROM 引导加载程序先启动并加载 QSPI 中的 MCUboot,再由 MCUboot 加载应用。使用 Sysbuild 构建并烧录blinky示例:

west build -b mcx_n9xx_evk//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

Shields 支持

板卡支持通过 Zephyr shields 扩展功能。当前文档确认在该板卡上测试过的 shield:

  • lcd_par_s035:支持 Display 接口。该 shield 使用MIPI_DBI接口,连接到片上FlexIO外设(公共设备树 mcx_nx4x_evk_cpu0.dtsi 中flexio0为启用状态,与之对应)。

进一步探索仓库

如果希望深入理解这块板卡在 Zephyr 中的完整实现,可以继续阅读以下仓库文件:

  • 板卡设备树与引脚复用:mcx_n5xx_evk.dtsi(使能micfil麦克风接口与otpc)、mcx_n5xx_evk-pinctrl.dtsi、mcx_nx4x_evk.dtsi、mcx_nx4x_evk_cpu0.dtsi;
  • 板卡初始化代码与 XIP 配置:board.c、xip/mcxn_flexspi_nor_config.c;
  • 板卡 Kconfig 与默认配置:Kconfig.mcx_n5xx_evk、mcx_n5xx_evk_mcxn547_cpu0_defconfig、mcx_n5xx_evk_mcxn547_cpu1_defconfig;
  • 烧录/调试 runner 参数:board.cmake。

常见问题排查

  • 串口无输出:确认 USB 线连接的是 J5 接口,终端参数为 115200-8-N-1,并在打开终端后按 RESET 复位。
  • J-Link 烧录失败:确认跳线设置正确——使用外部探针需短接 JP6 并连接 J11;使用板载电路刷 J-Link 固件需先通过 JP24 进入 ISP 模式。
  • LinkServer 无法识别设备:检查板载 MCU-Link 固件是否为出厂默认(CMSIS-DAP),必要时按 ISP 模式重新烧写。
  • QSPI 变体无法启动:确认已先完成 PFR 编程(blhost 写bootfromflexspi.bin)并复位退出 ISP 模式;恢复内部 Flash 启动则写回bootfromflash.bin
  • 双核应用从核不运行:确认构建时启用了CONFIG_SECOND_CORE_MCUX并使用 System Build,且烧录的是 CPU0 目标。

说明:板卡文档的排错章节还引用了 Zephyr 文档仓库公共的 Segger SystemView 使用说明与板卡文档公共页脚(见 boards/nxp/mcx_nx4x_evk/doc/mcx_n9xx_evk.rst 末尾的 include 指令),如需使用 Segger SystemView 进行可视化跟踪分析,可查阅对应公共文档章节。

  • 操作系统
  • 嵌入式
  • 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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/19 23:06:38

调试 FastMCP 天气工具卡住,把 Codex 的模型通道接入 TaoToken

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/19 23:03:01

MySQL CPU飙升排查与优化实战:从原理到命令全解析

数据库CPU被打满,应该是所有后端开发、DBA以及运维同学都经历过的噩梦。尤其是线上业务报障,看到告警群里“MySQL CPU使用率 > 95%”的红色消息,心跳都得漏半拍。很多人在这一步容易慌,上来就重启数据库或者直接kill掉一堆进程…

作者头像 李华
网站建设 2026/9/19 23:01:46

VS Code插件与环境配置实战:从编辑器到高效开发工作流

刚接触 VS Code 的人,往往会被它的插件市场吓一跳——搜一个 "Chinese" 能出来几十个结果,配一个 C/C 环境能搜到一堆教程但照着做还是报错。作为从 Sublime 转过来、用了好几年 VS Code 的深度用户,我想把平时真正沉淀下来、每天都…

作者头像 李华
网站建设 2026/9/19 23:01:17

Spring Boot教学辅助平台:权限设计、Redis签到与部署实战

简介:基于SpringBoot的教学辅助平台设计与实现完整文档,面向高校计算机相关专业学生、JavaWeb初学者及需要完成类似课题的毕业设计者,提供从需求分析到系统实现的整体参考。包内共1个docx文件,大小1.36MB,即该课题的完…

作者头像 李华