对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个示例文档:
- 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与外部Flash中的指令进行了性能比较,这可能是特别有趣的: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
以上是关于对QSPI FLASH的XIP(eXecute In Place)功能感到困惑的主要内容,如果未能解决你的问题,请参考以下文章
Zynq系列FPGA如何固化bit文件到QSPI_Flash
STM32 - 内存映射模式下的 QSPI Flash 只读问题
RT1052程序成功从QSPI Flash加载到SDRAM里运行