0

STM32F7中,代码从内部闪存运行(默认),我们可以从内部闪存读取/写入数据。

我的问题是:我想使用外部QSPI闪存来执行代码(内存映射模式)。同样在这种模式下,当代码在闪存中执行时,我想使用相同的QSPI闪存来存储我的数据(即保存一些设置)QSPI。但这是不可能的,因为 ST 在其参考文档 ( AN4760 ) 中声明:

    In Memory-mapped mode the QUADSPI allows the access to the external 
memory for read operation through the memory mapped address region 
(from 0x9000 0000 to 0x9FFF FFFF) and allows the external memory to 
be seen just like an internal memory.

QSPI在不退出内存映射模式的情况下,我的问题(将数据写入闪存)是否有任何解决方案?

是否可以将QSPI闪存分为两部分?一个用于内存映射模式,另一个用于读取/写入数据。

注意:我不想从外部闪存跳转到内部闪存写入数据,然后再次跳转到外部闪存执行代码。

任何帮助,将不胜感激。

谢谢。

4

3 回答 3

1

不,这是不可能的。FLASH内存,如果之前写过,要擦掉,就需要进入写模式,写内存。闪存总是写得很慢。

内存映射模式通常用于从 QSPI 闪存运行代码,或简化读取访问。

于 2020-10-23T21:55:34.243 回答
0

我知道这是一篇较旧的帖子,但供将来参考:

您需要停止从外部闪存执行以对其进行写入。也许通过将一个小代码块复制到 RAM 或从内部闪存执行。然后跳转到执行该代码。该代码可以从内存映射模式禁用外部闪存,将数据写入其中,然后将其切换回内存映射模式。显然,在此期间,您需要禁用任何相关中断并确保没有访问内存映射闪存。还要特别注意不要擦除和覆盖外部闪存中的代码,除非您当然愿意!

当您在写入时无法从内部闪存执行时,这与写入内部闪存的过程类似。

于 2021-06-11T03:48:29.323 回答
-1

您可以通过写入 quadspi 寄存器来写入闪存。请参阅https://github.com/micropython/micropython/blob/master/ports/stm32/qspi.c中的 qspi_write_cmd_addr_data()

于 2020-10-23T18:46:42.083 回答