AXI Quad SPI datasheet阅读摘录 - minichao9901/TangNano-20k-Zynq-7020 GitHub Wiki

    1. 关于fifo,注意xip模式下固定为64, 位宽是32bit,因此容量是256bytes 。在spi模式,dual/quad的fifo是256深度,8bit宽度。

image image image

    1. xip模式下的3个读命令0x0b/0xbb/0xeb image
    1. AXI-Full接口的Burst-type有3种 image
    1. Enhanced Mode的AXI-Full接口,DTR/DRR寄存器可以以32bits访问,支持Fixed Burst。适合CDMA读写。 image
    1. 关于ss的控制:默认是手动控制,通过写SPISSR寄存器来控制。也可以自动控制,SPICR寄存器中一个bit配置位。关于SPI时钟,master模式是1/2,slave模式是1/4

手动控制SS输出:在默认模式下,可以通过写入SPISSR寄存器的数据来手动控制SS输出。当主设备被启用时,这个输出会直接显示在SS输出上。此模式仅适用于外部从设备。 自动SS输出:可以选择一个可选操作,其中SS输出由主设备在每次8位字符传输时自动翻转,通过SPICR寄存器中的位来控制。 最大SPI时钟速率:在主模式下,SPI时钟速率可高达AXI时钟速率的一半;在从模式下,可高达AXI时钟速率的四分之一。在从模式下配置时,需要AXI和外部时钟信号对齐。

image

image

    1. 关于XIP模式的0xbb/0xeb的执行,需要Flash的QE=1,这需要用户来保证。 image
    1. axi4 burst类型有3种: 它们有什么用途?

AXI4协议中的burst类型定义了在一次burst传输中地址是如何变化的。以下是三种AXI4 burst类型的差别:

  1. FIXED: (类似于key-hole)

    • 在FIXED burst类型中,地址保持不变。也就是说,所有的数据都在同一个地址上读取或写入。
    • 这种类型的burst主要用于对同一个地址进行连续的读写操作,例如,初始化或测试特定的内存地址。
  2. WRAP: (类似于circle)

    • WRAP burst类型涉及到在特定的数据块大小后,地址会“wrap around”或“wrap back”到块的起始地址。
    • 例如,如果一个WRAP burst的length是4,并且它从一个特定的地址开始,那么它会连续地读取或写入4个数据块,然后在第四个数据块之后,地址会回到开始的地址,再次开始传输。
    • WRAP burst通常用于需要循环访问数据块的场景。
  3. INCR (Incremental):

    • INCR是最常见的burst类型,其中每个数据传输后,地址都会递增。
    • 这种类型的burst用于顺序访问内存,其中每个传输的地址都是前一个传输地址的后继。
    • 例如,如果一个INCR burst的length是4,那么它将从起始地址开始,然后每次传输后地址递增,直到完成4次传输。

在AXI4协议中,burst类型对于内存控制器和处理器来说非常重要,因为它们需要知道如何处理和优化数据传输。不同的burst类型适用于不同的应用场景,INCR类型由于其简单性和普遍性,是最常用的类型。而FIXED和WRAP类型则用于特定的应用需求。

    1. 关于spi传输的过程:寄存器配置 第78页的内容描述了SPI主设备在手动模式下,使用SPICR寄存器的第24位来断言从设备选择向量(Slave Select Vector),并介绍了如何配置和执行SPI事务。以下是该部分内容的总结:
SPI事务步骤:

从已知状态开始,包括SPI总线仲裁。
根据需要配置DGIER(设备全局中断使能寄存器)和IPIER(IP中断使能寄存器)。
为目标从SPI设备配置必要的参数,包括DTR(数据传输寄存器)和控制寄存器,并启用设备。
向主SPI的DTR寄存器/FIFO写入初始数据。
确保SPISSR(从设备选择寄存器)寄存器包含全为1的值。
向SPICR寄存器写入配置数据,包括设置位7以手动断言SS向量,并设置启用位和主传输禁止位。
手动向SPISSR寄存器写入数据以断言SS向量。(关键)
清除SPICR寄存器中的禁止位以启动传输。
等待中断(通常是IPISR位4)或轮询状态以完成事务。
通过设置主传输禁止位来服务中断请求。
向主寄存器/FIFO和从设备写入新数据。
清除主传输禁止位以继续传输N个8位元素。
重复上述步骤,直到所有数据都被传输完毕。
将SPISSR寄存器写入全1或退出手动从设备选择断言模式,以去断言SS向量。(关键)

可以看到,手动控制SPISSR是很重要的的。它可以支持中间发送多个数据包,最后才拉SS信号。 其次,一定是先写fifo数据,再启动传输。这个顺序不能反了。 写fifo数据,可以用for写,也可以用cdma写。

    1. 关于spi dual/quad编程指南 第82页的内容专注于双/四SPI模式下的事务处理,提供了在这种模式下操作核心的步骤和要求。以下是该部分内容的总结:
  1. 模式配置:确保核心被配置为双模式(Dual)或四模式(Quad),并且选择了正确的SPI从设备。

  2. 指令和时钟设置:确保根据目标SPI设备的要求,设置了正确的指令和SPI时钟频率。

  3. FIFO深度设置:设置FIFO深度参数,可以是16或256。

  4. 核心复位:通过写入软复位寄存器来复位核心,这个复位在16个AXI周期内有效。

  5. SPICR寄存器配置:写入SPI控制寄存器(SPICR)以将核心设置为主模式,配置CPOL和CPHA值,并确保设置了主传输禁止位。

  6. 中断使能:写入IPIER和IPISR寄存器以启用所需的中断。

  7. 数据传输队列(DTR)填充:向SPI DTR写入命令、地址、虚拟周期和数据字节,按照目标设备数据表中提供的顺序。

  8. 芯片选择信号断言:写入SPI从设备选择寄存器(SPISSR)以从核心断言芯片选择信号。

  9. 启动SPI时钟:写入SPICR寄存器以启动SPI时钟,这通常涉及到清除主传输禁止位。

  10. 写操作等待:对于写操作,需要等待DTR空中断发生,这表明数据已经传输完毕。

  11. 连续传输:如果在DTR空中断发生后还有数据需要传输,可以继续向SPI DTR写入数据,只要SPISSR寄存器保持不变。

  12. 读取操作:对于读取操作,步骤11和12同样适用。在读取SPI从内存时,需要在DTR FIFO中填充任意数据。

  13. 结束事务:完成事务后,通过设置SPISSR寄存器的所有位为1来禁用选中的从设备,或者通过设置SPICR寄存器中的主传输禁止位来停止SPI时钟。

  14. FIFO重置:在新事务开始前,确保SPI DTR和DRR FIFO被重置,以便FIFO可以被重置,并且DTR FIFO的第一个条目可以与支持的命令进行比较。

  15. 双/四SPI配置:在双或四SPI配置中,必须在传输SPI数据前复位SPI DTR和DRR FIFO,并按照命令、地址、虚拟周期和数据的顺序格式填充SPI DTR FIFO。

  16. 传输格式:在标准SPI模式下,CPHA-CPOL的00、01、10或11模式都被允许。在双或四SPI模式下,只允许00或11模式。

  17. 数据传输时序:对于CPHA等于零的传输格式,文档提供了一个时序图,展示了标准SPI模式下数据写入-读取周期的时序。

这些步骤概述了在双/四SPI模式下,如何配置和操作AXI Quad SPI核心以执行数据传输事务。

可以看到,新事务开始之前,要先复位tx/rx fifo。建议用SPISSR手动模式,以控制任意发送数据量。

    1. 关于SS的控制 image