- 操作系统
- 嵌入式
- RTOS
- 物联网
【免费下载链接】zephyr
Primary Git Repository for the Zephyr Project. Zephyr is a new generation, scalable, optimized, secure RTOS for multiple hardware architectures.
本篇技术指南以 Zephyr RTOS 中 mimxrt1160_evk 板级支持包为核心,系统讲解 NXP i.MX RT1160 双核跨界 MCU 评估板在 Zephyr 下的硬件资源布局、双核(Cortex-M7/M4)内存映射与启动机制、sysbuild 双核镜像构建流程、串口控制台配置,以及基于 LinkServer / J-Link 的烧录与调试实战。读完本文,你将掌握如何在 Zephyr 中为目标mimxrt1160_evk/mimxrt1166/cm7与mimxrt1160_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_DATA与NXP_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 目标支持:can、counter、dma、flash、gpio、hwinfo、i2c、netif:eth、ptp_clock、pwm、spi、usb_device、usbd、watchdog;M4 目标(mimxrt1160_evk_mimxrt1166_cm4.yaml)支持dma、flash、gpio、i2c、pwm、uart。ram/flash 声明分别为 M7(256KB / 16384KB)与 M4(128KB / 128KB)。
需要注意的是,当前尚未支持的特性可参考同系列的mimxrt1170_evk超级集板卡:NXP 优先在超级集板卡上完成全平台支持(Full Platform Support),因此 mimxrt1170_evk 上已支持的特性大多可以直接复用到本板。
部分特性通过 Zephyr Shields 完成验证:
rk055hdmipi4m、rk055hdmipi4ma0、g1120b0mipi—— 用于 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_lcdif、zephyr_mipi_dsi、nxp_mipi_csi、nxp_csi等符号供 shield 引用。
连接与 I/O 引脚分配
MIMXRT1160 SoC 共有六对 pinmux/GPIO 控制器。板级文档给出了关键引脚的复用与用途对照表,这些映射与 mimxrt1160_evk-pinctrl.dtsi 中的 pinmux 节点一一对应:
| 引脚名 | 复用功能 | 用途 |
|---|---|---|
| WAKEUP | GPIO | SW7 按键 |
| GPIO_AD_04 | GPIO | LED(用户 LED D6,绿色,低电平有效) |
| GPIO_AD_24 | LPUART1_TX | UART 控制台 |
| GPIO_AD_25 | LPUART1_RX | UART 控制台 |
| GPIO_LPSR_00 | CAN3_TX | flexcan |
| GPIO_LPSR_01 | CAN3_RX | flexcan |
| GPIO_AD_29 | SPI1_CS0 | spi |
| GPIO_AD_28 | SPI1_CLK | spi |
| GPIO_AD_30 | SPI1_SDO | spi |
| GPIO_AD_31 | SPI1_SDI | spi |
| GPIO_AD_08 | LPI2C1_SCL | i2c |
| GPIO_AD_09 | LPI2C1_SDA | i2c |
| GPIO_LPSR_05 | LPI2C5_SCL | i2c(连接 FXOS8700 传感器) |
| GPIO_LPSR_04 | LPI2C5_SDA | i2c(连接 FXOS8700 传感器) |
| GPIO_AD_04 | FLEXPWM1_PWM2 | pwm(绿色 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 中最重要的架构主题。板级文档给出了双核协作的地址约定:
双核启动地址
| Core | Boot Address | 说明 |
|---|---|---|
| Cortex-M7 | 0x30000000[630K] | primary core,从 FLEXSPI 映射的 Flash 启动 |
| Cortex-M4 | 0x20020000[96K] | 从 OCRAM 启动 |
双核内存布局
| 内存 | 地址[大小] | 用途 |
|---|---|---|
| flexspi1 | 0x30000000[16M] | Cortex-M7 Flash |
| sdram0 | 0x80030000[64M] | Cortex-M7 RAM |
| ocram | 0x20020000[512K] | Cortex-M4 "flash" |
| sram1 | 0x20000000[128K] | Cortex-M4 RAM |
| ocram2 | 0x200C0000[512K] | Mailbox/共享内存 |
需要特别留意:ocram2 只有前 16KB 被正确设置了 MPU region 属性,可用于共享内存。
源码印证:M7 设备树的chosen节点将zephyr,sram指向sdram0、zephyr,code-partition指向slot0_partition、zephyr,cpu1-region指向ocram、zephyr,ipc指向mailbox_a;M4 设备树则将zephyr,sram指向sram1(并注释提示:使用 DMA 时 SRAM 必须选非缓存区域,否则会出问题)、zephyr,flash指向ocram_m4_itcm、nxp,m4-partition指向slot1_partition、zephyr,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_LMA按dt_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_timer与systick同时被使能,注释明确说明:若使能电源管理,将改用 GPT 定时器以便门控核心时钟(见 mimxrt1160_evk_mimxrt1166_cm7.dts)。
串口:MIMXRT1160 SoC 共有 12 个 UART,其中LPUART1 配置为控制台(zephyr,console与zephyr,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),支持两种使用方式:
- LinkServer runner(配合板载默认 CMSIS-DAP 固件);
- 将板载调试电路刷写为 Segger J-Link 固件,或外接 J-Link 探针。
从 board.cmake 可以看到三种 runner 的设备参数已预配置:
- M7 目标(或
SECOND_CORE_MCUX):linkserver --device=MIMXRT1166xxxxx:MIMXRT1160-EVK、jlink --device=MIMXRT1166xxx6_M7 --reset-after-load、pyocd --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.
相关推荐
Zephyr 在 NXP i.MX8M Plus EVK 上的多核移植实战:A53 与 M7 双核启动、烧录与调试指南
Zephyr 在 NXP i.MX8M Plus EVK 上的多核移植实战:A53 与 M7 双核启动、烧录与调试指南 导读 本文以 Zephyr 官方仓库中
操作系统嵌入式RTOS物联网Zephyr 在 NXP FRDM-MCXA156 上的开发指南:硬件特性、构建烧录与调试实战
Zephyr 在 NXP FRDM MCXA156 上的开发指南:硬件特性、构建烧录与调试实战 本指南基于 Zephyr 仓库内 boards/nxp/frdm
操作系统嵌入式RTOS物联网在 NXP i.MX8M Mini EVK 上运行 Zephyr:A53/M4 双核启动、烧录与调试完整指南
在 NXP i.MX8M Mini EVK 上运行 Zephyr:A53/M4 双核启动、烧录与调试完整指南 本指南以 Zephyr 仓库中的 imx8mm_e
操作系统嵌入式RTOS物联网
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考