【问题标题】:Confused about the XIP (eXecute In Place) function of QSPI FLASH对 QSPI FLASH 的 XIP (eXecute In Place) 功能感到困惑
【发布时间】:2019-06-14 11:07:57
【问题描述】:

有很多支持 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。

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

【问题讨论】:

    标签: flash controller nor


    【解决方案1】:

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

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

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

    这里有 3 个示例文档:

    【讨论】:

    • 谢谢,但我还是很困惑。我正在考虑所有用户应用程序代码都存储在an external qspi flash 中的情况,但引导加载程序代码除外。没有办法nor flash跑得比MCU快。 STM32H7xx 等许多高端 MCU 可以在 400MHz 下运行。 qspi 闪存每个周期只能输出 4 位。此外,QSPI 硬件控制器必须在读取数据之前将命令字节发送到闪存。这样一来,MCU 内核可能要花费数十个周期才能获得一条完整的 32 位指令,这看起来非常缓慢。
    • 我添加到我的答案中的第二个文档有一个速度比较,我很惊讶地看到 XiP 并没有落后于 RAM 那么多。所以他们必须使用一些非常聪明的方案来获得与 RAM 相当的性能。如果您想真正了解使这成为可能的低级优化,我认为它需要不止一个 SO 问题和答案:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-04
    • 2013-08-21
    • 2013-05-11
    • 2013-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多