本帖最后由 wzd5230 于 2019-1-28 13:23 编辑
项目中使用的MCU是STM32H750,core最高频率400MHz,内部flash只有128KB,是无法满足目前我们的应用的,遂考虑外部扩展存储,并且片上执行(因为内部RAM也只有1MB),扩展的方案有2个,其一,通过QSPI外扩串行Flash,该MCU支持QSPI外接存储设备的XIP功能;其二,通过FSMC接口,外接并行的norFlash,这种方式耗费MCU的引脚比较多。因此采用QSPI外接Flash的方式。
目前在测试阶段,在MCU内部Flash中,包含了一个类似于Boot的程序,该程序初始化QSPI工作在内存映射模式,以及进行程序跳转。MCU的QSPI最高频率支持200MHz。外部Flash最高clock支持133MHz,已经包含了一个有效、可用的程序,该程序对某一IO口进行翻转。
【遇到的问题】:
1、QSPI的clock如果设置的比较高(>=50MHz),MCU就会进入hardfault_handler(),这可以理解,因为从Flash中读取的数据就是“指令”,指令不正确,肯定会出问题。如果QSPI的clock设置的比较低,如33MHz,那么是可以正常跳转,并且外部flash中的程序也执行了,IO正常翻转。
2、【测试1】,仅配置QSPI工作在内存映射模式,并不进行跳转,这样可以直接使用指针去读取数据,并且可以在IAR的memory窗口直接看到flash所映射地址的数据。测试结果是QSPI低速时通过JLink可以查看到数据,使用指针也可以正常访问到数据。如果QSPI设置clock高了,直接MCU进入异常状态。
3、【测试2】,将上述的【测试1】在一个STM32H743的评估板上验证(该板卡没有外接flash),即使QSPI的频率设置到100MHz,MCU也没有死,由于外部没有数据,映射的数据全为0xFF(我将SIO0..3直接接到VCC)。
4、不使用QSPI的内存映射模式,而是使用最简单的间接模式,对Flash中的数据进行读取,测试发现,当QSPI的clock速度提高了,mcu也还是死机。
5、还有很多其他的对比测试,我就不具体列出了。
【咨询的问题】
1、是否有使用过STMH750这一系列MCU的童鞋,我怀疑这个芯片的QSPI速度有限制,和STM32H743是不同的,当QSPI速度提升了,整个MCU进入异常。
2、是否有哪位使用STMH750这个MCU,外部通过QSPI扩展Flash实现片上执行程序(其实是取指令)。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
感谢你的一句言语,我换了个思路,不使用CubeMX生成的工程,使用STM32H743的demo修改后跑了下,竟然可以了,对比发现是CubeMX默认生成的QSPI初始化函数不够完善,目前问题已经解决。
一周热门 更多>