通过QSPI外接flash实现片上程序执行时如何擦、写flash其他位置

2019-12-09 19:24发布

    目前使用的平台是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,里面的例程也没有看到这种操作。不知道有哪位做过类似的操作,具体应该如何操作?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
lyxer
1楼-- · 2019-12-10 01:19
程序是从QSPI运行  就不能执行读写QSPI flash的操作
wzd5230
2楼-- · 2019-12-10 01:21
 精彩回答 2  元偷偷看……
greencamel
3楼-- · 2019-12-10 06:58
应该是没办法的,参考linux的启动过程,升级程序能不能单独放置到内部Flash或内部RAM上?
lyxer
4楼-- · 2019-12-10 07:04
wzd5230 发表于 2019-1-30 09:53
读是可以的,因为已经内存映射了,直接指针读取就可以。现在就是要进行擦、写操作。 ...

对  这种情况下 我就不考虑把他当存储器了
lyxer
5楼-- · 2019-12-10 07:25
可以了解下RT1064 有内部QSPI flash用来保存程序 也有外部QSPI flash 当存储设备
zchong
6楼-- · 2019-12-10 12:25
把这部分代码放到RAM中执行,应该是没问题的

一周热门 更多>