ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

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

Zephyr 板卡移植指南:NXP MIMXRT1020-EVK(i.MX RT1020,500 MHz Cortex-M7)开发板支持与烧录调试全解析 Zephyr 板卡移植指南NXP MIMXRT1020-EVKi.MX RT1020500 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 SDRAM64 Mbit QSPI FlashTF 卡座SD 卡连接性10/100 Mbit/s 以太网 PHYMicro USB Host 与 OTG 连接器CAN 收发器Arduino 接口音频音频编解码器Audio Codec4 极音频耳机插孔麦克风外接扬声器连接电源5 V DC 插孔调试JTAG 20 针连接器带 DAPLink 固件的 OpenSDA其中 Arduino 接口在设备树中以arduino-header-r3节点完整映射见 mimxrt1020_evk.dts覆盖 A0~A5 与 D0~D15 共 22 个引脚因此板卡 yaml 中声明了arduino_gpio与arduino_serial能力可直接配合 Arduino R3 扩展板使用。外部存储器SEMC 与 FLEXSPI 的双通道启动配置该平台配备两块外部存储器分别由 SEMC外部存储器控制器与 FLEXSPI灵活串行外设接口驱动两者都在启动阶段通过数据块完成初始化器件控制器状态MT48LC16M16A2PSDRAMSEMC通过设备配置数据块Device Configuration Data使能在启动时完成 SEMC 初始化IS25LP064AQSPI FlashFLEXSPI通过 Flash 配置块使能在启动时完成 FLEXSPI 初始化在设备树中SDRAM 被建模为memory80000000大小为 32 MBDT_SIZE_M(32)注释标明实际芯片为 ISSI IS42S16160J-6TLI见 mimxrt1020_evk.dtsFLEXSPI 节点下挂载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 地址设为0x80000000SDRAM系统可能无法启动若更换了板上的 SDRAM 或 Flash 芯片必须相应修改 DCD 与 Flash 配置块可参考 NXP 应用笔记 AN12238。Flash 分区规划8 MB 的 IS25LP064A 在设备树中被划分为 mcuboot128 KB、image-03 MB、image-13 MB与 storage2 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。这些能力与设备树中的使能节点一一对应例如以太网enet、enet_mac、enet_mdio均使能PHY 为 Microchip KSZ8081采用 RMII 接口并启用随机 MAC 地址见 mimxrt1020_evk.dts且Kconfig.defconfig默认开启ETH_DRIVERSPIlpspi1使能并复用 eDMA 通道 0/1 作为 RX/TX见 mimxrt1020_evk.dtsSD 卡usdhc1使能挂载zephyr,sdmmc-disk磁盘节点盘名 SD支持 CD 与电源控制引脚见 mimxrt1020_evk.dtsUSB 设备usb1使能并命名为zephyr_udc0ADCadc1使能输入为 ADC1 通道 10、11。板级默认 defconfig见 mimxrt1020_evk_defconfig开启CONFIG_CONSOLE、CONFIG_UART_CONSOLE、CONFIG_SERIAL、CONFIG_GPIO并启用CONFIG_ARM_MPU与CONFIG_HW_STACK_PROTECTION提供内存保护与硬件栈保护。提示对于尚未支持的特性可参考同系列的 mimxrt1064_evk 板卡文档。作为 NXP i.MX RT10xx 家族中的超集板卡NXP 优先为其提供 Zephyr Full Platform Support其上已支持的特性通常也可复用到本板。引脚连接与 I/O 规划MIMXRT1020 SoC 拥有五组 pinmux/GPIO 控制器。板卡文档给出了完整的连接分配表名称功能用途GPIO_AD_B0_05GPIOLEDGPIO_AD_B0_06LPUART1_TXUART 控制台GPIO_AD_B0_07LPUART1_RXUART 控制台GPIO_AD_B1_08LPUART2_TXUART BT HCIGPIO_AD_B1_09LPUART2_RXUART BT HCIGPIO_AD_B1_14LPI2C1_SCLI2CGPIO_AD_B1_15LPI2C1_SDAI2CGPIO_SD_B1_02LPI2C4_SCLI2CGPIO_SD_B1_03LPI2C4_SDAI2CWAKEUPGPIOSW0GPIO_AD_B0_04ENET_RST以太网GPIO_AD_B0_08ENET_REF_CLK以太网GPIO_AD_B0_09ENET_RX_DATA01以太网GPIO_AD_B0_10ENET_RX_DATA00 / LPSPI1_SCK以太网 / SPIGPIO_AD_B0_11ENET_RX_EN / LPSPI1_PCS0以太网 / SPIGPIO_AD_B0_12ENET_RX_ER / LPSPI1_SDO以太网 / SPIGPIO_AD_B0_13ENET_TX_EN / LPSPI1_SDI以太网 / SPIGPIO_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 通道 10GPIO_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 虽同时声明了spi与netif: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-ledsGPIO1_IO05低电平点亮标签 User LD1与gpio-keysGPIO5_IO00上拉、低电平有效标签 User SW4见 mimxrt1020_evk.dts并作为led0与sw0别名暴露给应用。系统时钟SysTick 主时钟与低功耗 GPT 时钟MIMXRT1020 SoC 默认使用 SysTick 作为系统时钟源运行在 500 MHz。当使能电源管理power management时板上的 32 KHz 低频振荡器会被用作 GPT 定时器的时钟源来产生系统时钟。这种方案允许进入更低的功耗状态但代价是时钟分辨率降低。设备树与 CMake 双重印证了这一机制设备树中gpt_hw_timer与systick均使能注释说明 GPT 与 SysTick 均使能若开启电源管理将改用 GPT 定时器以允许门控内核时钟见 mimxrt1020_evk.dtsCMakeLists.txt 在检测到CONFIG_MCUX_GPT_TIMER时发出告警提示 GPT 硬件定时器会启用低功耗模式但以降低硬件定时器分辨率为代价。串口规划控制台与蓝牙 HCI 分离MIMXRT1020 SoC 共有八个 UART。板级规划如下LPUART1配置为控制台consoleLPUART2配置为蓝牙主机控制接口BT HCI其余 UART 未使用。在设备树中lpuart1使能且current-speed 115200同时提供 default 与 sleep 两套 pinctrl睡眠态下 RX 引脚切换为 GPIO 并上拉见 mimxrt1020_evk.dtszephyr,console、zephyr,shell-uart、zephyr,uart-mcumgr均指向lpuart1见 mimxrt1020_evk.dts。lpuart2作为 Arduino 串口arduino_serial暴露同样配置了 default/sleep 两套 pinctrl。编程与调试三种调试主机工具MIMXRT1020-EVK 支持 3 种调试主机工具可按需安装并依照下述探针配置章节完成板级设置LinkServer默认NXP 官方支持J-LinkNXP 官方支持pyOCDNXP 不提供支持三种 runner 的板级参数定义在 board.cmakeboard_runner_args(pyocd --targetmimxrt1020) board_runner_args(jlink --deviceMIMXRT1021xxx5A) board_runner_args(linkserver --deviceMIMXRT1021xxxxx: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-DAPDAPLink。主机工具与探针的配合方式细节见 rt1xxx-lpclink2-debug.rst.incpyOCD / LinkServer按 CMSIS-DAP 流程将板上调试固件重刷为 CMSIS-DAP 固件并确保 SWD 隔离跳线已装J-Link两种方案任选其一——要么将板上调试电路刷为 Segger J-Link 固件注意 J-Link 固件不会通过调试 USB 为板卡供电需改由其他电源供电要么移除 SWD 隔离跳线将外部 J-Link 探针接到 JTAG/SWD 排针上。配置调试探针跳线与接口位置针对 RT1020 板卡调试相关的关键跳线与接口如下J47 / J48SWD 隔离跳线J42DFU 模式跳线J1620 针 JTAG/SWD 排针。配置串口控制台OpenSDA 转 USB 串口无论选择哪种调试探针串口控制台都统一通过 OpenSDA 单片机作为 USB 转串口适配器使用。操作步骤如下确认跳线J25 与 J26 已插上on出厂默认即插上以将 UART 信号连接到 OpenSDA 单片机用 USB 线将 PC 连接到J23接口使用任意串口终端minicom、putty 等连接参数如下波特率Speed115200数据位Data8 bits校验ParityNone停止位Stop bits1烧录应用以 hello_world 为例以 samples/hello_world 示例为例使用west构建并烧录到 mimxrt1020_evkwest 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、SPIDMA与 Arduino 接口等丰富外设。开发时需要注意以太网与 LPSPI1、LPUART2 与用户 LED 之间的引脚复用冲突并根据所选调试主机工具LinkServer / J-Link / pyOCD正确配置 LPC-Link2 探针固件与 SWD 隔离跳线。串口控制台统一走 OpenSDAJ23115200 8N1烧录与调试分别使用west flash与west 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),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进