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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对QSPI FLASH的XIP(eXecute In Place)功能感到困惑相关的知识,希望对你有一定的参考价值。

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

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

谁能给我一些这个问题的指导方针?

答案

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

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

你说你找不到有关XiP的更多细节。我的最佳信息来源是各种制造商的应用笔记。实现是不同的,但有很多共同点。

这是3个示例文档:

以上是关于对QSPI FLASH的XIP(eXecute In Place)功能感到困惑的主要内容,如果未能解决你的问题,请参考以下文章

Zynq系列FPGA如何固化bit文件到QSPI_Flash

MPSoC QSPI Flash 升级办法

STM32 - 内存映射模式下的 QSPI Flash 只读问题

RT1052程序成功从QSPI Flash加载到SDRAM里运行

RT1052程序成功从QSPI Flash加载到SDRAM里运行

RT1052程序成功从QSPI Flash加载到SDRAM里运行