RT1170 搭载双 FlexSPI 控制器,且每路控制器均支持 Primary/Secondary 两组引脚配置,官方默认仅提供 FlexSPI1 Primary 引脚组的烧录算法与启动方案。实际开发中若需从FlexSPI1 Secondary 引脚组外接的 QSPI Flash 启动并使用调试器烧录仿真,需完成硬件引脚适配、Fuse 位配置、烧录算法修改三大核心步骤。本文基于 RT1170,详解 FlexSPI1 Secondary QSPI Flash 的启动条件、CMSIS DAP/JLINK 两款调试器的烧录算法修改与适配流程,提供可直接使用的修改后算法,实现该引脚组 Flash 的烧录、调试与正常启动。
资料获取:RT1170 flexSPI1 secondary QSPI flash debug flashdriver
1. 核心基础与启动必备条件
1.1 FlexSPI1 Secondary 引脚组核心特性
RT1170 的 FlexSPI1 Secondary 引脚组为GPIO_AD 口,与 Primary 引脚组的硬件特性、速率限制存在明显差异,核心参数如下:
- 引脚映射:FlexSPI1 Secondary 对应 GPIO_AD_18~GPIO_AD_23(SS0_B、SCLK、DATA0~DATA3),为 4 线 QSPI 配置;
- 速率限制:GPIO_AD 口的最高通信速率为104MHz,实际配置需设为 100MHz 以保证稳定性;
- 与 Primary 区别:官方 EVK 板仅引出 FlexSPI1 Primary 引脚组,Secondary 需自定义硬件底板,且需通过 Fuse 位切换引脚组选择。
1.2 从 FlexSPI1 Secondary 启动的 3 个必备条件
(1)硬件适配:QSPI Flash 外接至 Secondary 引脚组
将 QSPI Flash 的片选(CS)、时钟(SCLK)、数据(D0~D3)引脚分别连接至 RT1170 的 GPIO_AD_18~GPIO_AD_23,电源与复位引脚按 Flash 规格配置,需保证硬件接线为 4 线 QSPI 模式。
(2)Fuse 位配置:切换 FlexSPI 引脚组选择
需烧录FLEXSPI_PIN_GROUP_SEL(地址 0X9A0 [10])为1,将 FlexSPI1 的引脚组从 Primary 切换为 Secondary,配置方式:
- 将 RT1170 设置为Serial Download 模式;
- 打开 MCUBootUtility 工具,连接设备时选择FlexSPI1 secondary选项;
- 工具中直接烧录该 Fuse 位,烧录完成后将板子启动模式改为Internal Boot。
(3)烧录算法修改:匹配 Secondary 引脚组参数
官方烧录算法默认适配 Primary 引脚组,需修改核心配置参数以匹配 Secondary,核心修改点为两个配置选项:
option0 = 0xc1000005:指定 FlexSPI1 Secondary 引脚组与 Flash 通信模式;option1 = 0x00010000:配置通信速率为 100MHz(适配 AD 口速率限制)。所有调试器的烧录算法修改均围绕这两个参数展开,基于 ROM API 实现引脚组与速率的匹配。
2. 前期准备:硬件与工具环境
2.1 硬件清单
- 主控板:RT1170 自定义底板(QSPI Flash 外接至 FlexSPI1 Secondary 引脚组 GPIO_AD_18~23);
- 存储器件:4 线 QSPI Flash(本文以 W25Q128 为例);
- 调试器:CMSIS DAP(如 LPC-Link2)、JLINK V9/V10(两款调试器分别适配对应算法);
- 辅助工具:USB 线(调试与下载)、杜邦线(硬件接线验证)。
2.2 软件与算法资源
- 开发 IDE:MCUXpresso IDE 11.8.0 及以上版本;
- 官方算法源码:MCUXpresso IDE 内置的
iMXRT117x_FlexSPI_SFDP.zip(CMSIS DAP 算法修改基础); - JLINK 资源:RT-UFL 烧录算法(Segger 提供,无开源源码,仅需修改配置参数);
- 工具:MCUBootUtility(Fuse 位烧录)、JLINK Commander(JLINK 算法验证)。
2.3 关键文件路径
- CMSIS DAP 算法源码:
C:nxpMCUXpressoIDE_11.8.0_1165ideExamplesFlashdriversNXPiMXRTiMXRT117x_FlexSPI_SFDP.zip; - MCUXpresso 默认烧录算法目录:
C:nxpMCUXpressoIDE_11.8.0_1165idebinariesFlash; - JLINK 算法目录:
C:Program FilesSEGGERJLINKV768BDevicesNXPiMXRT_UFL; - JLINK 设备配置文件:
C:Program FilesSEGGERJLINKV768BJLinkDevices.xml。
3. 方案 1:CMSIS DAP 调试器 ——.cfx 烧录算法修改与适配
CMSIS DAP 是 MCUXpresso IDE 原生支持的调试器,需基于官方开源算法源码修改参数并编译为.cfx 格式烧录算法,步骤清晰且可自定义,是开发调试的首选方案。
步骤 1:导入并编译算法基础库
- 解压官方算法源码
iMXRT117x_FlexSPI_SFDP.zip,在 MCUXpresso IDE 中导入工程; - 先编译
LPCXFlashDriverLib<Release_SectorHashing>版本,生成算法依赖的基础库文件; - 选择算法工程为
MIMXRT1170_SFDP_QSPI(FlexSPI1 Port A QSPI),为修改 Secondary 参数做准备。
步骤 2:修改核心配置参数
打开算法工程中的Imxrt117xFlexSPI_SFDP_FlashConfig.h头文件,修改两个核心宏定义,替换为 Secondary 引脚组的配置:
// 原Primary引脚组配置注释,替换为以下内容
#define CONFIG_OPTION0 0xc1000005 // 适配FlexSPI1 Secondary引脚组
#define CONFIG_OPTION1 0x00010000 // 配置100MHz通信速率
步骤 3:编译生成.cfx 烧录算法
- 保存头文件修改后,重新编译
Imxrt117xFlexSPI_SFDP工程; - 编译完成后,在工程
builds目录下找到生成的.cfx 文件,重命名为MIMXRT1170_SFDP_QSPI1_Secondary.cfx(便于识别); - 将重命名后的.cfx 文件拷贝至 MCUXpresso IDE 的默认烧录算法目录,实现 IDE 的自动识别。
步骤 4:APP 工程配置与仿真调试
- 导入并配置 APP 工程:在 MCUXpresso IDE 中创建 / 导入 RT1170 工程,重点修改FCB(Flash 配置块) 参数,匹配 W25Q128 与 100MHz 速率:
const flexspi_nor_config_t qspiflash_config = { .memConfig = { .tag = FLEXSPI_CFG_BLK_TAG, .version = FLEXSPI_CFG_BLK_VERSION, .readSampleClkSrc = kFlexSPIReadSampleClk_LoopbackFromDqsPad, .csHoldTime = 3u, .csSetupTime = 3u, .controllerMiscOption = 0x10, // 启用DDR模式,4线QSPI .deviceType = kFlexSpiDeviceType_SerialNOR, .sflashPadType = kSerialFlash_4Pads, .serialClkFreq = kFlexSpiSerialClk_100MHz, // 适配AD口速率 .sflashA1Size = 16u * 1024u * 1024u, // W25Q128为16MB .lookupTable = { // 匹配W25Q128的LUT命令集 FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0xEC, RADDR_SDR, FLEXSPI_4PAD, 0x20), FLEXSPI_LUT_SEQ(DUMMY_SDR, FLEXSPI_4PAD, 0x06, READ_SDR, FLEXSPI_4PAD, 0x04), // 省略状态读取、擦除、编程等LUT命令(与W25Q128规格匹配) } }, .pageSize = 256u, .sectorSize = 4u * 1024u, .blockSize = 64u * 1024u, .isUniformBlockSize = false, }; - 选择烧录算法:在 APP 工程的「Debug Configuration」中,选择调试器为CMSIS DAP,烧录算法选择刚添加的
MIMXRT1170_SFDP_QSPI1_Secondary.cfx; - 仿真烧录:连接 CMSIS DAP 调试器与开发板,点击 IDE 的「Debug」按钮,即可实现算法的调用、APP 的烧录与在线仿真,调试过程与 Primary 引脚组无差异。
4. 方案 2:JLINK 调试器 ——RT-UFL 烧录算法修改与适配
JLINK 无开源的 FlexSPI 烧录算法源码,需基于RT-UFL 超级下载算法修改配置参数,编译为.FLM 格式,并修改 JLINK 的设备配置文件,实现 Secondary 引脚组的适配。
步骤 1:修改 RT-UFL 算法配置参数
打开 RT-UFL 算法的ufl_main.c文件,找到 RT1170 的配置分支,修改 FlexSPI 配置参数为 Secondary 引脚组规格:
case kChipId_RT116x:
case kChipId_RT117x:
uflTargetDesc->flexspiInstance = MIMXRT117X_1st_FLEXSPI_INSTANCE;
uflTargetDesc->flexspiBaseAddr = MIMXRT117X_1st_FLEXSPI_BASE;
uflTargetDesc->flashBaseAddr = MIMXRT117X_1st_FLEXSPI_AMBA_BASE;
uflTargetDesc->configOption.option0.U = 0xc1000005; // 适配Secondary引脚组
uflTargetDesc->configOption.option1.U = 0x00010000; // 100MHz速率
break;
步骤 2:编译生成.FLM 烧录算法
保存修改后,编译 RT-UFL 工程,生成 **MIMXRT_FLEXSPI_UV5_UFL_Flexspi1secondary_qspi.FLM** 文件,将该文件拷贝至 JLINK 的 IMXRT_UFL 算法目录,完成算法文件的部署。
步骤 3:修改 JLINK 设备配置文件
编辑JLinkDevices.xml,添加 RT1170 FlexSPI1 Secondary 的设备节点,让 JLINK 识别该配置并调用修改后的算法:
<Device>
<ChipInfo Vendor="NXP"
Name="MIMXRT1170_UFL_flexspi1_2nd"
WorkRAMAddr="0x20240000"
WorkRAMSize="0x00040000"
Core="JLINK_CORE_CORTEX_M7"
JLinkScriptFile="Devices/NXP/iMXRT_UFL/iMXRT117x_CortexM7.JLinkScript" />
<FlashBankInfo Name="QSPI Flash"
BaseAddr="0x30000000"
MaxSize="0x01000000"
Aliases="MIMXRT1176xxx8_M7;MIMXRT1176xxxA_M7"
Loader="Devices/NXP/iMXRT_UFL/MIMXRT_FLEXSPI_UV5_UFL_Flexspi1secondary_qspi.FLM"
LoaderType="FLASH_ALGO_TYPE_OPEN" />
</Device>
关键注意:BaseAddr 为 FlexSPI1 的 AMBA 映射地址 0x30000000,与 Primary 引脚组一致,无需修改。
步骤 4:APP 工程配置与 JLINK 仿真
- 与 CMSIS DAP 方案一致,修改 APP 工程的 FCB 参数,配置 100MHz 速率与 W25Q128 的 LUT 命令集;
- 在 MCUXpresso IDE 的「Debug Configuration」中,选择调试器为JLINK,设备型号选择刚添加的
MIMXRT1170_UFL_flexspi1_2nd; - 核心勾选:取消「reset before running」选项(否则调试器会停止在 ROM 中,无法进入 APP);
- 连接 JLINK 调试器,点击「Debug」,即可实现烧录与在线仿真,算法将自动匹配 FlexSPI1 Secondary 引脚组。
5. 常见问题排查与避坑指南
5.1 烧录算法调用失败,提示 “Flash 未识别”
- 原因 1:Fuse 位
FLEXSPI_PIN_GROUP_SEL未烧录为 1,引脚组仍为 Primary; - 原因 2:算法中
option0/option1参数修改错误,未匹配 Secondary 引脚组; - 原因 3:硬件接线错误,QSPI Flash 未正确连接至 GPIO_AD_18~23;
- 解决:重新通过 MCUBootUtility 烧录 Fuse 位并验证;核对算法参数为
0xc1000005和0x00010000;用万用表验证硬件接线的通断。
5.2 烧录成功但 APP 无法启动,卡在 ROM 阶段
- 原因 1:APP 的 FCB 中
serialClkFreq配置为 133MHz,超出 AD 口 104MHz 速率限制; - 原因 2:FCB 的 LUT 命令集与外接 QSPI Flash 规格不匹配(如 W25Q128 与 W25Q64 命令不同);
- 原因 3:板子启动模式未改为 Internal Boot,仍为 Serial Download 模式;
- 解决:将 FCB 速率改为
kFlexSpiSerialClk_100MHz;根据 Flash 规格修改 LUT 命令;切换启动模式为 Internal Boot。
5.3 JLINK 仿真时停止在 ROM,无法进入 APP
- 原因:勾选了「reset before running」选项,JLINK 复位后直接从 ROM 启动,未加载 Flash 中的 APP;
- 解决:在 Debug Configuration 中取消该选项,重新启动调试即可。
5.4 仿真过程中出现 Flash 读写错误,数据错乱
- 原因 1:QSPI Flash 的 CS 保持时间 / 建立时间配置不合理(FCB 中
csHoldTime/csSetupTime); - 原因 2:通信速率过高,100MHz 下未做信号匹配,硬件存在干扰;
- 解决:将 FCB 中的
csHoldTime和csSetupTime改为 3~5u;适当降低速率至 80MHz,或优化硬件布线(增加阻抗匹配、减少走线长度)。
5.5 MCUXpresso IDE 中未找到修改后的.cfx 算法
- 原因:算法文件未拷贝至 IDE 的默认烧录算法目录,或文件名命名不规范;
- 解决:将.cfx 文件拷贝至
idebinariesFlash;确保文件名为MIMXRT1170_xxx.cfx格式,重启 IDE 后即可识别。
6. 已修改完成的烧录算法直接使用方法
本文提供已修改好的两款烧录算法,无需手动编译,直接拷贝至对应目录即可使用,大幅简化操作流程:
6.1 CMSIS DAP(.cfx 算法)
将MIMXRT1170_SFDP_QSPI1_Secondary.cfx直接拷贝至 MCUXpresso IDE 的idebinariesFlash目录,重启 IDE 后,在工程烧录算法列表中可直接选择。
6.2 JLINK RT-UFL(.FLM 算法)
- 将 JLINK RT-UFL 文件夹中的所有文件,直接拷贝至
C:Program FilesSEGGERJLINKV768BDevicesNXPiMXRT_UFL; - 将文件夹中的设备配置代码,追加至
JLinkDevices.xml文件中,重启 JLINK 与 IDE 后,即可选择MIMXRT1170_UFL_flexspi1_2nd设备型号。
RT1170 从 FlexSPI1 Secondary QSPI Flash 启动并调试的核心,是Fuse 位引脚组切换与烧录算法参数匹配,两款调试器的修改均围绕option0=0xc1000005和option1=0x00010000两个核心参数展开,区别仅在于算法的编译与部署方式:
- CMSIS DAP 基于开源源码修改,编译为.cfx 文件后拷贝至 IDE 默认目录,适配简单、可自定义;
- JLINK 基于 RT-UFL 闭源算法修改,需编译为.FLM 文件并修改设备配置文件,需注意取消复位前运行选项。
同时,APP 工程的 FCB 配置需严格匹配硬件:速率设为 100MHz、LUT 命令集与外接 QSPI Flash 规格一致、引脚时序参数合理。本文提供的修改后算法可直接使用,无需重复编译,实现 FlexSPI1 Secondary QSPI Flash 的快速烧录与仿真。
该方案可扩展至 RT1170 FlexSPI2 的 Primary/Secondary 引脚组,仅需修改对应的 Fuse 位与算法中的 FlexSPI 实例参数,核心配置逻辑一致,是 RT1170 多 FlexSPI 引脚组扩展开发的标准方案。
126