5

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

不知道是不是我的理解有误,但是关于XIP我实在是找不到太多的细节。STM32Fxxx的Techinal Reference Manuals只说他们有嵌入式flash并支持XIP,但没有给出任何细节。此外,我想我们还需要在 MCU 中实现一个非常复杂的 QSPI 控制器来支持 XIP。

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

4

1 回答 1

3

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

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

你说你找不到关于 XiP 的太多细节。对我来说最好的信息来源是各个制造商的应用说明。实现方式不同,但有很多共同点。

以下是 3 个示例文档:

于 2019-04-17T09:25:20.133 回答