news 2026/9/20 4:24:59

Zephyr 在 NXP MIMXRT1160-EVK 上的双核开发指南:架构、构建、烧录与调试

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Zephyr 在 NXP MIMXRT1160-EVK 上的双核开发指南:架构、构建、烧录与调试
  • 操作系统
  • 嵌入式
  • 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 RTOS 中 mimxrt1160_evk 板级支持包为核心,系统讲解 NXP i.MX RT1160 双核跨界 MCU 评估板在 Zephyr 下的硬件资源布局、双核(Cortex-M7/M4)内存映射与启动机制、sysbuild 双核镜像构建流程、串口控制台配置,以及基于 LinkServer / J-Link 的烧录与调试实战。读完本文,你将掌握如何在 Zephyr 中为目标mimxrt1160_evk/mimxrt1166/cm7mimxrt1160_evk/mimxrt1166/cm4构建、烧录和调试单核及 openamp 双核应用。

板卡总览:双核跨界 MCU 评估板

MIMXRT1160-EVK 是 NXP 官方推出的 i.MX RT1160 跨界 MCU 评估板,搭载MIMXRT1166DVM6A芯片。该 SoC 采用非对称双核架构:

  • Cortex-M7 主核,主频 600 MHz,是默认的 primary core;
  • Cortex-M4 从核,主频 240 MHz。

片上资源方面,芯片集成 2MB SRAM,其中 Cortex-M7 拥有 512KB TCM,Cortex-M4 拥有 256KB TCM。得益于宽温度范围设计,该系列芯片面向消费、工业和汽车市场,从源码中的板级描述(board.yml)可以确认该板对应 SoC 型号为mimxrt1166,Kconfig 中通过SOC_PART_NUMBER_MIMXRT1166DVM6A选择具体封装型号(见 Kconfig.mimxrt1160_evk)。

板载外设与接口在文档中完整列出,是评估各种 Zephyr 驱动子系统的硬件基础:

  • 存储器:512 Mbit SDRAM(W9825G6KH,SEMC 控制器)、128 Mbit QSPI Flash(IS25WP128,FLEXSPI 控制器)、512 Mbit Octal Flash,以及 TF 卡座(SD 卡);
  • 显示:MIPI LCD 连接器;
  • 网络:10/100 Mbit/s 与 10/100/1000 Mbit/s 两路以太网 PHY;
  • USB:USB 2.0 OTG 与 USB 2.0 Host 连接器各一个;
  • 音频:3.5mm 立体声耳机插孔、板载麦克风、左右扬声器输出接口;
  • 电源:5V DC 电源插孔;
  • 调试:JTAG 20-pin 连接器、OpenSDA(DAPLink 固件)板载调试器;
  • 传感与扩展:MIPI 摄像头传感器连接器、Arduino 接口扩展口、CAN 总线连接器。

外部存储器:SEMC 与 FLEXSPI 的引导期初始化

该平台挂载了两块外部存储器件,均由引导阶段(boot time)的配置块完成初始化:

器件控制器状态与初始化方式
W9825G6KH(SDRAM)SEMC通过**设备配置数据块(Device Configuration Data, DCD)**在启动时配置 SEMC
IS25WP128(QSPI Flash)FLEXSPI通过**Flash 配置块(Flash Configuration Block)**在启动时配置 FLEXSPI

源码级印证:板级 Kconfig(Kconfig.defconfig)中,仅当编译目标为 M7(CPU_CORTEX_M7)时才默认启用DEVICE_CONFIGURATION_DATANXP_IMX_EXTERNAL_SDRAM,即DCD 只在主核镜像中携带,用于在启动早期初始化 SEMC 控制器。Flash 配置块则位于 xip/evkmimxrt1160_flexspi_nor_config.c 及其头文件,M7 的 defconfig 中CONFIG_FLEXSPI_CONFIG_BLOCK_OFFSET=0x400(见 mimxrt1160_evk_mimxrt1166_cm7_defconfig)指定了 Flash 配置块在镜像中的偏移位置。

在设备树层面,IS25WP128 被建模为 FLEXSPI 控制器下的is25wp128节点(jedec-id = [9d 70 18]、16MB 容量、4KB 擦除块),并在其中划分了 mcuboot 分区、slot0_partition(7MB)、slot1_partition(7MB)与storage_partition四个分区(见 mimxrt1160_evk.dtsi)。SDRAM 则声明为sdram0: memory@80000000,大小为 64MB。

支持的板级特性与 Shields

Zephyr 使用.. zephyr:board-supported-hw::指令从板级 yaml 自动生成硬件支持列表。从 mimxrt1160_evk_mimxrt1166_cm7.yaml 可以看到 M7 目标支持:cancounterdmaflashgpiohwinfoi2cnetif:ethptp_clockpwmspiusb_deviceusbdwatchdog;M4 目标(mimxrt1160_evk_mimxrt1166_cm4.yaml)支持dmaflashgpioi2cpwmuart。ram/flash 声明分别为 M7(256KB / 16384KB)与 M4(128KB / 128KB)。

需要注意的是,当前尚未支持的特性可参考同系列的mimxrt1170_evk超级集板卡:NXP 优先在超级集板卡上完成全平台支持(Full Platform Support),因此 mimxrt1170_evk 上已支持的特性大多可以直接复用到本板。

部分特性通过 Zephyr Shields 完成验证:

  • rk055hdmipi4mrk055hdmipi4ma0g1120b0mipi—— 用于 MIPI-DSI 显示接口;
  • nxp_btb44_ov5640—— 用于 MIPI-CSI 视频/摄像头接口。

设备树中对应地提供了nxp_mipi_connector(J48 MIPI FPC 接口,含背光、复位、触摸等引脚映射)与nxp_cam_connector(J2 44-pin 摄像头接口,含 RESETB/PWDN 引脚)两个 gpio-nexus 节点(见 mimxrt1160_evk_mimxrt1166_cm7.dts),并对外提供zephyr_lcdifzephyr_mipi_dsinxp_mipi_csinxp_csi等符号供 shield 引用。

连接与 I/O 引脚分配

MIMXRT1160 SoC 共有六对 pinmux/GPIO 控制器。板级文档给出了关键引脚的复用与用途对照表,这些映射与 mimxrt1160_evk-pinctrl.dtsi 中的 pinmux 节点一一对应:

引脚名复用功能用途
WAKEUPGPIOSW7 按键
GPIO_AD_04GPIOLED(用户 LED D6,绿色,低电平有效)
GPIO_AD_24LPUART1_TXUART 控制台
GPIO_AD_25LPUART1_RXUART 控制台
GPIO_LPSR_00CAN3_TXflexcan
GPIO_LPSR_01CAN3_RXflexcan
GPIO_AD_29SPI1_CS0spi
GPIO_AD_28SPI1_CLKspi
GPIO_AD_30SPI1_SDOspi
GPIO_AD_31SPI1_SDIspi
GPIO_AD_08LPI2C1_SCLi2c
GPIO_AD_09LPI2C1_SDAi2c
GPIO_LPSR_05LPI2C5_SCLi2c(连接 FXOS8700 传感器)
GPIO_LPSR_04LPI2C5_SDAi2c(连接 FXOS8700 传感器)
GPIO_AD_04FLEXPWM1_PWM2pwm(绿色 LED 的 PWM 控制)

在设备树中,GPIO 别名与节点定义于 mimxrt1160_evk.dtsi:led0指向gpio9 3(低电平有效)、sw0指向gpio13 0的用户按键 SW7,同时定义了magn0/accel0别名指向 I2C5 上的nxp,fxos8700加速度计/磁力计(地址 0x1f),以及sdhc0指向usdhc1。PWM 控制绿色 LED 的节点为flexpwm1_pwm2(20ms 周期)。

双核内存映射与启动地址

这是本板在 Zephyr 中最重要的架构主题。板级文档给出了双核协作的地址约定:

双核启动地址

CoreBoot Address说明
Cortex-M70x30000000[630K]primary core,从 FLEXSPI 映射的 Flash 启动
Cortex-M40x20020000[96K]从 OCRAM 启动

双核内存布局

内存地址[大小]用途
flexspi10x30000000[16M]Cortex-M7 Flash
sdram00x80030000[64M]Cortex-M7 RAM
ocram0x20020000[512K]Cortex-M4 "flash"
sram10x20000000[128K]Cortex-M4 RAM
ocram20x200C0000[512K]Mailbox/共享内存

需要特别留意:ocram2 只有前 16KB 被正确设置了 MPU region 属性,可用于共享内存

源码印证:M7 设备树的chosen节点将zephyr,sram指向sdram0zephyr,code-partition指向slot0_partitionzephyr,cpu1-region指向ocramzephyr,ipc指向mailbox_a;M4 设备树则将zephyr,sram指向sram1(并注释提示:使用 DMA 时 SRAM 必须选非缓存区域,否则会出问题)、zephyr,flash指向ocram_m4_itcmnxp,m4-partition指向slot1_partitionzephyr,ipc指向mailbox_b(见 mimxrt1160_evk_mimxrt1166_cm4.dts)。

Kconfig 层面(Kconfig.defconfig)为 M4 目标自动开启了BUILD_OUTPUT_INFO_HEADER,并将DT_CHOSEN_IMAGE_M4 = nxp,m4-partition,同时通过BUILD_OUTPUT_ADJUST_LMAdt_chosen_reg_addr_hex与 ocram 基地址之差调整输出镜像的 LMA 偏移——这正是 M4 镜像能直接"落到"ocram 区域执行的底层机制。

系统时钟与串口

系统时钟:MIMXRT1160 SoC 默认使用SysTick作为系统时钟源,M7 目标以 600MHz 运行(SYS_CLOCK_HW_CYCLES_PER_SEC为 600000000),M4 目标以 240MHz 运行(240000000),该默认值同样定义于 Kconfig.defconfig。当使能电源管理(power management)时,板载32KHz 低频振荡器将作为 GPT 定时器的时钟源来产生系统时钟,从而允许进入更低功耗状态,代价是时钟分辨率降低。设备树中gpt_hw_timersystick同时被使能,注释明确说明:若使能电源管理,将改用 GPT 定时器以便门控核心时钟(见 mimxrt1160_evk_mimxrt1166_cm7.dts)。

串口:MIMXRT1160 SoC 共有 12 个 UART,其中LPUART1 配置为控制台zephyr,consolezephyr,shell-uart均指向lpuart1,波特率 115200,并配置了 default/sleep 两套 pinmux 状态),其余 UART 未使用。

构建双核镜像(Dual-Core Build)

双核 sample 的工作机制是:M7 从 Flash 中将 M4 镜像加载到共享的 ocram 区域,然后将 M4 的启动地址设置为该区域。目前唯一启用双核构建的 sample 是openamp(对应仓库中的 samples/subsys/ipc/openamp)。

烧录顺序至关重要:必须先烧录 M4 镜像(使其写入 Flash),再烧录 M7 镜像。openamp的 sysbuild 构建会通过设置镜像顺序(image order)自动完成这一流程。此外,SECOND_CORE_MCUX(MCUX launcher)机制在 M4 目标开启时会自动生成一个最小的 "launcher" 镜像烧录到 M7 核,用于把 M4 镜像拷入 ocram 并启动 M4。

单核构建下,从核(M4)可以正常调试;但在双核构建下,调试 M4 前应将其置于一个循环(loop)中,再附加调试器。

构建运行于 M4 核的应用

由于 M4 没有独立的可引导 Flash,任何针对 M4 核的应用都必须由 M7 先执行代码来"拉起":把 M4 镜像拷入 ocram 区域,然后启动 M4 核。使用 sysbuild 构建 M4 目标时,工具链会自动生成并烧录一个最小 launcher 镜像到 M7 核,负责加载并启动 M4。因此,开发独立的 M4 应用时推荐使用 sysbuild,例如构建 hello_world:

west build -b mimxrt1160_evk/mimxrt1166/cm4 samples/hello_world --sysbuild west flash

若希望禁用这一自动 launcher 行为,可在构建时追加:

-DSB_CONFIG_SECOND_CORE_MCUX_LAUNCHER=n

调试探针配置

板载调试器为OpenSDA(DAPLink),支持两种使用方式:

  1. LinkServer runner(配合板载默认 CMSIS-DAP 固件);
  2. 将板载调试电路刷写为 Segger J-Link 固件,或外接 J-Link 探针。

从 board.cmake 可以看到三种 runner 的设备参数已预配置:

  • M7 目标(或SECOND_CORE_MCUX):linkserver --device=MIMXRT1166xxxxx:MIMXRT1160-EVKjlink --device=MIMXRT1166xxx6_M7 --reset-after-loadpyocd --target=mimxrt1160_cm7
  • M4 目标:jlink --device=MIMXRT1166xxx6_M4(注意:J-Link 需 V7.50 以上,且因板上默认启动核为 M7,调试时仅支持运行 cm4 镜像)、pyocd --target=mimxrt1160_cm4

使用 LinkServer

安装 LinkServer 调试主机工具并确保其加入 PATH 即可。LinkServer 与板载调试器自带的 CMSIS-DAP 固件直接兼容。

使用 J-Link

安装 J-Link 调试主机工具并确保其加入 PATH。随后可用 west 显式指定 jlink runner:

west flash -r jlink

配置串口控制台

无论选择哪种调试探针,串口控制台都通过 OpenSDA 微控制器充当 USB 转串口适配器。硬件准备如下:

  • 确认跳线J5 与 J8 处于 ON(出厂默认即 ON),以将 UART 信号连接到 OpenSDA 微控制器;
  • 用 USB 线将 PC 连接到板上的J11接口。

在串口终端(minicom、putty 等)中使用以下参数:

  • 波特率(Speed):115200
  • 数据位(Data):8 bits
  • 校验(Parity):None
  • 停止位(Stop bits):1

烧录与调试实战(hello_world)

以下以hello_world为例展示完整烧录流程。上电前,请将拨码开关 SW1 拨到0001b

west build -b mimxrt1160_evk/mimxrt1166/cm7 samples/hello_world west flash

烧录完成后断电,将 SW1 改为0010b,重新上电,打开串口终端,按下 SW4 按钮复位板卡,终端应输出:

***** Booting Zephyr OS v2.6.0-xxxx-xxxxxxxxxxxxx ***** Hello World! mimxrt1160_evk

调试同样以 hello_world 为例:

west build -b mimxrt1160_evk/mimxrt1166/cm7 samples/hello_world west debug

打开串口终端,在调试器中单步执行应用,终端应输出:

***** Booting Zephyr OS v2.4.0-xxxx-xxxxxxxxxxxxx ***** Hello World! mimxrt1160_evk

(上述输出中的版本号与构建标识随实际 Zephyr 版本而变化,属示例格式。)

双核开发要点小结

  • 启动依赖:M7 是唯一拥有可执行 Flash 映射(FLEXSPI XIP)的核,M4 镜像始终存放在 Flash 分区中、运行时由 M7(或 sysbuild 自动生成的 launcher)搬运到 ocram 并引导执行;
  • 烧录顺序:双核场景先 M4 后 M7,openamp 的 sysbuild 已自动编排;
  • 共享内存:核间通信使用 ocram2 区域,但仅前 16KB 具备正确的 MPU 属性,设计共享数据结构时须注意这一边界;
  • 控制台:LPUART1 @ 115200-8-N-1,通过 OpenSDA 的 J11 USB 口输出;
  • 调试器:默认 CMSIS-DAP + LinkServer,亦可切换 J-Link(-r jlink);
  • boot 配置:烧录/启动模式由 SW1 拨码决定(0001b烧录,0010b运行),复位键为 SW4。

上述结论均可追溯到本板的设备树(mimxrt1160_evk.dtsi、cm7 dts、cm4 dts)、Kconfig(Kconfig.defconfig、Kconfig.mimxrt1160_evk)以及 runner 配置(board.cmake)。对于文档中未列出的其他特性,可参考同系列超级集板卡 mimxrt1170_evk 获取更完整的支持清单。

  • 操作系统
  • 嵌入式
  • 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/20 4:22:50

X电容放电芯片:快充头隐性失效的根源与工程对策

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

作者头像 李华
网站建设 2026/9/20 4:22:17

从一句话到3D模型:ComfyUI工作流上手指南

从一句话到3D模型:ComfyUI工作流上手指南 【免费下载链接】ComfyUI-Workflows-ZHO 我的 ComfyUI 工作流合集 | My ComfyUI workflows collection 项目地址: https://gitcode.com/GitHub_Trending/co/ComfyUI-Workflows-ZHO 下午四点,甲方发来说&q…

作者头像 李华
网站建设 2026/9/20 4:21:28

Unity VRS原生插件开发:DX12可变速率着色实战指南

1. 项目概述:VRS不是“画质开关”,而是渲染管线里的精密节流阀VRS(Variable Rate Shading,可变速率着色)这个词在Unity社区里最近两年热度陡增,但很多人一看到“VRS”三个字母,第一反应是“哦&a…

作者头像 李华
网站建设 2026/9/20 4:17:55

OpenResearch深度研究智能体实战:从任务拆解到可信来源验证

1. 先搞清楚:OpenResearch解决的是哪个层面的问题如果你习惯了在搜索引擎里输入关键词、翻十几篇网页、再自己拼凑信息的模式,第一次用OpenResearch这类AI深度研究智能体时,会有一种“研究方式被重做了一遍”的感觉。它的定位不是聊天机器人&…

作者头像 李华
网站建设 2026/9/20 4:17:42

开源轻量社区Piwind:从部署到运营的完整实践

说实话,第一次看到"派风社区Piwind"这个名字时,我第一反应是这个项目名字起得挺有意思。后来我实际把它部署起来,又跟着社区文档把内容梳理了一轮,才发现它想解决的问题远不止"再做一个论坛"那么简单。这篇文…

作者头像 李华