news 2026/9/20 9:02:46

Zephyr 板卡移植指南:NXP MIMXRT1020-EVK(i.MX RT1020,500 MHz Cortex-M7)开发板支持与烧录调试全解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Zephyr 板卡移植指南:NXP MIMXRT1020-EVK(i.MX RT1020,500 MHz Cortex-M7)开发板支持与烧录调试全解析

Zephyr 板卡移植指南:NXP MIMXRT1020-EVK(i.MX RT1020,500 MHz Cortex-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/zephyr

本文以 Zephyr RTOS 仓库中的 NXP MIMXRT1020-EVK 板卡文档为核心,系统讲解该板卡的硬件资源、外部存储配置、引脚连接、系统时钟与串口规划,以及从调试探针配置、串口控制台建立到应用烧录与调试的完整实战流程。读完本文,你将能够基于 Zephyr 构建环境为 mimxrt1020_evk 目标板编译并烧录应用,并借助源码级证据理解板级设备树与启动配置的底层原理。

板卡概述:面向低成本封装的 i.MX RT1020 跨界处理器

MIMXRT1020-EVK 是 NXP 官方评估板,板载 i.MX RT1020 跨界处理器(crossover processor)。该芯片在低成本 LQFP 封装中提供了高性能特性集,进一步简化了客户的板级设计与布线。其核心为 Arm Cortex-M7,主频高达 500 MHz(相关说明见 板卡文档)。

在 Zephyr 中,该板卡的标识符为mimxrt1020_evk,对应器件为 MIMXRT1021DAG5A,设备树 compatible 为nxp,mimxrt1021(见 mimxrt1020_evk.dts)。板卡元数据声明其 RAM 为 32 MB(外部 SDRAM)、Flash 为 8 MB(外部 QSPI),架构为 arm(见 mimxrt1020_evk.yaml)。

硬件资源一览

根据 板卡文档,MIMXRT1020-EVK 的硬件构成如下:

  • 主控:MIMXRT1021DAG5A MCU
  • 内存
    • 256 Mbit SDRAM
    • 64 Mbit QSPI Flash
    • TF 卡座(SD 卡)
  • 连接性
    • 10/100 Mbit/s 以太网 PHY
    • Micro USB Host 与 OTG 连接器
    • CAN 收发器
    • Arduino 接口
  • 音频
    • 音频编解码器(Audio Codec)
    • 4 极音频耳机插孔
    • 麦克风
    • 外接扬声器连接
  • 电源:5 V DC 插孔
  • 调试
    • JTAG 20 针连接器
    • 带 DAPLink 固件的 OpenSDA

其中 Arduino 接口在设备树中以arduino-header-r3节点完整映射(见 mimxrt1020_evk.dts),覆盖 A0~A5 与 D0~D15 共 22 个引脚,因此板卡 yaml 中声明了arduino_gpioarduino_serial能力,可直接配合 Arduino R3 扩展板使用。

外部存储器:SEMC 与 FLEXSPI 的双通道启动配置

该平台配备两块外部存储器,分别由 SEMC(外部存储器控制器)与 FLEXSPI(灵活串行外设接口)驱动,两者都在启动阶段通过数据块完成初始化:

器件控制器状态
MT48LC16M16A2P(SDRAM)SEMC通过设备配置数据块(Device Configuration Data)使能,在启动时完成 SEMC 初始化
IS25LP064A(QSPI Flash)FLEXSPI通过 Flash 配置块使能,在启动时完成 FLEXSPI 初始化

在设备树中,SDRAM 被建模为memory@80000000,大小为 32 MB(DT_SIZE_M(32)),注释标明实际芯片为 ISSI IS42S16160J-6TLI(见 mimxrt1020_evk.dts);FLEXSPI 节点下挂载is25lp064闪存,工作频率最高 104 MHz,擦除块大小为 4 KB(见 mimxrt1020_evk.dts)。

启动阶段的初始化由 Kconfig 控制:Kconfig.defconfig 在板级默认开启DEVICE_CONFIGURATION_DATA(对应 dcd/dcd.c 的 SDRAM 设备配置数据块)与NXP_IMX_EXTERNAL_SDRAM;当启用CONFIG_BOOT_FLEXSPI_NOR时,CMakeLists.txt 会编入 xip/evkmimxrt1020_flexspi_nor_config.c 作为 Flash 配置块。该 CMake 逻辑还会给出两条重要告警:

  • 若未包含 DCD 却将 RAM 地址设为0x80000000(SDRAM),系统可能无法启动;
  • 若更换了板上的 SDRAM 或 Flash 芯片,必须相应修改 DCD 与 Flash 配置块(可参考 NXP 应用笔记 AN12238)。

Flash 分区规划:8 MB 的 IS25LP064A 在设备树中被划分为 mcuboot(128 KB)、image-0(3 MB)、image-1(3 MB)与 storage(2 MB 减 128 KB)四个分区,其中zephyr,code-partition指向 slot0(见 mimxrt1020_evk.dts),这为 MCUboot 双镜像升级预留了标准布局。

支持的板级特性

根据 mimxrt1020_evk.yaml,该板在 Zephyr 中支持:ADC、arduino_gpio、arduino_serial、counter、dma、flash、gpio、i2c、netif:eth、ptp_clock、sdhc、spi、usb_device、rtc。这些能力与设备树中的使能节点一一对应,例如:

  • 以太网enetenet_macenet_mdio均使能,PHY 为 Microchip KSZ8081,采用 RMII 接口,并启用随机 MAC 地址(见 mimxrt1020_evk.dts),且Kconfig.defconfig默认开启ETH_DRIVER
  • SPIlpspi1使能并复用 eDMA 通道 0/1 作为 RX/TX(见 mimxrt1020_evk.dts);
  • SD 卡usdhc1使能,挂载zephyr,sdmmc-disk磁盘节点,盘名 "SD",支持 CD 与电源控制引脚(见 mimxrt1020_evk.dts);
  • USB 设备usb1使能并命名为zephyr_udc0
  • ADCadc1使能,输入为 ADC1 通道 10、11。

板级默认 defconfig(见 mimxrt1020_evk_defconfig)开启CONFIG_CONSOLECONFIG_UART_CONSOLECONFIG_SERIALCONFIG_GPIO,并启用CONFIG_ARM_MPUCONFIG_HW_STACK_PROTECTION提供内存保护与硬件栈保护。

提示:对于尚未支持的特性,可参考同系列的 mimxrt1064_evk 板卡文档。作为 NXP i.MX RT10xx 家族中的超集板卡,NXP 优先为其提供 Zephyr Full Platform Support,其上已支持的特性通常也可复用到本板。

引脚连接与 I/O 规划

MIMXRT1020 SoC 拥有五组 pinmux/GPIO 控制器。板卡文档给出了完整的连接分配表:

名称功能用途
GPIO_AD_B0_05GPIOLED
GPIO_AD_B0_06LPUART1_TXUART 控制台
GPIO_AD_B0_07LPUART1_RXUART 控制台
GPIO_AD_B1_08LPUART2_TXUART BT HCI
GPIO_AD_B1_09LPUART2_RXUART BT HCI
GPIO_AD_B1_14LPI2C1_SCLI2C
GPIO_AD_B1_15LPI2C1_SDAI2C
GPIO_SD_B1_02LPI2C4_SCLI2C
GPIO_SD_B1_03LPI2C4_SDAI2C
WAKEUPGPIOSW0
GPIO_AD_B0_04ENET_RST以太网
GPIO_AD_B0_08ENET_REF_CLK以太网
GPIO_AD_B0_09ENET_RX_DATA01以太网
GPIO_AD_B0_10ENET_RX_DATA00 / LPSPI1_SCK以太网 / SPI
GPIO_AD_B0_11ENET_RX_EN / LPSPI1_PCS0以太网 / SPI
GPIO_AD_B0_12ENET_RX_ER / LPSPI1_SDO以太网 / SPI
GPIO_AD_B0_13ENET_TX_EN / LPSPI1_SDI以太网 / SPI
GPIO_AD_B0_14ENET_TX_DATA00以太网
GPIO_AD_B0_15ENET_TX_DATA01以太网
GPIO_AD_B1_06ENET_INT以太网
GPIO_EMC_41ENET_MDC以太网
GPIO_EMC_40ENET_MDIO以太网
GPIO_AD_B1_07USDHC1_VSELECTSD 卡
GPIO_SD_B0_02USDHC1_CMDSD 卡
GPIO_SD_B0_03USDHC1_CLKSD 卡
GPIO_SD_B0_04USDHC1_DATA0SD 卡
GPIO_SD_B0_05USDHC1_DATA1SD 卡
GPIO_SD_B0_00USDHC1_DATA2SD 卡
GPIO_SD_B0_01USDHC1_DATA3SD 卡
GPIO_SD_B0_06USDHC1_CD_BSD 卡
GPIO_AD_B1_10ADCADC1 通道 10
GPIO_AD_B1_11ADCADC1 通道 11

这些分配在 mimxrt1020_evk-pinctrl.dtsi 中有完整的引脚复用定义。有几个值得注意的引脚复用冲突:

  • LED 与以太网复位冲突GPIO_AD_B0_04同时用于 ENET_RST 与用户 LED 相关复用,注释明确标注 "USER_LED conflicts with ENET_RST"(见 pinctrl 文件 L23);
  • 以太网与 LPSPI1 冲突GPIO_AD_B0_10 ~ B0_13四个引脚在 ENET 与 LPSPI1 之间复用(pinctrl 文件 L125 标注 "conflicts with enet pinmux"),因此以太网与 SPI 不能同时使用,板卡 yaml 虽同时声明了spinetif:eth,但实际工程中需按需取舍;
  • LPUART2 与用户 LED 冲突:pinctrl 文件 L166、L177 均标注 "conflicts with user led"。

此外,USDHC1 针对不同工作频率提供了四套引脚配置(default / slow / med / fast,对应 50 MHz 以下、100 MHz 以下与 100 MHz 以上场景),并在设备树中通过pinctrl-names引用(见 mimxrt1020_evk.dts 与 mimxrt1020_evk-pinctrl.dtsi)。

用户 LED 与按键在设备树中分别建模为gpio-leds(GPIO1_IO05,低电平点亮,标签 "User LD1")与gpio-keys(GPIO5_IO00,上拉、低电平有效,标签 "User SW4",见 mimxrt1020_evk.dts),并作为led0sw0别名暴露给应用。

系统时钟:SysTick 主时钟与低功耗 GPT 时钟

MIMXRT1020 SoC 默认使用 SysTick 作为系统时钟源,运行在 500 MHz。

当使能电源管理(power management)时,板上的 32 KHz 低频振荡器会被用作 GPT 定时器的时钟源来产生系统时钟。这种方案允许进入更低的功耗状态,但代价是时钟分辨率降低。设备树与 CMake 双重印证了这一机制:

  • 设备树中gpt_hw_timersystick均使能,注释说明 "GPT 与 SysTick 均使能;若开启电源管理,将改用 GPT 定时器以允许门控内核时钟"(见 mimxrt1020_evk.dts);
  • CMakeLists.txt 在检测到CONFIG_MCUX_GPT_TIMER时发出告警,提示 GPT 硬件定时器会启用低功耗模式,但以降低硬件定时器分辨率为代价。

串口规划:控制台与蓝牙 HCI 分离

MIMXRT1020 SoC 共有八个 UART。板级规划如下:

  • LPUART1:配置为控制台(console);
  • LPUART2:配置为蓝牙主机控制接口(BT HCI);
  • 其余 UART 未使用。

在设备树中,lpuart1使能且current-speed = <115200>,同时提供 "default" 与 "sleep" 两套 pinctrl(睡眠态下 RX 引脚切换为 GPIO 并上拉)(见 mimxrt1020_evk.dts);zephyr,consolezephyr,shell-uartzephyr,uart-mcumgr均指向lpuart1(见 mimxrt1020_evk.dts)。lpuart2作为 Arduino 串口(arduino_serial)暴露,同样配置了 default/sleep 两套 pinctrl。

编程与调试:三种调试主机工具

MIMXRT1020-EVK 支持 3 种调试主机工具,可按需安装并依照下述探针配置章节完成板级设置:

  • LinkServer(默认,NXP 官方支持)
  • J-Link(NXP 官方支持)
  • pyOCD(NXP 不提供支持)

三种 runner 的板级参数定义在 board.cmake:

board_runner_args(pyocd "--target=mimxrt1020") board_runner_args(jlink "--device=MIMXRT1021xxx5A") board_runner_args(linkserver "--device=MIMXRT1021xxxxx:EVK-MIMXRT1020") include(${ZEPHYR_BASE}/boards/common/linkserver.board.cmake) include(${ZEPHYR_BASE}/boards/common/jlink.board.cmake) include(${ZEPHYR_BASE}/boards/common/pyocd.board.cmake)

板卡自身搭载 LPC-Link2 调试探针,默认固件为 CMSIS-DAP(DAPLink)。主机工具与探针的配合方式(细节见 rt1xxx-lpclink2-debug.rst.inc):

  • pyOCD / LinkServer:按 CMSIS-DAP 流程将板上调试固件重刷为 CMSIS-DAP 固件,并确保 SWD 隔离跳线已装;
  • J-Link:两种方案任选其一——要么将板上调试电路刷为 Segger J-Link 固件(注意 J-Link 固件不会通过调试 USB 为板卡供电,需改由其他电源供电),要么移除 SWD 隔离跳线,将外部 J-Link 探针接到 JTAG/SWD 排针上。

配置调试探针:跳线与接口位置

针对 RT1020 板卡,调试相关的关键跳线与接口如下:

  • J47 / J48:SWD 隔离跳线;
  • J42:DFU 模式跳线;
  • J16:20 针 JTAG/SWD 排针。

配置串口控制台:OpenSDA 转 USB 串口

无论选择哪种调试探针,串口控制台都统一通过 OpenSDA 单片机作为 USB 转串口适配器使用。操作步骤如下:

  1. 确认跳线J25 与 J26 已插上(on)(出厂默认即插上),以将 UART 信号连接到 OpenSDA 单片机;
  2. 用 USB 线将 PC 连接到J23接口;
  3. 使用任意串口终端(minicom、putty 等)连接,参数如下:
    • 波特率(Speed):115200
    • 数据位(Data):8 bits
    • 校验(Parity):None
    • 停止位(Stop bits):1

烧录应用:以 hello_world 为例

以 samples/hello_world 示例为例,使用west构建并烧录到 mimxrt1020_evk:

west build -b mimxrt1020_evk samples/hello_world west flash

打开串口终端,按下板上的SW5复位按键,即可在终端看到如下输出:

***** Booting Zephyr OS v1.14.0-rc1 ***** Hello World! mimxrt1020_evk

调试应用:连接调试器逐步执行

仍以 hello_world 为例,使用west启动调试会话:

west build -b mimxrt1020_evk samples/hello_world west debug

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

***** Booting Zephyr OS v1.14.0-rc1 ***** Hello World! mimxrt1020_evk

总结

MIMXRT1020-EVK 在 Zephyr 中是一个功能完备的 Cortex-M7 板卡目标:8 MB QSPI Flash 经 FLEXSPI 启动、32 MB SDRAM 经 SEMC 启动,提供以太网、SD 卡、USB 设备、ADC、I2C、SPI(DMA)与 Arduino 接口等丰富外设。开发时需要注意以太网与 LPSPI1、LPUART2 与用户 LED 之间的引脚复用冲突,并根据所选调试主机工具(LinkServer / J-Link / pyOCD)正确配置 LPC-Link2 探针固件与 SWD 隔离跳线。串口控制台统一走 OpenSDA(J23,115200 8N1),烧录与调试分别使用west flashwest debug,配合复位按键 SW5 即可快速完成应用验证。

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

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

QuickRecorder:macOS免费录屏工具,从安装到进阶的完整指南

QuickRecorder&#xff1a;macOS免费录屏工具&#xff0c;从安装到进阶的完整指南 【免费下载链接】QuickRecorder A lightweight screen recorder based on ScreenCapture Kit for macOS / 基于 ScreenCapture Kit 的轻量化多功能 macOS 录屏工具 项目地址: https://gitcode…

作者头像 李华
网站建设 2026/9/20 8:59:36

Qt for MCUs 2.11 LTS与Qt 5.15.19发布解析:MCU图形开发与Qt 5迁移指南

/* 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 8:59:07

WINCC 7.4与S7-200 SMART通过Modbus TCP和OPC通讯配置详解

/* 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 8:59:01

Claude Code /compact 报错解析与上下文优化实战指南

/* 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 8:56:18

Claude Code CLI 安装与权限配置全指南:从npm到命令执行

第一次在终端敲下npm install -g anthropic-ai/claude-code时&#xff0c;我觉得这不就是一次普通 npm 全局安装&#xff1f;结果那条命令卡了十几分钟&#xff0c;报了一串ERR! ERESOLVE overriding peer dependency&#xff0c;装完之后又遇到claude 无法加载、npm.ps1 因为在…

作者头像 李华
网站建设 2026/9/20 8:54:09

让AI按格填空:结构化表格与提示词工程驯服大模型输出

1. 为什么要“驯服”AI的输出先说说我自己的经历。早先我给AI提需求&#xff0c;基本是“帮我写一份产品周报”这种模糊指令&#xff0c;AI确实能写&#xff0c;但每次返回的结构都不一样——有时是段落式&#xff0c;有时给我列几条要点&#xff0c;有时干脆分不清到底哪个是结…

作者头像 李华