- 操作系统
- 嵌入式
- RTOS
- 物联网
【免费下载链接】zephyr
Primary Git Repository for the Zephyr Project. Zephyr is a new generation, scalable, optimized, secure RTOS for multiple hardware architectures.
导读
本文以 Zephyr RTOS 仓库中的 MIMXRT1024-EVK 板级文档 为核心,全面讲解这块基于 NXP i.MX RT1024 跨界处理器(Arm Cortex-M7 @ 500 MHz)的评估板在 Zephyr 中的使用方法。你将掌握该板的硬件资源布局、外部存储器与板级外设的使能方式、系统时钟与串口配置、完整的引脚复用(pinmux)映射表,以及使用 west 命令进行编译、烧录和调试的完整流程,可直接在真实硬件上跑通 hello_world 并开始自己的应用开发。
一、板卡概览:低成本 LQFP 封装的高性能跨界 MCU
i.MX RT1024 是 NXP i.MX RT10xx 跨界处理器家族中的一员,定位是在低成本 LQFP 封装内提供高性能特性,从而简化客户的板卡设计与布线。它运行 Arm Cortex-M7 内核,主频 500 MHz,板载 MCU 型号为 MIMXRT1024DAG5A(600 MHz 主频、256 KB 片上内存、4096 KB 片上 QSPI 闪存)。
从 Zephyr 仓库的板级定义文件 mimxrt1024_evk.yaml 可以看到,该板被声明为type: mcu、arch: arm,支持 zephyr 与 gnuarmemb 两种工具链,并对外宣称支持以下特性:
| 特性类别 | 说明 |
|---|---|
| adc / arduino_gpio / arduino_serial | 模拟采样与 Arduino 兼容接口 |
| can / dma / flash / gpio | CAN 总线、DMA、Flash 存储与 GPIO |
| hwinfo / netif:eth / ptp_clock | 硬件信息、以太网接口与 PTP 时钟 |
| pwm / sdhc / spi / usb_device | PWM、SD 卡、SPI 与 USB 设备 |
| watchdog / rtc | 看门狗与实时时钟 |
在 board.yml 中,板卡 SoC 被绑定为mimxrt1024;而 Kconfig.mimxrt1024_evk 则通过select SOC_PART_NUMBER_MIMXRT1024DAG5A将具体芯片型号固化到板级配置中。
硬件资源清单
按板卡文档整理,MIMXRT1024-EVK 的硬件资源可分为以下几类:
- 存储:256 Mbit SDRAM、32 Mbit QSPI Flash、用于 SD 卡的 TF 卡座。
- 连接:10/100 Mbit/s 以太网 PHY、Micro USB Host 与 OTG 连接器、CAN 收发器、Arduino 接口。
- 音频:音频编解码器(Audio Codec)、4 极音频耳机插孔、麦克风、外部扬声器连接。
- 电源:5 V DC 电源插孔。
- 调试:10 针 JTAG 连接器、带 DAPLink 固件的 OpenSDA。
- 传感器:6 轴 FXOS8700CQ 数字加速度计与磁力计。
这些外设在 Zephyr 的板级设备树 mimxrt1024_evk.dts 中均有对应节点,例如fxos8700挂接在 LPI2C4 总线上(地址0x1f),SD 卡通过usdhc1以zephyr,sdmmc-disk形式注册为名为 "SD" 的磁盘。
二、外部存储器:SEMC 与 QSPI Flash 的板级使能
该平台的外部存储器配置如下:
| 器件 | 控制器 | 状态 |
|---|---|---|
| MT48LC16M16A2P(SDRAM) | SEMC | 通过设备配置数据块(device configuration data block)在启动时初始化 SEMC 从而启用 |
设备树 mimxrt1024_evk.dts 中,SDRAM 被声明为sdram0: memory@80000000(ISSI IS42S16160J-6TLI,容量 32 MB),同时通过chosen节点将其指定为zephyr,sram,即默认的运行内存。
QSPI Flash 方面,板载 32 Mbit(4 MB)的 W25Q32JV,被指定为zephyr,flash与zephyr,flash-controller。该 Flash 上预置了 4 个分区(扇区大小为 4 KB,分区大小均按 4 KB 对齐):
| 分区 | 标签 | 起始地址 | 大小 |
|---|---|---|---|
| boot_partition | mcuboot | 0x00000000 | 128 KB |
| slot0_partition | image-0 | 0x00020000 | 1924 KB |
| slot1_partition | image-1 | 0x00201000 | 1924 KB |
| storage_partition | storage | 0x003e2000 | 120 KB |
这是标准的 MCUboot 双槽(A/B)OTA 布局,zephyr,code-partition指向slot0_partition,方便直接配合 samples/boards/mcuboot 一类的引导方案使用。
从板级构建脚本 CMakeLists.txt 可以进一步看到底层实现:
- 当启用
CONFIG_DEVICE_CONFIGURATION_DATA时,会编译 dcd/dcd.c(DCD,Device Configuration Data),它负责在启动阶段配置 SEMC 以初始化外部 SDRAM; - 当启用
CONFIG_BOOT_FLEXSPI_NOR时,会编译 xip/evkmimxrt1024_flexspi_nor_config.c,用于配置 FlexSPI NOR Flash 的启动参数。
若把 SDRAM 用作 RAM 但未包含 DCD,构建时会给出告警:“You are using SDRAM as RAM but no device configuration data (DCD) is included. This configuration may not boot”。板级默认配置 Kconfig.defconfig 中已经默认使能了DEVICE_CONFIGURATION_DATA与NXP_IMX_EXTERNAL_SDRAM,因此开箱即可正常运行在外部 SDRAM 上。
三、支持的特性与兼容策略
板卡文档明确给出提示:对于尚未支持的特性,请参照同系列的超集板卡 mimxrt1064_evk。NXP 优先为超集板卡提供 Zephyr 的完整平台支持(Full Platform Support),因此 mimxrt1064_evk 上已经支持的额外特性,通常也可以复用到本板(mimxrt1024_evk)上。
从设备树看,本板已使能的主要外设包括:
- 以太网:
enet/enet_mac/enet_mdio均处于okay状态,PHY 为 Microchip KSZ8081(RMII 接口),支持随机 MAC 地址(zephyr,random-mac-address)与 PTP 时钟(enet_ptp_clock); - 串口:
lpuart1(控制台,115200 波特率)、lpuart2(Arduino 串口); - CAN:
flexcan1,带can-transceiver节点(最大比特率 5 Mbps); - I2C:
lpi2c4,挂载 FXOS8700 六轴传感器; - SPI:
lpspi1,通过edma0的通道 0/1 映射到 RX/TX DMA; - ADC:
adc1; - 定时器:
gpt_hw_timer与systick同时使能; - USB:
usb1(作为zephyr_udc0使用); - SD 卡:
usdhc1,带 4 组不同速度等级的 pinmux; - 看门狗与 RTC 计数器:
wdog0、counter_rtc。
四、连接与 I/O:完整引脚映射表
MIMXRT1024 SoC 拥有五对 pinmux/GPIO 控制器。板卡文档给出了以下经过验证的引脚映射(这也是 mimxrt1024_evk-pinctrl.dtsi 中 pinmux 配置的来源):
| 引脚名 | 复用功能 | 用途 |
|---|---|---|
| GPIO_AD_B1_08 | GPIO | LED |
| GPIO_AD_B0_06 | LPUART1_TX | UART 控制台 |
| GPIO_AD_B0_07 | LPUART1_RX | UART 控制台 |
| WAKEUP | GPIO | SW4 |
| GPIO_AD_B0_04 | ENET_RST | 以太网 |
| GPIO_AD_B0_08 | ENET_REF_CLK | 以太网 |
| GPIO_AD_B0_09 | ENET_RX_DATA01 | 以太网 |
| GPIO_AD_B0_10 | ENET_RX_DATA00 / LPSPI1_SCK | 以太网 / SPI |
| GPIO_AD_B0_11 | ENET_RX_EN / LPSPI1_PCS0 | 以太网 / SPI |
| GPIO_AD_B0_12 | ENET_RX_ER / LPSPI1_SDO | 以太网 / SPI |
| GPIO_AD_B0_13 | ENET_TX_EN / LPSPI1_SDI | 以太网 / SPI |
| GPIO_AD_B0_14 | ENET_TX_DATA00 | 以太网 |
| GPIO_AD_B0_15 | ENET_TX_DATA01 | 以太网 |
| GPIO_AD_B1_06 | ENET_INT | 以太网 |
| GPIO_EMC_41 | ENET_MDC | 以太网 |
| GPIO_EMC_40 | ENET_MDIO | 以太网 |
| GPIO_SD_B1_00 | FLEXCAN1_TX | CAN TX |
| GPIO_SD_B1_01 | FLEXCAN1_RX | CAN RX |
| GPIO_SD_B1_02 | LPI2C4_SCL | I2C SCL |
| GPIO_SD_B1_03 | LPI2C4_SDA | I2C SDA |
| GPIO_SD_B1_05 | DQS | QSPI Flash |
| GPIO_AD_B1_11 | ADC1 | ADC1 通道 11 |
| GPIO_AD_B1_10 | ADC1 | ADC1 通道 10 |
| GPIO_AD_B1_10 | FLEXPWM1 | FLEXPWM1 通道 A2 |
注意:上表中有几处引脚存在复用冲突,这正是 pinmux 文件中的注释所强调的:
GPIO_AD_B0_10 ~ _13四个引脚同时承担 ENET 数据/控制信号与 LPSPI1 功能(/* conflicts with enet pinmux */),因此以太网与 SPI 不能同时使用这两组功能;GPIO_AD_B1_08既是用户 LED(GPIO)又是 LPUART2_TX(/* conflicts with user led */);GPIO_AD_B1_10同时映射 ADC1 通道 10 与 FLEXPWM1 A2。
与设备树的对应关系
设备树中leds节点将green_led绑定到gpio1的 24 号引脚(即GPIO_AD_B1_08,active-high),并作为led0别名;gpio_keys节点将user_button绑定到gpio5的 0 号引脚(WAKEUP,上拉、active-low),按键事件码为INPUT_KEY_0,同时作为sw0与mcuboot-button0。arduino_header节点则通过arduino-header-r3兼容绑定,把 Arduino UNO R3 的 A0~A5、D0~D15 全部映射到 GPIO1/GPIO3 的具体引脚上。
五、系统时钟:SysTick 与 GPT 的电源管理协作
MIMXRT1024 SoC 默认使用SysTick作为系统时钟源,运行在 500 MHz。设备树中systick与gpt_hw_timer同时处于使能状态,其协作逻辑如下:
- 当未启用电源管理时,使用 SysTick 提供系统时钟;
- 当启用电源管理后,板上的 32 KHz 低频振荡器将作为 GPT 定时器的时钟源来产生系统时钟,从而允许内核时钟被门控(gate),进入更低的功耗状态,代价是系统时钟分辨率降低。
构建脚本 CMakeLists.txt 中对应地给出告警:启用CONFIG_MCUX_GPT_TIMER会开启更低功耗模式,但会降低硬件定时器分辨率。如果你在意定时精度,就不要在启用电源管理时使用 GPT。
六、串口(Serial Port):控制台配置
MIMXRT1024 SoC 共有八个 UART,其中只有LPUART1被配置为 Zephyr 控制台,其余未使用。设备树chosen节点中的zephyr,console、zephyr,shell-uart、zephyr,uart-mcumgr均指向lpuart1,波特率设定为 115200(current-speed = <115200>)。
控制台对应的默认配置见 mimxrt1024_evk_defconfig:CONFIG_CONSOLE=y、CONFIG_UART_CONSOLE=y、CONFIG_SERIAL=y。此外该 defconfig 还默认开启了CONFIG_GPIO、CONFIG_ARM_MPU与CONFIG_HW_STACK_PROTECTION,说明板卡默认即带 MPU 内存保护与硬件栈保护。
七、烧录与调试(Programming and Debugging)
支持的调试主机工具
板卡文档说明该板支持 3 种调试主机工具,安装你偏好的工具后,再按下方“配置调试探针”一节进行设置:
| 工具 | 说明 |
|---|---|
| LinkServer | 默认,NXP 官方支持 |
| J-Link | NXP 官方支持 |
| pyOCD | NXP 不官方支持 |
对应关系同样体现在 board.cmake 中:
board_runner_args(pyocd "--target=mimxrt1024") board_runner_args(jlink "--device=MIMXRT1024xxx5A") board_runner_args(linkserver "--device=MIMXRT1024xxxxx:MIMXRT1024-EVK")它分别声明了三个 runner 的器件参数,并引入linkserver.board.cmake、jlink.board.cmake、pyocd.board.cmake三个通用构建模块。
配置调试探针
RT1024 板上的关键跳线与接口:
- J47 / J48:SWD 隔离跳线;
- J42:DFU 模式跳线;
- J55:10 针 JTAG/SWD 排针。
板载调试探针为 LPC-Link2,出厂固件为 CMSIS-DAP(DAPLink)形态,具体配置方法见 boards/nxp/common/rt1xxx-lpclink2-debug.rst.inc:
- 使用 LinkServer / pyOCD(CMSIS-DAP 模式):按 LPC-Link2 的说明将板载探针固件重刷为 CMSIS-DAP 固件,并确保 SWD 隔离跳线已安装(populated)。
- 使用 J-Link 模式:有两种选择——将板载调试电路刷为 Segger J-Link 固件(注意 J-Link 固件不会通过调试 USB 给板供电,需为 EVK 切换其他电源来源),或将外部 J-Link 探针接到外部 JTAG/SWD 排针(此时需移除 SWD 隔离跳线)。
配置控制台(串口终端)
无论选择哪种调试探针,都使用OpenSDA 单片机作为 USB 转串口适配器。请确认跳线J50 与 J46 处于 ON 状态(出厂时默认如此),将 UART 信号连接到 OpenSDA 单片机,然后用 USB 线连接 PC 与J23。
使用任意串口终端(minicom、putty 等),参数如下:
- 波特率:115200
- 数据位:8
- 校验:无(None)
- 停止位:1
烧录(Flashing)
以 samples/hello_world 为例,在已配置好 Zephyr 环境的终端中执行:
west build -b mimxrt1024_evk samples/hello_world west flash(west flash等价于带:goals: flash的 zephyr-app-commands 指令,构建目标为flash。)
打开串口终端,按下板上SW9 复位按键,应能看到以下输出:
***** Booting Zephyr OS v2.4.0-rc1 ***** Hello World! mimxrt1024_evk说明:示例输出中的版本号取决于你当前仓库的 Zephyr 版本,实际构建时会打印对应版本的启动横幅。
调试(Debugging)
同样以 hello_world 为例,将构建目标改为debug:
west build -b mimxrt1024_evk samples/hello_world west debug打开串口终端,在调试器中单步执行程序,终端应出现与烧录时相同的输出:
***** Booting Zephyr OS v2.4.0-rc1 ***** Hello World! mimxrt1024_evk八、从板级文件到实际应用的落地建议
综合上述板级文件,可以提炼出几条在本板上开展实际开发的关键建议:
- 默认从外部 SDRAM 运行:
zephyr,sram指向sdram0,启动依赖 DCD 初始化 SEMC,因此不要随意关闭CONFIG_DEVICE_CONFIGURATION_DATA,否则可能无法启动。 - 以太网与 LPSPI1 二选一:两组功能共享
GPIO_AD_B0_10~13引脚,如果要用 samples/net 下的网络例程,需避免同时使能 SPI;反之亦然。 - LED 与 LPUART2 二选一:
GPIO_AD_B1_08既是用户 LED 又是 LPUART2_TX,使用 Arduino 串口时需注意引脚冲突。 - 电源管理会切换时钟源:启用低功耗时系统时钟会从 SysTick 切到由 32 KHz 晶振驱动的 GPT,精度下降是预期行为。
- OTA 分区已就绪:QSPI Flash 上的双槽分区布局(mimxrt1024_evk.dts)与
mcuboot-button0别名可直接支撑 MCUboot 引导与镜像升级流程。 - 复用超集板经验:当需要某些本板尚未支持的特性时,优先查阅同系列超集板 mimxrt1064_evk 板级文档 的实现方式,往往可以直接迁移。
结语
MIMXRT1024-EVK 以低成本 LQFP 封装提供了 Cortex-M7 500 MHz 的性能,而 Zephyr 的板级支持让它开箱即可使用完整的设备树、引脚复用、存储分区与多工具链烧录调试流程。通过本文梳理的硬件资源、引脚映射、时钟策略与构建调试命令,你可以快速在该板上验证 Zephyr 的网络、存储、传感器与实时控制能力,并基于 board 目录 中的 dts、defconfig 与 pinctrl 文件为定制硬件提供直接参考。
- 操作系统
- 嵌入式
- RTOS
- 物联网
【免费下载链接】zephyr
Primary Git Repository for the Zephyr Project. Zephyr is a new generation, scalable, optimized, secure RTOS for multiple hardware architectures.
相关推荐
Zephyr RTOS 之 NXP FRDM-MCXE247 开发板:硬件特性、引脚映射与烧录调试实战指南
Zephyr RTOS 之 NXP FRDM MCXE247 开发板:硬件特性、引脚映射与烧录调试实战指南 FRDM MCXE247 是 NXP 面向 MCX
操作系统嵌入式RTOS物联网Zephyr 下 NXP FRDM-MCXE31B 开发板实战指南:硬件特性、引脚映射、以太网与烧录调试
Zephyr 下 NXP FRDM MCXE31B 开发板实战指南:硬件特性、引脚映射、以太网与烧录调试 FRDM MCXE31B 是 NXP 推出的一款基于
操作系统嵌入式RTOS物联网NXP FRDM-K22F 开发板 Zephyr 移植指南:硬件特性、引脚映射与烧录调试实战
NXP FRDM K22F 开发板 Zephyr 移植指南:硬件特性、引脚映射与烧录调试实战 导读 本文以 Zephyr 官方仓库中 FRDM K22F 开发板
操作系统嵌入式RTOS物联网
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考