在 NXP i.MX RT700 开发中,官方 EVK 默认从 XSPI0 启动,但实际项目常需切换到 XSPI1(如双 Flash 冗余、硬件引脚复用)。很多工程师切换后遇到编译成功但启动失败、地址不匹配、调试异常等问题,核心是硬件跳线、启动开关、工程配置未完全同步。本文基于 MCUXpresso for VS Code 与 RT700-EVK,从硬件设置到工程修改,拆解 XSPI1 启动全流程,帮你一次配置成功。
资料获取:VS Code 下 RT700-EVK XSPI1 Octal Flash 启动配置指南
1. 硬件准备:跳线与启动开关先设对
RT700-EVK 的 XSPI1 通过多路复用开关切换 Flash/HyperRAM,启动前必须先完成硬件配置,否则软件修改无效。
1.1 XSPI1 Flash 跳线配置
- JP45:短接 2-3,选择 XSPI1 连接 Octal Flash U51(默认 HyperRAM);
- JP46:短接 2-3,使能 XSPI1 电子开关;
- JP51:保持默认短接,使能 XSPI 复位。
1.2 启动开关 SW10 配置
SW10 是 2 位 DIP 开关,需设为11(对应 XSPI1 启动):
- 00:SDHC0 eMMC;
- 01:默认 XSPI0;
- 10:自动 ISP;
- 11:XSPI1。
1.3 关键地址映射
- XSPI0:0x28000000(默认);
- XSPI1:0x08000000(切换后)。
硬件配置完成后,再进行工程修改,避免反复调试。
2. VS Code 工程基础配置
2.1 环境与工程导入
- 开发环境:MCUXpresso for VS Code + SDK 26.3.0;
- 导入工程:选择
demo_apps/hello_world_cm33_core0模板,基于 RT700-EVK 创建基础工程。
2.2 修改 Flash 基地址(prj.conf)
默认工程使用 XSPI0 地址(0x28000000),需新增prj.conf文件覆盖配置:
CONFIG_FLASH_BASE_ADDRESS=0x08000000
重新编译后,mcux_config.h中的地址会自动更新为 0x08000000。
2.3 替换链接脚本(核心步骤)
仅改基地址不够,链接脚本(.ld)决定代码段实际链接地址,必须替换为 XSPI1 专用脚本:
- 默认脚本:
MIMXRT798Sxxxx_cm33_core0_flash.ld(XSPI0,0x28000000); - XSPI1 脚本:
MIMXRT798Sxxxx_cm33_core0_flash1.ld(0x08000000)。
脚本差异(关键段)
- XSPI0:
m_flash 0x28000000、m_interrupts 0x28004000; - XSPI1:
m_flash 0x08000000、m_interrupts 0x08004000。
将flash1.ld复制到工程目录备用。
2.4 更新 CMakeLists.txt
移除默认链接脚本,添加 XSPI1 专用脚本:
# 移除默认XSPI0链接脚本
mcux_remove_armgcc_linker_script(
TARGETS flash_debug flash_release
BASE_PATH ${SdkRootDirPath}
LINKER ${device_root}/${soc_portfolio}/${soc_series}/${device}/gcc/${CONFIG_MCUX_TOOLCHAIN_LI NKER_DEVICE_PREFIX}_flash.ld
)
# 添加XSPI1链接脚本
mcux_add_armgcc_linker_script(
TARGETS flash_debug flash_release
BASE_PATH ${SdkRootDirPath}
LINKER ${device_root}/${soc_portfolio}/${soc_series}/${device}/gcc/${CONFIG_MCUX_TOOLCHAIN_LI NKER_DEVICE_PREFIX}_flash1.ld
)
3. 编译与验证:确保地址完全匹配
3.1 编译工程
执行编译,生成.elf与.map文件。
3.2 关键验证(避免启动失败)
- 检查
mcux_config.h:CONFIG_FLASH_BASE_ADDRESS=0x08000000; - 查看
.map文件:.flash_config、.isr_vector、.text段均位于 0x08000000 附近; - 下载调试:通过板载 MCU-Link 下载,程序正常运行即配置成功。
4. 常见问题排查
- 编译成功但不启动:优先检查 SW10 是否为 11、JP45/JP46 跳线是否正确;
- 地址不匹配:核对
prj.conf地址、链接脚本是否为 flash1.ld; - 调试时找不到代码:确认
.map文件代码段在 0x08000000 区间。
RT700-EVK 从 XSPI1 启动,核心是硬件跳线、启动开关、工程地址、链接脚本四同步:
- 硬件:JP45/JP46 短接 2-3,SW10 设为 11;
- 软件:prj.conf 改地址,CMakeLists 换 flash1.ld;
- 验证:map 文件核对代码段地址。
按以上步骤操作,可快速完成 XSPI1 启动配置,适配双 Flash、硬件复用等项目需求。
463