目前使用的平台是STM32H750,内部flash比较小,只有128KByte,使用QSPI连接外部flash,在内部flash中烧写Boot,初始化QSPI,工作在内存映射模式,跳转到外部flash的程序中。这里有几个疑问!
下图是外部flash的划分,其中分为4个部分,运行的代码是保存在“Code area”中,在这个程序执行的过程中,我需要对“Param area”区域中的部分参数进行读、擦、写;以及在固件更新的过程中,从以太网接收升级的固件,放到“FW buffer”区域中缓存,这期间就涉及到flash的擦、写。
TIM截图20190130093355.jpg (28.69 KB, 下载次数: 0)
下载附件
2019-1-30 09:34 上传
从我目前的了解来看,一旦“Code area”中的指令开始运行,这是QSPI已经工作在内存映射模式,这个模式下仅可以进行flash读操作(由CPU自动执行)。在上述举例的2种情况均涉及到擦、写,这2中操作需要在间接模式(即indrect mode)下进行,那就需要退出内存映射模式,而一旦退出,“Code area”中的指令将无法继续执行。
我在CubeMX下找到STM32H7系列的SDK,里面的例程也没有看到这种操作。不知道有哪位做过类似的操作,具体应该如何操作?
应该是可以的,以往我们使用的一款赛普拉斯的Cortex-R4的MCU,内部Flash程序执行期间是不能对Flash进行擦、写操作的,也是将Flash操作的程序放到SRAM中,跳转到那边执行。
这个有一点区别,因为跳转到SRAM执行后,会将QSPI的配置(内存映射模式)改为间接模式,目前来看在SRAM程序运行期间一方面要修改/恢复QSPI配置,另外在执行的过程中,要关闭cache,关闭中断,确保SRAM中的程序通过QSPI访问Flash期间,Flash中报文的指令不会执行。
一周热门 更多>