恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

Zephyr 双核实战:NXP MIMXRT1180-EVK 开发板支持与 Cortex-M33/M7 双核启动详解

  • 首页
  • 资讯中心
  • /
  • Zephyr 双核实战:NXP MIMXRT1180-EVK 开发板支持与 Cortex-M33/M7 双核启动详解

相关资讯

Spark 数据倾斜治理:提升大数据处理性能的实用技术方案 2026/9/20 1:09:41
Spark RDD 血统与容错:Lineage、Checkpoint、Cache/Persist 的选择与性能权衡 2026/9/20 1:09:41
安全运维应急演练全流程解析:从预案设计到Linux入侵排查实战 2026/9/20 1:09:41

最新资讯

RustDesk:自托管远程桌面,一小时搭好跨平台连接
Ubuntu 上从零部署 Claude Code:Node.js 与 Git 环境配置避坑指南
AI Agent 调 MCP 工具,模型通道改到 TaoToken 通道行不行?
IsaacLab rsl-rl 依赖安装报错:3 步快速修复“找不到匹配版本“问题
CANN Runtime 错误码 EH0005 Invalid_Argument 详解:AIPP 参数非法排查与修复指南
GD32H759工业HMI开发:SDRAM、SDIO与触摸屏调试实战

今日推荐

BrewUI:给Homebrew套上图形界面,让macOS软件包管理更简单
BrewUI:让Homebrew包管理变得可视化与高效
公式与文本对齐全攻略:从Word到LaTeX的实用技巧

本周热门

BrewUI:给Homebrew套上图形界面,让macOS软件包管理更简单
BrewUI:让Homebrew包管理变得可视化与高效
公式与文本对齐全攻略:从Word到LaTeX的实用技巧

本月精选

自研推理加速器Redwood:两周内实现PyTorch模型高效部署的实战教程
V4L2摄像头采集实战:从camera_client.rar到出图全流程解析
从“谁发明了钢琴键”到知识问答智能体:RAG与记忆工程实践

Zephyr 双核实战:NXP MIMXRT1180-EVK 开发板支持与 Cortex-M33/M7 双核启动详解

发布时间:2026/9/20 1:14:41
Zephyr 双核实战:NXP MIMXRT1180-EVK 开发板支持与 Cortex-M33/M7 双核启动详解 Zephyr 双核实战NXP MIMXRT1180-EVK 开发板支持与 Cortex-M33/M7 双核启动详解【免费下载链接】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/zephyrMIMXRT1180-EVK 是 NXP 面向 i.MX RT118x 系列 MCU 推出的评估板被 NXP 视为该系列在 Zephyr 生态中的超集板卡superset board也是其 Zephyr Full Platform Support 的重点板卡。本文以 boards/nxp/mimxrt1180_evk/doc/index.rst 为骨架结合板级设备树、Kconfig 与 MPU 配置源码系统讲解该板卡的硬件资源、内存布局、双核Cortex-M33 与 Cortex-M7启动的三种代码执行模式、调试探测器的配置以及烧录与调试流程帮助你在 Zephyr 中完整掌握这款双核跨界 MCU 的实战开发方法。NXP MIMXRT1180-EVK 评估板外观板卡总览双核跨界 MCU 与硬件资源MIMXRT1180-EVK 搭载 MIMXRT1189CVM8C 双核 MCU主核 Cortex-M33 运行在 240 MHz附带 256 KB TCM 与 16 KB 缓存性能核 Cortex-M7 运行在 792 MHz附带 512 KB TCM 与 32 KB 缓存。片上还提供 1.5 MB SRAM。得益于宽温度范围与消费级、工业级、车规级三种资质该平台适合对实时性与算力均有要求的应用场景。板载硬件资源如下类别配置内存512 Mbit SDRAM、128 Mbit QSPI Flash、512 Mbit HYPER RAM、TF 卡座SD 卡以太网1000 Mbit/s 以太网 PHYUSB2 × USB 2.0 OTG 连接器音频3.5 mm 立体声耳机插孔、板载麦克风、左右扬声器输出连接器供电5 V DC 电源插孔调试JTAG 20-pin 连接器、MCU-LinkDAPLink扩展Arduino 接口总线CAN 总线连接器外部存储器SEMC 与 FLEXSPI 的引导期初始化该平台的外部存储器由两块控制器驱动均依赖启动时即完成初始化的机制具体见下表器件控制器状态W9825G6KHSDRAMSEMC通过设备配置数据块device configuration data block启用由 SEMC 在启动时完成初始化W25Q128JWSIQQSPI FlashFLEXSPI通过 Flash 配置块flash configuration block启用由 FLEXSPI 在启动时完成初始化从板级 Kconfig 可以看到这一机制的落地在 boards/nxp/mimxrt1180_evk/Kconfig.defconfig 中当主核为 Cortex-M33 时默认使能EXTERNAL_MEM_CONFIG_DATA使用外部存储器配置数据 XMCD与NXP_IMX_EXTERNAL_HYPERRAM。HyperRAM 的 XMCD 配置存放在 boards/nxp/mimxrt1180_evk/xip/evkmimxrt1180_flexspi_nor_config.c 中当前板上 HyperRAM 必须以 XIP 模式访问ROM bootloader 通过读取这份 XMCD 配置完成初始化如需修改应参考 RT1180 参考手册的 System Boot 章节。板级设备树视角chosen 节点与内存分区该板在 Zephyr 中分为 CM33 与 CM7 两个 target分别对应两套设备树CM33 核心mimxrt1180_evk_mimxrt1189_cm33.dtsCM7 核心mimxrt1180_evk_mimxrt1189_cm7.dtsCM33 设备树中关键的chosen设置chosen { zephyr,sram hyperram0; /* 默认数据区放在外部 HyperRAM */ zephyr,dtcm dtcm; zephyr,itcm itcm; zephyr,flash-controller ext_flash_ctrl; zephyr,flash w25q128jw; /* QSPI Flash 作为代码存储 */ zephyr,code-partition slot0_partition; zephyr,code-m7-partition slot1_partition; /* 为 CM7 预留的分区 */ zephyr,console lpuart1; /* CM33 控制台 */ zephyr,canbus flexcan3; zephyr,edac mecc1; };CM7 设备树则把默认 RAM 放在 DTCM控制台换到 LPUART12并额外通过nxp,m7-partition指向slot1_partitionchosen { zephyr,sram dtcm; zephyr,flash itcm; /* CM7 默认从 ITCM 执行 */ zephyr,console lpuart12; /* CM7 控制台 */ nxp,m7-partition slot1_partition; };值得注意的是同一块 HyperRAM 在两份设备树中的地址描述不同CM33 视图为0x14000000CM7 视图为0x04000000容量均为 8 MB且 CM33 侧hyperram0状态为okay、CM7 侧默认disabled。注释明确指出CM33 核默认以 XIP 模式运行整块 HyperRAM 已被 CM33 的 RAM 区占用用户需要合理划分地址区间才能让双核共享 HyperRAM。mpu_regions.c会根据 DTS 中的status属性决定是否配置对应的 MPU 区域。ITCM/DTCM 重定位删除zephyr,memory-region属性的关键细节若想把zephyr,flash放进 ITCM或把zephyr,sram放进 DTCM必须先从内存设备节点删除zephyr,memory-region属性否则链接脚本会与 SoC 默认的内存节点定义冲突。官方示例 boards/nxp/mimxrt1180_evk/cm33_sram_dtcm.overlay 演示了如何将 CM33 的zephyr,sram移到 DTCM——先删掉 SoC 的dtcm节点再以 128 KB 的mmio-sram形式重新声明/* Remove property from DTCM: zephyr,memory-region DTCM; */ /delete-node/ dtcm; / { chosen { zephyr,sram dtcm; }; soc { dtcm: memory30000000 { compatible mmio-sram; reg 0x30000000 DT_SIZE_K(128); }; }; };同时boards/nxp/mimxrt1180_evk/cm33/dtcm.ld 提供了对应的链接脚本片段CM7 侧另有 cm7/dtcm.ld。在后续的 HyperRAM 双核方案中这个 overlay 还被用来避免 CM33 与 CM7 在 HyperRAM 中出现地址重叠。引脚连接与串口控制台布局MIMXRT1180 SoC 拥有六对 pinmux/gpio 控制器。板级默认连接如下引脚名功能用途GPIO_AON_04GPIOSW8GPIO_AD_27GPIOLEDGPIO_AON_08LPUART1_TXUART ConsoleM33 核GPIO_AON_09LPUART1_RXUART ConsoleM33 核GPIO_AON_19LPUART12_TXUART ConsoleM7 核GPIO_AON_20LPUART12_RXUART ConsoleM7 核GPIO_SD_B1_00SPI1_CS0spiGPIO_SD_B1_01SPI1_CLKspiGPIO_SD_B1_02SPI1_SDOspiGPIO_SD_B1_03SPI1_SDIspiMIMXRT1180 SoC 共有 12 个 UARTLPUART1 配置给 CM33 控制台LPUART12 配置给 CM7 控制台其余未使用。M7 核的 UART 连接到 USB-to-UART 的 J60 连接器也可以打开 JP7 跳线在 MCU-Link 的 J53 连接器上启用第二个 UART。控制台的串口参数为 115200-8-N-1详见下文串口控制台配置。系统时钟与 ELE 活跃定时器MIMXRT1180 SoC 使用 SysTick 作为系统时钟源CM33 核运行在 240 MHzCM7 核同样使用 SysTick运行在 792 MHz。两套设备树中均通过systick { status okay; }使能并在cpu0/cpu1节点中声明了对应的clock-frequency240 MHz / 792 MHz。RT1180 平台还有一个容易被忽略的硬性要求根据 RT1180 系统参考手册SRM3.11 节 ELE active timerEdgeLock EnclaveELE至少每 24 小时必须被ping一次否则系统会复位。Zephyr 使用软件定时器自动每 23 小时 ping 一次 ELE留出 1 小时余量以应对时钟误差。该过程对应用完全透明无需用户干预。以太网NETC 的 PSI 与 DSA 支持现状板载 1000 Mbit/s 以太网由 NETCNetwork Controller外设驱动NETC Ethernet 驱动负责管理物理站接口PSIPhysical Station InterfaceNETC DSA 驱动负责管理交换端口。当前 DSA 支持存在一个明确限制只提供交换switch功能尚不能通过 DSA 主端口master port进行管理DSA master port 支持属于 TODO 工作。网络拓扑示意如下-------- -------- | ENETC1 | | ENETC0 | | | | | | Pseudo | | 1G | | MAC | | MAC | -------- -------- | zero copy interface | -------------- ------------------------ | | | Pseudo | | | | | MAC | | | | | | | | | | Port 4 | | | | -------- | | | SWITCH CORE | | -------- -------- -------- -------- | | Port 0 | | Port 1 | | Port 2 | | Port 3 | | | | | | | | | | | | 1G | | 1G | | 1G | | 1G | | | MAC | | MAC | | MAC | | MAC | | ----------------------------------- | | | | | | NETC External Interfaces (4 switch ports, 1 end-point port)拓扑上共提供 4 个交换端口与 1 个端点end-point端口ENETC0 作为 1G MAC 接入ENETC1 通过零拷贝接口与伪 MACPseudo MAC对接。双核操作CM33 引导 CM7 的三种执行模式MIMXRT1180-EVK 支持 Cortex-M33 与 Cortex-M7 双核同时运行。默认情况下CM33 是引导核boot core负责系统初始化并启动 CM7 核。CM7 核有三种代码执行方式各有取舍ITCM默认CM7 代码从 Flash 复制到 ITCM指令紧耦合存储器后在其中执行。ITCM 低延迟执行最快但受限于 ITCM 容量。FlashCM7 代码直接从 Flash 中执行XIPeXecute In Place。可承载更大的代码体积但可能比 ITCM 慢从 Flash 启动 CM7 时TRDC 执行权限必须由 CM33 核设置。HyperRAMCM7 代码从 Flash 复制到外部 HyperRAM 后执行。同样支持更大的代码体积、速度可能慢于 ITCM。需要注意CM33 的默认数据区zephyr,sram就在 HyperRAM必须确保 CM33 与 CM7 在 HyperRAM 中的区域不重叠文档给出的方案之一就是把 CM33 数据移到 DTCM即上文cm33_sram_dtcm.overlay的用途。从源码结构看这套双核方案还依赖 Kconfig 中针对 CM7 构建的若干配置在 boards/nxp/mimxrt1180_evk/Kconfig.defconfig 中当SECOND_CORE_MCUX且 target 为 CM7 时会自动根据zephyr,code-partition推导FLASH_LOAD_OFFSET/FLASH_LOAD_SIZE当从 RAM 运行时非CM7_BOOT_FROM_FLASH还会用BUILD_OUTPUT_ADJUST_LMA依据nxp,m7-partition与zephyr,flash的地址差自动调整输出镜像的 LMA从而把 CM7 镜像放到 flash 中正确的槽位。配置 CM7 执行内存Kconfig 与 west 构建命令通过 Kconfig 选项CONFIG_CM7_BOOT_FROM_FLASH选择 CM7 的执行内存CONFIG_CM7_BOOT_FROM_FLASHn # 从 RAM 执行ITCM 或 HyperRAM默认 CONFIG_CM7_BOOT_FROM_FLASHy # 从 Flash 执行使用 west 构建时可在命令行直接指定。ITCM 执行默认以samples/drivers/mbox为例west build -b mimxrt1180_evk/mimxrt1189/cm33 samples/drivers/mbox --sysbuildFlash 执行需附加 CM7 的 flash boot overlay并同时给主工程与 remote 应用设置 Kconfigwest build -b mimxrt1180_evk/mimxrt1189/cm33 sample_path --sysbuild -- \ -Dremote_app_name_EXTRA_DTC_OVERLAY_FILE${ZEPHYR_BASE}/boards/nxp/mimxrt1180_evk/cm7_flash_boot.overlay \ -DCONFIG_CM7_BOOT_FROM_FLASHy -Dremote_app_name_CONFIG_CM7_BOOT_FROM_FLASHy west build -b mimxrt1180_evk/mimxrt1189/cm33 samples/drivers/mbox --sysbuild -- \ -Dremote_EXTRA_DTC_OVERLAY_FILE${ZEPHYR_BASE}/boards/nxp/mimxrt1180_evk/cm7_flash_boot.overlay \ -DCONFIG_CM7_BOOT_FROM_FLASHy -Dremote_CONFIG_CM7_BOOT_FROM_FLASHyHyperRAM 执行同时给 CM7 应用 HyperRAM overlay、给 CM33 应用 DTCM overlay 以腾出 HyperRAM 空间west build -b mimxrt1180_evk/cm33 samples/drivers/mbox --sysbuild -- \ -Dremote_EXTRA_DTC_OVERLAY_FILE${ZEPHYR_BASE}/boards/nxp/mimxrt1180_evk/cm7_code_hyperram.overlay \ -DEXTRA_DTC_OVERLAY_FILE${ZEPHYR_BASE}/boards/nxp/mimxrt1180_evk/cm33_sram_dtcm.overlay说明remote_app_name是 sysbuild 中 remote 应用的实际名字例如 mbox 样例中为remote请以west build的 sysbuild 输出或样例 CMake 为准。Flash Boot OverlayCM7 从 Flash 执行时需要应用 boards/nxp/mimxrt1180_evk/cm7_flash_boot.overlay把 CM7 的zephyr,flash指回外部 QSPI Flash并将代码分区切到slot1_partition同时确保flexspi处于okay状态/ { chosen { zephyr,flash w25q128jw; zephyr,code-partition slot1_partition; }; }; flexspi { status okay; };HyperRAM 执行 Overlay 与 MPU 属性修改CM7 从 HyperRAM 执行时需要应用 boards/nxp/mimxrt1180_evk/cm7_code_hyperram.overlay。该 overlay 把zephyr,flash指向hyperram0代码分区指向slot1_partition并把hyperram0的zephyr,memory-attr从 RAM 属性改为 Flash可执行属性、状态置为okayhyperram0 { zephyr,memory-attr DT_MEM_ARM(ATTR_MPU_FLASH); status okay; };与此同时还必须修改板级的 MPU 区域表 boards/nxp/mimxrt1180_evk/cm7/mpu_regions.c将 HyperRAM 区域的属性由 RAM 改为 Flash可执行改动如下#if DT_NODE_HAS_STATUS_OKAY(DT_NODELABEL(hyperram0)) MPU_REGION_ENTRY(HYPER_RAM, REGION_HYPER_RAM_BASE_ADDRESS, - REGION_RAM_ATTR(REGION_HYPER_RAM_SIZE)), REGION_FLASH_ATTR(REGION_HYPER_RAM_SIZE)), #endif从该文件源码可以看到MPU 区域表的其余条目ITCM、DTCM、OCRAM1/OCRAM2、QSPI_FLASH、PERIPHERAL同样由 DTS 节点的status驱动地址与大小均通过DT_REG_ADDR_BY_IDX/DT_REG_SIZE_BY_IDX从设备树动态获取而不是硬编码。此外Kconfig.defconfig 在 CM7 构建下默认使能ARM_MPU_CM7_UNMAPPED_REGION——由于 CM7 的 MPU 区域表已完整覆盖固件使用的全部内存该选项启用 Cortex-M7 erratum 1013783 要求的catch-all 无访问区域防止未映射地址被意外访问。内存使用与性能权衡从 RAM 运行CM7 代码从 Flash 复制到 ITCM 或 HyperRAM。从 Flash 运行CM7 代码直接从 Flash 执行可承载比 ITCM 更大的代码体积。性能ITCM 因低延迟内部存储器执行最快外部 Flash 或 HyperRAM 受存储器访问时间影响可能较慢但代码体积上限更大。双核样例的调试要点调试双核样例时需注意以下几点SW5 拨码开关必须置于0100模式默认引导核为 CM33。CM33 核负责复制并启动 CM7要在调试器中调试 CM7建议先在 CM7 的 reset vector 或main函数中放置一个无限while循环再通过调试器附加到 CM7 核。CM7 核只能在复位后重新启动烧录完成后务必复位开发板否则 CM7 无法再次运行。编程与调试调试探测器、串口控制台与烧录流程支持的调试探测器该板默认的 runner 是LinkServer。调试探测器同时承担烧录与调试两种职责板卡默认使用板载 MCU-LinkCMSIS-DAP调试探测器。需要注意的是pyOCD 目前尚不支持编程本板的外部 Flash因此应使用下列其他受支持的调试探测器。使用 J-Link需要J-Link V7.94g 以上版本若在 J37 上外接 J-Link Plus 作为调试器必须安装 JP5 跳线。调试 CM33 核时 SW5 置为0100调试 CM7 核时 SW5 置为0001受默认引导核为 CM33 的限制调试时仅支持运行 CM7 镜像。安装 J-Link 调试主机工具并确保其在 PATH 中。两种接法任选其一把板载调试电路刷成 Segger J-Link 固件或在 EVK 上外接 J-Link 调试探测器。使用 LinkServer需要LinkServer V1.5.30 以上版本且 JP5 跳线保持未安装出厂默认状态。调试 CM33 核时 SW5 置为0100调试 CM7 核时 SW5 置为0001。串口控制台配置无论选择哪种调试探测器都使用 MCU-Link 单片机作为 USB 转串口适配器。检查JP5 与 JP3 跳线均处于ON状态出厂默认即如此以将 UART 信号连接到 MCU-Link 单片机。然后用 USB 线将 PC 连接到J53在任意串口终端minicom、putty 等中使用以下设置波特率115200数据位8校验无停止位1烧录示例hello_world以samples/hello_world在 CM33 核上烧录为例上电前确保 SW5 置为0100b然后执行west build -b mimxrt1180_evk/mimxrt1189/cm33 samples/hello_world -p west flash断电再上电打开串口终端并复位开发板按 SW3 按钮终端应输出***** Booting Zephyr OS v3.7.0-xxx-xxxxxxxxxxxxx ***** Hello World! mimxrt1180_evk/mimxrt1189/cm33调试示例west build -b mimxrt1180_evk/mimxrt1189/cm33 samples/hello_world -p west debug打开串口终端在调试器中单步执行应用终端中同样会出现上述 Hello World! 输出。构建配置速览两份 defconfig 的差异对比两个 target 的默认配置可以更直观地理解双核分工CM33mimxrt1180_evk_mimxrt1189_cm33_defconfig启用CONSOLE、UART_CONSOLE、SERIAL、GPIO、ARM_MPU、HW_STACK_PROTECTION并开启 TrustZone-MCONFIG_TRUSTED_EXECUTION_SECUREy符合其安全引导核的定位。CM7mimxrt1180_evk_mimxrt1189_cm7_defconfig同样启用控制台、串口、GPIO、MPU 与硬件栈保护但额外关闭了CONFIG_NXP_IMXRT_BOOT_HEADER——因为 CM7 镜像由 CM33 引导加载无需自带 boot header。板级 KconfigKconfig.mimxrt1180_evk根据 target 选择对应的 SoC 变体SOC_MIMXRT1189_CM33或SOC_MIMXRT1189_CM7并固定器件型号MIMXRT1189CVM8C。小结MIMXRT1180-EVK 在 Zephyr 中是一块典型的双核 多存储器层级开发平台240 MHz 的 Cortex-M33 作为安全引导核负责系统初始化与启动 M7792 MHz 的 Cortex-M7 提供算力代码可根据 ITCM、外部 Flash、HyperRAM 三种载体在执行速度与代码容量之间权衡。掌握CONFIG_CM7_BOOT_FROM_FLASH、cm7_flash_boot.overlay、cm7_code_hyperram.overlay与cm33_sram_dtcm.overlay的组合用法以及 SW5/JP5/JP3 等硬件跳线与 SW5 拨码状态的配合即可在双核场景下顺利完成构建、烧录与调试。若需继续深入建议进一步阅读 mimxrt1180_evk.dtsi、mimxrt1180_evk-pinctrl.dtsi 以及samples/drivers/mbox双核样例结合 RT1180 参考手册尤其 SRM 3.11 节 ELE active timer 与 System Boot 章节获得更完整的系统视图。【免费下载链接】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),仅供参考

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号