i.MX RT1050 作为 NXP 首款跨界处理器,在嵌入式系统中广泛应用于需要大容量存储与高速执行的场景。FLEXSPI NOR Flash 模式下的 XIP(直接执行)启动与调试,是释放其性能的关键配置,但需解决硬件适配、固件更新、工程配置等多重问题。本文基于 NXP 官方文档 AN12183,详解从硬件改造到软件调试的完整流程,覆盖 Hyper Flash/QSPI NOR Flash 多场景适配,助力开发者快速落地。
资料获取:怎样在 FLEXSPI NOR Flash 模式下使能调试
1. 核心目标与适用范围
1.1 核心目标
实现可执行文件在 FLEXSPI NOR Flash 的烧录、XIP 启动与在线调试,同时支持 Hyper Flash 与 QSPI NOR Flash 切换,兼容新型号 Flash(如 GD25Q64C)适配。
1.2 适用环境
- 硬件平台:IMXRT1050-EVK/IMXRT1050-EVKB 开发板
- 开发工具:IAR Embedded Workbench 8.22.1、MCUXpresso IDE
- 软件资源:MIMXRT1050 SDK(v2.3.1)、OpenSDA 固件、Flash 驱动(如 MIMXRT10XX_SFDP_QSPI.cfx)
- 支持 Flash 类型:板载 Hyper Flash、板载 QSPI NOR Flash(IS25WP064A)、第三方 QSPI Flash(GD25Q64C/GD25LQ64C)
2. 硬件配置:EVK/EVKB 开发板改造
2.1 IMXRT1050-EVK(标准版)设置
- 移除板载 Hyper Flash,避免干扰 QSPI NOR Flash 读写时序。
- 在 R153-R158 位置焊接 0Ω 电阻,启用 QSPI NOR Flash 硬件链路。
- 更新 OpenSDA 固件:替换为 QSPI NOR Flash 专用固件(NXP 官网可下载),原固件默认适配 Hyper Flash。
2.2 IMXRT1050-EVKB(增强版)设置
- 无需移除 Hyper Flash,仅需移除电阻 R356、R361-R366。
- 同 EVK 设置,在 R153-R158 位置焊接 0Ω 电阻。
- 更新 OpenSDA 固件至 QSPI NOR Flash 版本,确保调试与烧录兼容性。
2.3 启动模式开关配置
通过 SW7 拨码开关选择启动设备,核心配置如下:
| SW7-1 | SW7-2 | SW7-3 | SW7-4 | 启动设备 |
| OFF | ON | ON | OFF | Hyper Flash |
| OFF | OFF | ON | OFF | QSPI NOR Flash |
| ON | OFF | ON | OFF | SD Card |
3. XIP 启动流程解析
XIP 启动是指程序直接在外部 Flash 中执行,无需复制到内部 RAM,核心流程如下:
- 上电初始化:Arm 内核从 Boot ROM 启动,根据 BOOT_MODE 寄存器与 eFUSEs 状态选择启动设备(可通过 GPIO 引脚覆盖配置)。
- FlexSPI 配置读取:Boot ROM 在 30MHz 时钟下,从 Flash 偏移量 0 地址读取 512 字节配置参数,包含读取命令序列、FlexSPI 频率、Quad 模式使能序列等。
- 硬件参数配置:根据读取的参数初始化 IOMUXC 引脚、LUT(查找表)、时钟与 Flash 设备。
- 程序执行:若为 XIP 镜像,直接从 FlexSPI 地址(如 0x60000000)执行;若非 XIP 镜像,复制至 OCRAM 后执行。
可执行文件结构(XIP 启动必需)
- Flash 配置参数:标签 0x42464346(ASCII:FCFB),位于文件起始位置。
- IVT(中断向量表):标签 0xD1,偏移量 0x1000,包含程序组件位置指针。
- 启动数据:指定程序位置、尺寸与标志位,偏移量 0x1020。
- DCD(设备配置数据):标签 0xD2,偏移量 0x1030,用于 SDRAM 等外设初始化。
- 用户程序与数据:核心功能代码与资源。
四、软件配置:从固件到工程参数
4.1 OpenSDA 固件更新
- 若固件序列号小于 TR18132215,需升级至最新版,否则无法自动添加 XIP 启动所需的配置参数、IVT 等信息。
- 固件升级后,IDE 可直接识别 FLEXSPI Flash,支持一键烧录与调试。
4.2 工程宏定义配置(IAR 环境)
SDK 例程需启用 3 个核心宏,控制 XIP 启动头文件的添加与功能:
| 宏定义 | 取值 | 功能说明 |
| XIP_EXTERNAL_FLASH | 1 | 移除改变 FlexSPI 时钟频率的代码;0 则保留 |
| XIP_BOOT_HEADER_ENABLE | 1 | 在可执行文件开头添加 FlexSPI 配置、IVT、启动数据、DCD;0 则不添加 |
| XIP_BOOT_HEADER_DCD_ENABLE | 1 | 启用 DCD(初始化 SDRAM);0 则不启用,仅适用于无需外部 RAM 的简单应用 |
配置路径:IAR 工程 → Options → C/C++ Compiler → Preprocessor → Defined symbols,添加上述宏定义。
4.3 链接文件配置
打开链接文件MIMXRT1052xxxxx_flexspi_nor.icf,确认核心地址分配:
- 启动配置参数起始地址:0x60000000(m_boot_hdr_conf_start)
- IVT 起始地址:0x60001000(m_boot_hdr_ivt_start)
- 启动数据起始地址:0x60001020(m_boot_hdr_boot_data_start)
- DCD 数据起始地址:0x60001030(m_boot_hdr_dcd_data_start)
五、多场景烧录实操指南
5.1 烧录至板载 Hyper Flash
- 拨码开关配置为 Hyper Flash 启动(SW7-2=ON、SW7-3=ON,其余 OFF),上电。
- 打开 SDK 例程(如 hello_world),选择 target 为
flexspi_nor_debug。 - 编译工程并烧录,配置串口终端(波特率 115200、8N1)。
- 按下 SW3 重启开发板,串口打印 “hello world” 即成功。
5.2 烧录至板载 QSPI NOR Flash
- 拨码开关配置为 QSPI Flash 启动(SW7-3=ON,其余 OFF),更新 OpenSDA 固件。
- 打开例程,找到
evkbimxrt1050_hyper_config.c文件。 - 注释
hyperflash_config结构体,替换为qspiflash_config(或直接替换为附件中 QSPI 适配文件)。 - 编译烧录,重启后通过串口验证结果。
5.3 烧录至第三方 QSPI Flash(以 GD25Q64C 为例)
- 替换工程配置:用
qspiflash_config替换hyperflash_config,适配 GD25Q64C 参数(如 Flash 容量 4MB、Quad 模式)。 - 修改 FlashLoader:打开
FlashIMXRT1050_EVK_FlexSPI_Example工程,调整 LUT 序列与状态寄存器写格式(GD25Q64C 为 8 位写格式)。 - 编译 FlashLoader 生成
.out文件,复制至 IAR 安装路径下的 flashloader 目录。 - 按板载 QSPI Flash 烧录步骤操作,串口验证启动结果。
5.4 MCUXpresso IDE 烧录配置
- 选择 Flash 驱动:
MCU Settings → Flash Drivers,添加MIMXRT10XX_SFDP_QSPI.cfx(支持 SFDP 协议,兼容多数标准 SPI NOR Flash)。 - 配置内存映射:指定 Flash 起始地址与容量,匹配目标 Flash 参数。
- 编译烧录,支持在线调试与断点设置。
六、关键配置差异与注意事项
6.1 Hyper Flash 与 QSPI NOR Flash 核心差异
| 对比项 | Hyper Flash | QSPI NOR Flash |
| 接口模式 | Octal(8 线) | Quad(4 线) |
| 读取采样时钟 | 外部输入(DQS Pad) | 回环输入(DQS Pad) |
| LUT 序列 | 适配 Octal 指令 | 适配 Quad 指令(如 0xEB) |
| 容量典型值 | 64MB | 4-8MB |
6.2 调试注意事项
- 断点设置:使用 Dap-link 调试时,需将断点类型设为硬件断点(IAR 配置路径:Options → Debugger → CMSIS-DAP → --drv_default_breakpoint=1)。
- 固件兼容性:确保 OpenSDA 固件版本匹配 Flash 类型,否则会导致烧录失败。
- 供电适配:GD25Q64C 需 3.3V 供电,需修改开发板供电电压(默认 1.8V)。
6.3 启动头文件修改(XIP 适配关键)
参考目标 Flash datasheet,修改flexspi_nor_config_t参数:
sflashPadType:Quad 模式设为kSerialFlash_4Pads,Dual 模式设为kSerialFlash_2Pads。serialClkFreq:根据 Flash 规格设置(如 100MHz、133MHz)。lookupTable:配置 Fast Read 指令序列(如 Quad 模式指令 0xEB,Dummy 周期 0x06)。
i.MX RT1050 的 FLEXSPI NOR Flash 调试与 XIP 启动配置,核心在于硬件链路适配、固件更新与工程参数匹配。通过本文的分步操作,可实现板载 Flash、第三方 Flash 的灵活切换,满足不同存储容量与执行速度需求。该方案适用于工业控制、智能硬件等场景,为大容量程序部署提供高效解决方案。
226