AXI Quad SPI IP核AXI4-Lite接口的部分操作指南

2024-06-09 20:04

本文主要是介绍AXI Quad SPI IP核AXI4-Lite接口的部分操作指南,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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已经空了,需要填充新的数据块以便进行后续的通信。

这篇关于AXI Quad SPI IP核AXI4-Lite接口的部分操作指南的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1046162

相关文章

SQL中JOIN操作的条件使用总结与实践

《SQL中JOIN操作的条件使用总结与实践》在SQL查询中,JOIN操作是多表关联的核心工具,本文将从原理,场景和最佳实践三个方面总结JOIN条件的使用规则,希望可以帮助开发者精准控制查询逻辑... 目录一、ON与WHERE的本质区别二、场景化条件使用规则三、最佳实践建议1.优先使用ON条件2.WHERE用

SpringBoot服务获取Pod当前IP的两种方案

《SpringBoot服务获取Pod当前IP的两种方案》在Kubernetes集群中,SpringBoot服务获取Pod当前IP的方案主要有两种,通过环境变量注入或通过Java代码动态获取网络接口IP... 目录方案一:通过 Kubernetes Downward API 注入环境变量原理步骤方案二:通过

MybatisPlus service接口功能介绍

《MybatisPlusservice接口功能介绍》:本文主要介绍MybatisPlusservice接口功能介绍,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友... 目录Service接口基本用法进阶用法总结:Lambda方法Service接口基本用法MyBATisP

从基础到进阶详解Pandas时间数据处理指南

《从基础到进阶详解Pandas时间数据处理指南》Pandas构建了完整的时间数据处理生态,核心由四个基础类构成,Timestamp,DatetimeIndex,Period和Timedelta,下面我... 目录1. 时间数据类型与基础操作1.1 核心时间对象体系1.2 时间数据生成技巧2. 时间索引与数据

Java SWT库详解与安装指南(最新推荐)

《JavaSWT库详解与安装指南(最新推荐)》:本文主要介绍JavaSWT库详解与安装指南,在本章中,我们介绍了如何下载、安装SWTJAR包,并详述了在Eclipse以及命令行环境中配置Java... 目录1. Java SWT类库概述2. SWT与AWT和Swing的区别2.1 历史背景与设计理念2.1.

Redis过期删除机制与内存淘汰策略的解析指南

《Redis过期删除机制与内存淘汰策略的解析指南》在使用Redis构建缓存系统时,很多开发者只设置了EXPIRE但却忽略了背后Redis的过期删除机制与内存淘汰策略,下面小编就来和大家详细介绍一下... 目录1、简述2、Redis http://www.chinasem.cn的过期删除策略(Key Expir

Linux链表操作方式

《Linux链表操作方式》:本文主要介绍Linux链表操作方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、链表基础概念与内核链表优势二、内核链表结构与宏解析三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势六、典型应用场景七、调试技巧与

Java Multimap实现类与操作的具体示例

《JavaMultimap实现类与操作的具体示例》Multimap出现在Google的Guava库中,它为Java提供了更加灵活的集合操作,:本文主要介绍JavaMultimap实现类与操作的... 目录一、Multimap 概述Multimap 主要特点:二、Multimap 实现类1. ListMult

SpringBoot整合Apache Flink的详细指南

《SpringBoot整合ApacheFlink的详细指南》这篇文章主要为大家详细介绍了SpringBoot整合ApacheFlink的详细过程,涵盖环境准备,依赖配置,代码实现及运行步骤,感兴趣的... 目录1. 背景与目标2. 环境准备2.1 开发工具2.2 技术版本3. 创建 Spring Boot

Python远程控制MySQL的完整指南

《Python远程控制MySQL的完整指南》MySQL是最流行的关系型数据库之一,Python通过多种方式可以与MySQL进行交互,下面小编就为大家详细介绍一下Python操作MySQL的常用方法和最... 目录1. 准备工作2. 连接mysql数据库使用mysql-connector使用PyMySQL3.