有许多NOR QSPI闪存芯片支持XIP (eXecute就位)。在这种模式下,嵌入式cpu (或MCU)可以直接执行存储在闪存中的代码。但我们知道,qspi闪存每个周期只能输出4位数据,而许多MCU,如ARM Cortex-M系列,每个周期需要32位指令。因此,MCU必须等待至少8个周期才能得到有效的指令,这似乎非常慢。此外,nor qspi闪存芯片的最大频率通常在150 the以下,STM32F407的频率为168 the,这意味着cpu接收有效指令的延迟较长。
我不知道我的理解是否错误,但我真的找不到关于XIP的很多细节。STM32Fxxx的技术参考手册只说它们嵌入了闪存并支持XIP,但没有显示任何细节。此外,我们还需要在MCU中实现一个非常复杂的QSPI控制器来支持XIP。
有人能给我一些关于这个问题的指导吗?
发布于 2019-04-17 09:25:20
据我所知,单片机使用RAM中的缓冲区读取外部闪存的指令,然后执行它们。它成批地读着它们。现在,一个块的大小在很大程度上取决于每个厂商的实现(即可用RAM的数量,闪存是如何连接的: SPI,双SPI,Quad SPI,八进制SPI,是可能的直接内存访问(DMA),闪存支持连续读取模式)。因此,如果块很小,那么核心就会停止等待指令。如果块很大,那么这就耗尽了RAM,并且在分支时,已经加载到RAM中的块将被重新加载到新代码中。
因此,让我们说闪光灯是与双SPI和DMA是可能的。然后,对于XiP,控制器将从执行引导加载程序代码开始(通常从内部ROM内存开始)。引导加载程序设置QSPI闪存控制器和内核的DMA以将指令从外部flash复制到RAM缓冲区。然后它将开始在该缓冲区中执行代码。DMA现在将异步地将指令复制到RAM中。这意味着实际的MCU核心几乎不会浪费时间复制代码。
你说你找不到关于XiP的很多细节。对我来说最好的信息来源是各种制造商的应用笔记。这些实现是不同的,但有很多共同点。
以下是3个示例文档:
https://stackoverflow.com/questions/54283543
复制相似问题