Zephyr 在 NXP i.MX RT700-EVK 上的多核开发指南:MIMXRT798S 双 M33 + HiFi DSP + NPU 平台详解
2026/9/20 1:52:45 网站建设 项目流程

Zephyr 在 NXP i.MX RT700-EVK 上的多核开发指南:MIMXRT798S 双 M33 + HiFi DSP + NPU 平台详解

【免费下载链接】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

本文以 Zephyr 仓库中 MIMXRT700-EVK 板级文档 为骨架,结合该板在 Zephyr 中的设备树、defconfig 与构建脚本实现,系统讲解 i.MX RT700 跨界 MCU 的双子系统异构架构、多核固件构建与启动流程、调试与烧录方法、SEGGER RTT 日志、SD 卡与显示模块配置,以及两种板级 Flash revision 的使用。读完本文,你将掌握如何为 MIMXRT700-EVK 的主核(CM33 CPU0)、从核(CM33 CPU1)以及 HiFi1/HiFi4 DSP 核构建 Zephyr 应用,并完成烧录与调试。

硬件概览:双计算子系统的异构架构

i.MX RT700 采用了全新的 CPU 架构,由高性能主计算子系统(Main Compute Subsystem)、始终在线的感知计算子系统(Sense Compute Subsystem)以及若干专用协处理器组成:

  • 主计算子系统:主核为 Arm Cortex-M33,最高 325 MHz,内置 Cadence Tensilica HiFi 4 DSP,用于高负载的 DSP 与音频处理任务。
  • 感知计算子系统:包含第二个 Arm Cortex-M33(最高 250 MHz)与集成的 Cadence Tensilica HiFi 1 DSP。感知子系统负责低功耗的传感任务,这消除了对外部 sensor hub 的需求,从而降低了系统设计复杂度、占用面积与 BOM 成本。

其中 HiFi 4 是基于 VLIW(Very Long Instruction Word)架构的高性能 DSP 核,每个指令周期可处理最多 8 个 32×16 MAC 运算,可用于卸载音频、图像处理等高强度数值任务,同时支持定点与浮点运算。此外,i.MX RT700 还集成了 NXP 的eIQ Neutron NPU,配合 eIQ 机器学习软件开发环境使用。

硬件资源清单

资源规格
主计算子系统Arm Cortex-M33 最高 325 MHz;HiFi 4 DSP 最高 325 MHz;eIQ Neutron NPU 最高 325 MHz
感知计算子系统Arm Cortex-M33 最高 250 MHz;HiFi 1 DSP 最高 250 MHz
片上 SRAM7.5 MB
外部存储接口3 个 xSPI 接口,支持最宽 16 bit 的外部存储器,最高 250 MHz DDR
USBeUSB(集成 PHY);高速 host/device 控制器(片上 PHY)
存储卡2 个 SD/eMMC 接口,其中一个支持 eMMC 5.0 与 HS400/DDR 操作
音频数字麦克风接口,最多 8 通道
串行外设UART / I²C / I3C / SPI / HSPI / SAI
图形2.5D GPU(矢量图形加速与帧缓冲压缩)、完整 OpenVG 1.1 支持、最高 720p@60 FPS(从片上 SRAM 输出)
显示LCD 接口 + MIPI DSI
图像集成 JPEG 与 PNG 解码
摄像头CSI 8/10/16-bit 并行接口(通过 FlexIO)
其他EZH-V(基于 RISC-V 核,带 SIMD/DSP 扩展指令)

从板级设备树 mimxrt700_evk_mimxrt798s_cm33_cpu0.dts 可以看到,这些外设资源在 Zephyr 中的映射方式:

  • 外部 Flash:XSPI0 上的 MX25UM51345G(64 MB Octal NOR),划分为 mcuboot(128 KB)、image-0(7 MB)、image-1(7 MB)与 storage 分区;
  • PSRAM:XSPI1/XSPI2 各挂载 32 MB 的w958d6nbkx5l/w958d6nbkx4lPSRAM 存储区,供大帧缓冲等场景使用;
  • 音频flexcomm2_lpi2c2上挂载 Wolfson WM8962 音频编解码器;
  • 电源管理flexcomm15上挂载 NXP PCA9422 PMIC(含充电器与 4 路 BUCK、4 路 LDO 调节器,均通过 regulator 驱动使能);
  • 摄像头flexio_camera节点实现了 FlexIO 驱动的 DVP 8/10/16-bit 摄像头接口(J53,20-pin 连接器)。

支持的功能特性

NXP 将 MIMXRT700-EVK 视为 i.MX RT7xx 系列的superset 板(超集板),即该板覆盖了 RT7xx 家族的全部能力。它同时也是 NXP 在 Zephyr 中Full Platform Support(全平台支持)的焦点板,NXP 会优先在此板上启用 Zephyr 的新特性,再向整个 RT7xx 家族推广。因此,该板的状态可以视为 RT7xx 家族在 Zephyr 中支持水平的"风向标"。

连接与 IO 引脚表

MIMXRT798 SoC 使用 IOCON 寄存器来配置引脚功能。下表列出了 MIMXRT700-EVK 上常用的引脚连接:

名称功能用途
PIO0_6I2CI2C SDA
PIO0_7I2CI2C SCL
PIO0_31UART0UART RX
PIO1_0UART0UART TX
PIO0_18GPIO绿色 LED(GREEN LED)
PIO0_9GPIOSW5 用户按键
PIO8_14UART19UART TX
PIO8_15UART19UART RX
PIO3_0SPISPI MOSI
PIO3_1SPISPI SCK
PIO3_2SPISPI MISO
PIO3_3SPISPI SSEL

对照设备树可以看到更完整的板载资源定义:绿色 LED 与蓝色 LED 分别对应gpio0的 18 与 17 号引脚,SW5、SW7 两个用户按键(低电平有效)分别映射到gpio09 与gpio13,并关联了INPUT_KEY_0/INPUT_KEY_1输入事件码;chosen节点将zephyr,consolezephyr,shell-uart指向flexcomm0_lpuart0(115200 baud),即上文表格中的 UART0。

系统时钟

MIMXRT700-EVK 默认配置使用SysTick作为系统时钟源。需要说明的是,当前仓库中的 cm33_cpu0 设备树实际启用的是os_timer_cpu0节点,并在注释中说明:若需要切换到 SysTick,可将&os_timer_cpu0替换为&systick。对于 RT700 这类多核异构平台,内核节拍源的选择会直接影响多核同步与低功耗唤醒行为,因此该节点还带有wakeup-source属性。

面向 HiFi1 / HiFi4 DSP 核的构建

i.MX RT700 的两个 DSP 核都可以作为独立的 Zephyr 应用目标进行构建。支持 RT700 DSP 核的 Xtensa 工具链已包含在 Zephyr SDK 中,无需额外安装。

为 HiFi 1 DSP 构建 hello_world

samples/hello_world为例,目标板标识为mimxrt700_evk/mimxrt798s/hifi1

west build -b mimxrt700_evk/mimxrt798s/hifi1 samples/hello_world

为 HiFi 4 DSP 构建 hello_world

目标板标识为mimxrt700_evk/mimxrt798s/hifi4

west build -b mimxrt700_evk/mimxrt798s/hifi4 samples/hello_world

对应地,仓库中提供了两块 DSP 板的独立设备树:mimxrt700_evk_mimxrt798s_hifi1.dts 与 mimxrt700_evk_mimxrt798s_hifi4.dts,其 SoC 支持位于 soc/nxp/imxrt/imxrt7xx/hifi1 与 soc/nxp/imxrt/imxrt7xx/hifi4(含独立的linker.ldcache.h/io.h等 DSP 侧支撑)。HiFi 4 的板级 defconfig(mimxrt700_evk_mimxrt798s_hifi4_defconfig)默认使能了串口与 GPIO,便于 DSP 侧进行控制台输出。

多核协同运行

MIMXRT700-EVK 支持所有核参与的多核运行模式,包括CM33 CPU0、CM33 CPU1、HiFi1 DSP 与 HiFi4 DSP。默认的启动与协作分工如下:

  1. CM33 CPU0 是启动核(boot core):负责初始化系统,并负责启动 CM33 CPU1 和/或 HiFi4 DSP;
  2. CM33 CPU1 负责启动 HiFi1 DSP

通常的启动流程是:负责启动从核的主核,先将从核的固件/镜像拷贝到指定的内存位置,然后将从核从复位状态释放(release from reset),从核随即在其指定入口开始执行。

在 Zephyr 中实现这一机制的关键路径包括:

  • 板级设备树的chosen节点:zephyr,code-cpu1-partition(指向sram_code)与zephyr,sram-cpu1-partition(指向sram3),用于为 CPU1 固件预留代码与数据内存;
  • 设备树中使能的多核基础设施节点:mbox1_a/mbox4_a(多核邮箱)、sema420(信号量,domain-id = <0>)、dsp节点等;
  • 从核板目标:mimxrt700_evk_mimxrt798s_cm33_cpu1.dts 及对应 defconfig,构建时使用mimxrt700_evk/mimxrt798s/cm33_cpu1目标;
  • SoC 层的电源/启动辅助代码:soc/nxp/imxrt/imxrt7xx/cm33/power 目录下的power_cross_domain.hpower.c等实现了跨域电源管理,为从核的上电与复位释放提供支撑。

编程与调试

MIMXRT700-EVK 默认使用MCU-Link CMSIS-DAP 板载调试探针,同时支持 LinkServer 与外部 J-Link 两种调试方案。构建与烧录方式与常规 Zephyr 应用一致。

配置调试探针

LinkServer 方案

  1. 安装 LinkServer 调试主机工具,并确保其位于系统搜索路径中;
  2. 将板子置于DFU 模式以烧录固件:短接跳线 J20
  3. 如需更新调试固件,请按照 NXP 提供的 MIMXRT700-EVK 调试固件说明操作(AN13206 应用笔记)。

外部 J-Link 方案

  1. 安装 J-Link 调试主机工具,并确保其位于系统搜索路径中;
  2. 短接跳线 JP18,将 SWD 信号与板载调试电路断开;
  3. 将 J-Link 探针连接到 J18 的 20-pin 排针。

从 board.cmake 可以看到两个 runner 的默认设备参数:J-Link 使用--device=MIMXRT798S_M33_0(并在加载后自动复位),LinkServer 使用--device=MIMXRT798S:MIMXRT700-EVK --core=cm33_core0;针对 CPU1 与 HiFi4 目标,runner 参数会自动切换为对应的MIMXRT798S_M33_1cm33_core1MIMXRT798S_HiFi4

配置控制台

用 USB 线连接 PC 与J54接口,使用任意串口终端软件(minicom、putty 等),参数如下:

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

烧录(Flashing)

DIP 开关SW10用于选择启动选项。将 SW10 设置为Off-On (01),即从 XSPI0 上的默认外部 Flash 启动。

hello_world为例(默认使用 J-Link 调试工具):

west build -p always -b mimxrt700_evk/mimxrt798s/cm33_cpu0 samples/hello_world west flash

打开串口终端,复位板子(按 RESET 按钮),应看到如下输出:

*** Booting Zephyr OS v3.7.0 *** Hello World! mimxrt700_evk/mimxrt798s/cm33_cpu0

调试(Debugging)

hello_world为例,启动调试会话:

west build -p always -b mimxrt700_evk/mimxrt798s/cm33_cpu0 samples/hello_world west debug

在调试器中单步执行应用,串口终端同样会打印上述 "Hello World!" 消息。

SEGGER RTT 日志

在 CM33 CPU0 核上,SRAM 区域的 D-cache 默认开启,这意味着如果直接把 RTT 缓冲放在普通的.bss段中,调试器将无法读取——CPU 的写入会停留在 D-cache 中,永远无法到达 J-Link 所读取的物理 SRAM。为解决这个问题,SoC 层做了自动处理:只要使能CONFIG_USE_SEGGER_RTT,SEGGER RTT 控制块与缓冲会被自动路由到 Zephyr 的nocache区域(相关实现见 soc/nxp/imxrt/imxrt7xx/cm33/rtt_nocache.ld),无需任何额外的缓冲放置 Kconfig 或 DTS overlay

启用 RTT 日志输出只需添加日志后端:

CONFIG_USE_SEGGER_RTT=y CONFIG_LOG_BACKEND_RTT=y

使用JLinkRTTViewerJLinkRTTLogger连接时,需注意:

  • RTT Control Block选项设置为Address(而非 Auto Detection);
  • 从构建产物链接映射文件中查询_SEGGER_RTT的地址:
$ grep " _SEGGER_RTT$" build/zephyr/zephyr.map 0x30180260 _SEGGER_RTT

该地址位于Secure SRAM 别名区(0x30xxxxxx,因为板级 defconfig(mimxrt700_evk_mimxrt798s_cm33_cpu0_defconfig)中启用了CONFIG_TRUSTED_EXECUTION_SECURE。J-Link 默认的 RTT 自动搜索范围只覆盖 Non-secure 别名区(0x20xxxxxx),因此若不手动指定地址,将无法定位 RTT 控制块。

SD 卡支持

MIMXRT700-EVK 上的USDHC1接口通过电子开关(TMUX136)在 SD 卡座(J47)与 M.2 连接器(J44)之间共享,由跳线JP65选择激活哪一路:

  • JP65 1-2:将 SDIO 信号路由到 SD 卡座(J47),使用 SD 卡时必须设置为此位置;
  • JP65 2-3(默认):将 SDIO 信号路由到 M.2 连接器(J44)。

使用 SD 卡时,请将 JP65 置于 1-2 位置。设备树中usdhc1节点已配置好电源与卡检测引脚(pwr-gpios使用gpio711,cd-gpios使用gpio724 低有效),并将 SD 卡注册为zephyr,sdmmc-disk磁盘(盘符 "SD")。

显示支持

mimxrt700_evk 板支持以下树内(in-tree)显示模块。注意:板上的显示控制器在启用数据缓存(data cache)时无法正常工作,使用显示功能时需要关闭相应区域的缓存。chosen节点中的zephyr,display指向lcdif,且 MIPI DSI 通过nxp_mipi_i2cflexcomm8_lpi2c8)进行控制通信。

NXP G1120B0MIPI MIPI 显示屏

该显示屏直接连接板上的MIPI 连接器 J52,但需要一些修改(具体清单见 boards/shields/g1120b0mipi/boards/mimxrt700_evk_mimxrt798s_cm33_cpu0.overlay)。构建显示示例:

west build -p always -b mimxrt700_evk/mimxrt798s/cm33_cpu0 -d build/g1120b0mipi -s samples/drivers/display -- -DSHIELD=g1120b0mipi

NXP RK055HDMIPI4MA0 720p MIPI 显示屏

该 720p 面板连接J52,同样需要修改(见 boards/shields/rk055hdmipi4ma0/boards/mimxrt700_evk_mimxrt798s_cm33_cpu0.overlay)。720p 分辨率需要较大的帧缓冲,因此必须使用 PSRAM 内存区域,并连接 JP45 1-2

west build -p always -b mimxrt700_evk/mimxrt798s/cm33_cpu0 -d build/rk055hdmipi4ma0 -s samples/drivers/display -- -DSHIELD=rk055hdmipi4ma0

NXP ZC143AC72MIPI MIPI 显示屏

连接J26,需要修改(见 boards/shields/zc143ac72mipi/boards/mimxrt700_evk_mimxrt798s_cm33_cpu0.overlay):

west build -p always -b mimxrt700_evk/mimxrt798s/cm33_cpu0 -d build/zc143ac72mipi -s samples/drivers/display -- -DSHIELD=zc143ac72mipi

NXP LCD_PAR_S035

连接板上的LCD 插座 J4(pin 1 到 pin 28),需要修改(见 boards/shields/lcd_par_s035/boards/mimxrt700_evk_mimxrt798s_cm33_cpu0.overlay)。额外硬件配置:连接 JP7 的 2&3使用 3.3V 接口,移除电阻 R60以启用触摸功能:

west build -p always -b mimxrt700_evk/mimxrt798s/cm33_cpu0 -d build/lcd_par_s035 -s samples/drivers/display -- -DSHIELD=lcd_par_s035_8080

Flash 内存配置与板级 Revision

默认情况下,板子从 XSPI0 上的板载Octal SPI NOR(MX25UM51345G)启动并就地执行(XIP)。

两种 Flash revision

通过板级 revision 机制,还可以支持经硬件改造(rework)后板载Winbond W25Q512NW 四线 SPI NOR的板子。revision 选择逻辑位于 revision.cmake,共两个合法值:

  • mx25um51345g(默认):面向出厂状态(as-shipped)的 Octal Flash;
  • w25q512nw:面向改造后板载 W25Q512NW 的板子。

w25q512nwrevision 会同时切换 quad flash 器件、boot ROM 用于 XIP 的匹配启动 Flash 配置块(FCB)以及对应的 XSPI0 时钟设置。构建 spi_flash 示例:

west build -p always -b mimxrt700_evk@w25q512nw/mimxrt798s/cm33_cpu0 samples/drivers/spi_flash

对应地,revision 通过 mimxrt700_evk_mimxrt798s_cm33_cpu0_w25q512nw.overlay 生效,主要变更包括:

  • Flash 器件compatible切换为winbond,w25q512nw
  • sample-clk-source从 3 改为 2:W25Q512NW 没有 DQS 引脚,因此采样时钟改用控制器生成、并经 DQS 焊盘环回的 strobe(LoopbackFromDqsPad),这与 boot ROM/FCB 的配置保持一致,保证驱动在初始化时重新下发器件配置后 AHB/XIP 读取依然有效;
  • XSPI0 引脚复用缩减为 quad 模式所需的 6 根信号(SCK_A_N、SCK_A、PCS_A_0、DATA0~DATA3)。

两块 Flash 均为 64 MB,因此器件尺寸、分区表与chosen节点保持不变。

硬件改造(Rework)说明

将 XSPI0 路由到 W25Q512NW quad SPI NOR,需要修改以下电阻:

  • 移除:R396、R397、R400、R402
  • 焊接:R386、R694、R695、R701、R707、R708

w25q512nw 的烧录注意点

w25q512nwrevision 必须使用 LinkServer 烧录(west flash --runner linkserver),默认的 J-Link runner 不支持该器件。LinkServer 通过 NXP 单独提供的MIMXRT700_XSPI0_Quad_S.cfxFlash 算法驱动安全 XSPI0 区域,需要先将该文件复制到<LinkServer>/binaries/Flash/目录:

west flash --runner linkserver -- \ --override=/board/memory/1/flash-driver=MIMXRT700_XSPI0_Quad_S.cfx # west flash --runner linkserver -- \ # --override=/device/memory/5/flash-driver=MIMXRT700_XSPI0_Quad_S.cfx

小结

MIMXRT700-EVK 是 Zephyr 中体验 i.MX RT7xx 家族全平台能力的核心开发板:双 Arm Cortex-M33 与 HiFi1/HiFi4 DSP 构成的多核异构架构、eIQ Neutron NPU、2.5D GPU 与丰富的外设资源,均已在 Zephyr 中获得了完整的板级支持。开发者既可以分别面向主核、从核与 DSP 核构建独立固件,也可以通过板级设备树中的内存分区、邮箱与信号量节点实现多核协同;结合本文介绍的调试探针、RTT 日志、SD 卡与显示模块配置,以及可选的w25q512nwFlash revision,即可在此平台上快速开展音频、图像、显示与机器学习等方向的 Zephyr 应用开发。

【免费下载链接】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),仅供参考

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

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

立即咨询