对QSPI FLASH的XIP(eXecute In Place)功能的困惑

HYF*_*HYF 6 flash controller nor

有很多NOR QSPI FLASH芯片支持XIP(eXecute In Place)。在这种模式下,嵌入式CPU(或MCU)可以直接执行存储在闪存中的代码。但众所周知,qspi flash每个周期只能输出4位数据,而许多MCU,例如ARM Cortex-M系列,每个周期需要32位指令。所以MCU要等待至少8个周期才能得到有效指令,看起来很慢。此外,nor qspi flash芯片的最高频率往往低于150MHz,而STM32F407的频率为168MHz,这意味着CPU接收有效指令的延迟较长。

不知道我的理解是否有误,我实在是找不到太多关于XIP的细节。STM32Fxxx的技术参考手册只说有嵌入式flash并支持XIP,但没有显示任何细节。此外,我想我们还需要在MCU中实现一个非常复杂的QSPI控制器来支持XIP。

谁能给我一些关于这个问题的指导?

use*_*607 3

据我所知,MCU 使用 RAM 中的缓冲区从外部闪存读取指令,然后执行它们。它以块的形式读取它们。现在,一个块的大小很大程度上取决于每个供应商的实现(即有多少 RAM 可用、闪存如何连接:SPI、双 SPI、四 SPI、八进制 SPI、是否可以直接内存访问 (DMA)、闪存是否支持连续读取模式)。因此,如果块很小,那么核心将停止等待指令。如果块很大,那么就会耗尽 RAM,并且在分支时,已经加载到 RAM 中的块将被重新加载以用于新代码。

假设闪存与双 SPI 连接并且可以使用 DMA。然后,对于 XiP,控制器将通过执行一些引导加载程序代码(通常来自某些内部 ROM 存储器)来启动。引导加载程序设置 QSPI 闪存控制器和内核的 D​​MA,以将指令从外部闪存复制到 RAM 缓冲区。然后它将开始执行DMA 现在会将指令异步复制到 RAM。这意味着实际的 MCU 内核几乎不会浪费时间来复制代码。

您说您找不到有关 XiP 的更多详细信息。对我来说最好的信息来源是各个制造商的应用说明。这些实现有所不同,但有很多共同点。

以下是 3 个示例文档: