TouchGFX外接QSPI Flash故障:修改链接脚本后触发硬故障
QSPI Flash配置后TouchGFX硬故障排查方向
链接脚本存储区域映射错误
- 核对QSPI的地址范围是否与芯片手册、CubeMX配置完全一致,比如部分MCU的QSPI内存映射起始地址为
0x90000000,地址写错会直接触发访问违规。 - 检查ExtFlashSection、TextFlashSection、FontFlashSection的起始地址和大小,不能超出QSPI Flash的实际容量,也不能与内部Flash地址重叠。
- 确认链接脚本中
MEMORY块的定义是否正确,QSPI对应的区域需设为FLASH类型,且SECTIONS部分要将上述段正确绑定到该MEMORY块。
- 核对QSPI的地址范围是否与芯片手册、CubeMX配置完全一致,比如部分MCU的QSPI内存映射起始地址为
QSPI内存映射未完成初始化
- 单独测试QSPI读写正常不代表内存映射模式已开启,需确认系统启动、TouchGFX初始化前,是否调用了
HAL_QSPI_EnableMemoryMappedMode()开启内存映射。未开启的话,访问QSPI映射地址会触发硬故障。 - 严格遵循初始化顺序:先完成QSPI外设初始化与内存映射开启,再执行TouchGFX初始化,避免TouchGFX加载资源时访问无效地址。
- 单独测试QSPI读写正常不代表内存映射模式已开启,需确认系统启动、TouchGFX初始化前,是否调用了
TouchGFX资源地址配置不匹配
- 检查TouchGFX Designer中的外部Flash起始地址,必须与链接脚本中ExtFlashSection的地址完全同步。两者不一致时,TouchGFX会读取错误地址的资源,引发访问故障。
- 修改链接脚本后,需重新生成TouchGFX代码,确保生成的资源加载地址与新的映射地址一致。
MCU缓存配置异常
- 部分MCU的QSPI内存映射需配合Cache(I-Cache/D-Cache)使用,未开启或配置错误会导致访问QSPI区域时出错。检查CubeMX中对应总线的Cache配置,确保正确开启并设置合适的缓存策略。
硬故障精准定位
- 利用CubeIDE调试工具查看
SCB->CFSR寄存器状态:DACCVIOL表示数据访问违规,IACCVIOL表示指令访问违规,可快速定位故障类型。 - 查看调用栈,确认
tick()函数中是否在访问QSPI存储的资源(如字体、文本),进一步缩小问题范围。
- 利用CubeIDE调试工具查看
内容的提问来源于stack exchange,提问作者Mzgh
相关产品推荐
相关产品推荐

