对QSPI FLASH的XIP(就地执行)功能感到困惑

时间:2019-01-21 04:31:14

标签: flash controller nor

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

我不知道我的理解是否有误,但是我确实找不到关于XIP的详细信息。 STM32Fxxx的《技术参考手册》仅说它们具有嵌入式闪存并支持XIP,但未显示任何详细信息。此外,我想我们还需要在MCU中实现一个非常复杂的QSPI控制器以支持XIP。

有人可以给我一些有关这个问题的指南吗?

1 个答案:

答案 0 :(得分:0)

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

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

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

以下是3个示例文档: