提问人:HYF 提问时间:1/21/2019 更新时间:10/8/2023 访问量:6739
对QSPI FLASH的XIP(eXecute In Place)功能感到困惑
Confused about the XIP (eXecute In Place) function of QSPI FLASH
问:
有很多 NOR QSPI FLASH 芯片支持 XIP(eXecute In Place)。在这种模式下,嵌入式CPU(或MCU)可以直接执行存储在闪存中的代码。但众所周知,qspi 闪存每个周期只能输出 4 位数据,而许多 MCU,例如 ARM Cortex-M 系列,每个周期需要 32 位指令。因此,MCU 必须等待至少 8 个周期才能获得有效的指令,这似乎非常慢。此外,NOR QSPI闪存芯片的最大频率通常低于150MHz,STM32F407的频率为168MHz,这意味着CPU接收有效指令的延迟更长。
我不知道我的理解是不是错了,但我真的找不到关于XIP的很多细节。STM32Fxxx 的技术参考手册只说它们有嵌入式闪存并支持 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 中的指令与外部闪存中的指令进行了性能比较,这可能特别值得关注: 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
评论
an external qspi flash
XIP is a feature of the QSPI controller in the MCU, not a feature of the flash device itself. QSPI can be fast enough to be memory-mapped. That is, there is a dedicated memory area, and when that's accessed, the QSPI controller automatically issues the proper commands and fetches the data. The core has to wait for the access that usually takes much longer than accessing parallel memories. Of course that depends on the core clock and the QSPI configuration.
In some devices both the data and instruction buses can be connected to QSPI while in others only the data bus is connected. The latter devices support memory-mapped operation but not XIP. Some devices can only do memory-mapped reads while others can write, too. Some devices feature dedicated cache/buffer memory inside the QSPI controller, and prefetch data for improved performance while others directly translate AHB accesses without "thinking" much. There are many different implementations with various performance.
For the flash device XIP is just a read operation. No special support needed.
下一个:闪存故障
评论