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

Confused about the XIP (eXecute In Place) function of QSPI FLASH

提问人:HYF 提问时间:1/21/2019 更新时间:10/8/2023 访问量:6739

问:

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

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

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

闪存 控制器 NOR

评论


答:

3赞 user10607 4/17/2019 #1

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

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

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

以下是 3 个示例文档:

评论

0赞 HYF 4/18/2019
谢谢,但我仍然感到困惑。我正在考虑所有用户应用程序代码都存储在 中的情况,除了引导加载程序代码。nor 闪存的运行速度不可能比 MCU 快。许多高端MCU,如STM32H7xx,可以以400MHz的频率运行。qspi 闪存每个周期只能输出 4 位。此外,QSPI硬件控制器在读取数据之前必须向闪存发送命令字节。因此,MCU内核可能需要数十个周期才能获得完整的32位指令,这似乎非常慢。an external qspi flash
0赞 user10607 4/18/2019
我添加到答案中的第二个文档有一个速度比较,我很惊讶地发现 XiP 并没有落后于 RAM。因此,他们必须使用一些非常聪明的方案来获得与RAM相当的性能。如果你想真正理解使这成为可能的低级优化,我认为它需要不止一个SO问答:)
0赞 Timmy Brolin 8/20/2022
它只是CPU的正常指令缓存。这真的是快速制作 XIP 所需的所有魔力。
0赞 vjalle 10/8/2023 #2

XIP is a feature of the QSPI controller in the MCU, not a feature of the flash device itself. QSPI can be fast enough to be memory-mapped. That is, there is a dedicated memory area, and when that's accessed, the QSPI controller automatically issues the proper commands and fetches the data. The core has to wait for the access that usually takes much longer than accessing parallel memories. Of course that depends on the core clock and the QSPI configuration.

In some devices both the data and instruction buses can be connected to QSPI while in others only the data bus is connected. The latter devices support memory-mapped operation but not XIP. Some devices can only do memory-mapped reads while others can write, too. Some devices feature dedicated cache/buffer memory inside the QSPI controller, and prefetch data for improved performance while others directly translate AHB accesses without "thinking" much. There are many different implementations with various performance.

For the flash device XIP is just a read operation. No special support needed.