有许多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。
有人可以给我一些有关这个问题的指南吗?
答案 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个示例文档:
Microchip AN44065概述了XiP:http://ww1.microchip.com/downloads/en/AppNotes/Atmel-44065-Execute-in-Place-XIP-with-Quad-SPI-Interface-SAM-V7-SAM-E7-SAM-S7_Application-Note.pdf
ST.com AN5188第15页对RAM和外部闪存中的指令的性能进行了比较,这可能会引起特别关注:https://www.st.com/content/ccc/resource/technical/document/application_note/group0/d8/39/10/2f/ee/c9/4b/19/DM00514974/files/DM00514974.pdf/jcr:content/translations/en.DM00514974.pdf
ST.com AN4760第26页描述了如何实现速度改进以及XiP架构的细节,它也提供了一些很酷的公式:https://www.st.com/content/ccc/resource/technical/document/application_note/group0/b0/7e/46/a8/5e/c1/48/01/DM00227538/files/DM00227538.pdf/jcr:content/translations/en.DM00227538.pdf