1 AXI4-Lite接口标准SPI模式——传统模式下可选FIFO的使用
当AXI Quad SPI IP核配置为标准SPI模式时,可以选择在设计中包含16或256深度的可选FIFOs。由于AXI Quad SPI是全双工的,所以发送和接收FIFOs都作为一对被实例化,并且可以包含在IP核中。
当实现FIFO时,要求所有的从选择地址都相同缓冲在FIFO中的数据。这是必要的,因为从机选择地址没有FIFO。发送和接收FIFO都有16(或256)个元素深度,并且可以使用单个AXI事务访问,因为不支持突发模式。
发送FIFO是只写的。当有数据写入FIFO时,占用数增加;当SPI传输完成时,数量减少。由于这种操作,中止的SPI传输仍然有数据可用于传输重试。传输只能在主模式下通过设置SPICR的第8位为1来中止。在slave模式下设置此位对slave的操作没有影响。这些中止的传输在SPI接口上。占用数包含在一个只读寄存器中。
如果在FIFO已满时尝试写入,将给出确认信号并生成错误信号。
与发送FIFO相关的中断包括:
- 发送数据FIFO为空
- 发送FIFO半空
- 发送FIFO下溢
接收FIFO是只读的。当从FIFO中读取数据时,占用数会减少;当SPI传输完成时,该数字会增加。这是因为FIFO是一个存储数据的队列,它按照数据进入的顺序来读取数据。当数据被读取时,表示队列中的元素数量减少;当SPI完成一次数据传输(可能是从外部设备到内部FIFO),队列中的元素数量会增加。
如果尝试在FIFO为空时读取数据,会给出确认信号,并生成一个错误信号。当接收FIFO变满时,会生成接收FIFO满中断。数据在SPI传输完成后会自动从SPI模块的移位寄存器写入FIFO。如果接收FIFO已满且接收到更多数据,会发出接收FIFO溢出中断。当这种情况发生时,SPI模块尝试写入已满接收FIFO的所有数据都会丢失。
AXI Quad SPI IP核配置有FIFO时,SPI传输的启动方式可以根据SPICR(SPI控制寄存器)中使能位的设置分为两种不同的情况。如果在FIFO中加载第一个数据之前设置使能位,则在写入主发送FIFO后立即开始SPI传输。如果在向发送FIFO写入更多元素之前,通过SPI传输清空了FIFO,则会触发一个中断。当AXI到SPI SCK的频率比足够小时,这种情况非常可能发生。
SPI传输的启动还可以采用另一种方式:先将FIFO加载至多16个或256个元素,然后设置使能位来启动SPI传输。在这种情况下,当所有元素都被传输完成后,会触发一个中断。在所有情况下,都可以在清空FIFO之前向发送FIFO写入更多数据,以增加传输的元素数量。
2 AXI4-Lite接口Dual/Quad SPI模式——可选FIFO深度
当该IP核配置为Dual/Quad SPI模式时,FIFO始终存在,并且可以选择其深度。该FIFO的深度可以是16或256。在这种模式下,FIFO的宽度总是8位。
3 AXI4-Lite接口SPI主回环(loopback)操作
SPI主环回操作是一种用于加速测试的技术。通过在SPICR(SPICR(0))中设置回环位来选择该操作,从而实现从发送器输出到接收器输入的内部连接。在此操作中,接收器和发送器会按正常方式工作,但接收到的数据(来自远程从设备)会被忽略。
主回环操作仅在SPI设备被配置为主设备,并运行在标准SPI事务模式下时有效。当该IP核被配置为Dual/Quad SPI模式时,不支持主回环操作。
在执行此操作时,SPI主设备发送的数据会直接从发送器输出循环回到接收器输入,而不需要经过外部从设备。这一特性使得测试过程更加便捷,因为可以快速地验证SPI主设备的发送和接收功能是否正常,而无需连接实际的从设备。
4 AXI4-Lite接口硬件错误检测
SPI架构在多主配置中依赖于软件控制的总线仲裁来避免冲突和错误,但SPI硬件实现的错误检测功能是有限的。以下是关于SPI错误检测机制的内容,特别是内容争用错误检测(Contention Error Detection)的详细解释:
内容争用错误检测
当一个SPI设备被配置为主设备时,如果被另一个同时被配置为主设备的SPI设备选中(即其SS位被断言),内容争用错误检测机制会被触发。在这种场景下,被选中作为从设备的主设备会立即驱动其输出,以避免由于同时驱动争用导致的硬件损坏。
同时,主设备还会在SPISR(SPI状态寄存器)中设置模式故障错误(MODF)位。这个位可以通过读取SPISR来自动清除。
在发生MODF错误后,主设备必须被禁用并重新启用,同时确保数据正确。如果系统配置了FIFO,则可能需要清除FIFO中的数据。
SPI从设备错误检测
当一个SPI设备被配置为从设备但未启用时,如果被另一个SPI设备选中(即其SS位被断言),类似的错误检测机制会被触发。在这种场景下,IPISR通过选通将位1设置到IPISR寄存器。
SPI通信中提供了对Underrun(下溢)和Overrun(上溢)条件错误的检测机制。以下是这两种错误检测机制的详细解释:
Underrun条件错误检测
Underrun条件仅在从设备模式下发生。当主设备命令进行数据传输,但从设备的发送寄存器或FIFO中没有数据可供传输时,会发生Underrun条件。
当Underrun条件发生时,从设备的Underrun中断会被触发。从设备的移位寄存器会被加载为全零状态,以便进行传输。这意味着在通信过程中,主设备会接收到全零的数据。
Overrun条件错误检测
Overrun条件既可以发生在主设备也可以发生在从设备上。当接收寄存器或FIFO已满时,如果继续发生数据传输,则会发生Overrun条件。
在Overrun条件下,该次传输中接收到的数据不会被存入寄存器(即数据丢失),且IPISR寄存器的Overrun中断位(位5)会被触发。
5 设置Frequency Ratio参数
在设置AXI Quad SPI IP核的Frequency Ratio参数时,需要考虑多个因素以确保与连接的SPI从设备(如Micron、Winbond、Macronix和Spansion Flash存储器)之间的正确通信。可以使用Winbond、Micron、Spansion和Macronix SPI闪存来测试标准、双线模式和四线模式。
首先,需要读取目标SPI从设备(如SPI flash存储器或EEPROM)的数据手册,以了解其最大操作速度。Frequency Ratio参数决定了AXI Quad SPI IP核SCK引脚上的时钟频率。这个参数应该根据SPI从设备的最大时钟频率和AXI时钟来设置。不同的SPI从设备可能支持不同的最大时钟频率,因此,在设置Frequency Ratio参数时,需要考虑到所有连接到AXI Quad SPI IP核的从设备的最大时钟频率。
6 AXI4-Lite接口 SPI从设备模式——传统模式下的标准SPI配置
AXI Quad SPI IP核可以通过将外部主设备的从选择线连接到SPISEL并将SPI控制寄存器(SPICR)的第2位设置为0来配置为从模式。只有在标准SPI模式下才允许使用从模式。在双线或四线SPI模式下,IP核仅支持主模式。
当“Frequency Ratio”参数大于4时,所有传入的信号都会与AXI时钟同步。这意味着传入的信号会被调整或缓冲以匹配AXI时钟的频率和相位。
当“Frequency Ratio”参数设置为4时,由于严格的时序要求,传入的SCK时钟信号及其同步信号将直接在内部逻辑中使用。因此,在这种情况下,外部时钟必须与AXI时钟同步。
对于其他“Frequency Ratio”参数值,虽然同步是首选的,但可能不是必需的。
在从模式操作中,通过将FIFO深度设置为标准的16或256来使用FIFO SPI模式。
在AXI Quad SPI IP核的从模式下,除了IPISR中的其他中断外,还有两个特定的中断可用。这些中断与从模式的数据传输和配置相关。
- DRR_Not_Empty(位8)
- Slave_Mode_Select(位7)
在其他SPI主设备开始通信之前,必须将IP核的发送FIFO填充所需的数据块,数据块是SPI通信中传输的数据单元,通常包含多个字节或位。用所需的数据节拍填充从IP核传输FIFO是必要的。当主设备开始通信时,IP核配置在从设备模式,IP核一直传输数据直到数据在其传输FIFO中可用。
当AXI Quad SPI IP核被配置为从模式时,它是强制性的要求,即必须在开始通信之前将从IP核的发送FIFO填充所需的数据块。数据块是SPI通信中传输的数据单元,它们包含了要在主设备和从设备之间交换的信息。
当主设备开始通信,并且IP核已配置为从模式时,IP核将持续传输数据,直到其发送FIFO中的数据可用为止。换句话说,从设备会按照FIFO中数据的顺序将其发送给主设备。
在AXI Quad SPI通信中,当从设备的FIFO发送完最后一个数据块(data beat)后,它会生成一个DTR空信号,用于通知主设备或系统控制器,从设备的发送FIFO已经空了,需要填充新的数据块以便进行后续的通信。