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

相关文章

详解Java如何向http/https接口发出请求

《详解Java如何向http/https接口发出请求》这篇文章主要为大家详细介绍了Java如何实现向http/https接口发出请求,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 用Java发送web请求所用到的包都在java.net下,在具体使用时可以用如下代码,你可以把它封装成一

使用MongoDB进行数据存储的操作流程

《使用MongoDB进行数据存储的操作流程》在现代应用开发中,数据存储是一个至关重要的部分,随着数据量的增大和复杂性的增加,传统的关系型数据库有时难以应对高并发和大数据量的处理需求,MongoDB作为... 目录什么是MongoDB?MongoDB的优势使用MongoDB进行数据存储1. 安装MongoDB

Linux使用fdisk进行磁盘的相关操作

《Linux使用fdisk进行磁盘的相关操作》fdisk命令是Linux中用于管理磁盘分区的强大文本实用程序,这篇文章主要为大家详细介绍了如何使用fdisk进行磁盘的相关操作,需要的可以了解下... 目录简介基本语法示例用法列出所有分区查看指定磁盘的区分管理指定的磁盘进入交互式模式创建一个新的分区删除一个存

Golang操作DuckDB实战案例分享

《Golang操作DuckDB实战案例分享》DuckDB是一个嵌入式SQL数据库引擎,它与众所周知的SQLite非常相似,但它是为olap风格的工作负载设计的,DuckDB支持各种数据类型和SQL特性... 目录DuckDB的主要优点环境准备初始化表和数据查询单行或多行错误处理和事务完整代码最后总结Duck

C# 读写ini文件操作实现

《C#读写ini文件操作实现》本文主要介绍了C#读写ini文件操作实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录一、INI文件结构二、读取INI文件中的数据在C#应用程序中,常将INI文件作为配置文件,用于存储应用程序的

Python使用qrcode库实现生成二维码的操作指南

《Python使用qrcode库实现生成二维码的操作指南》二维码是一种广泛使用的二维条码,因其高效的数据存储能力和易于扫描的特点,广泛应用于支付、身份验证、营销推广等领域,Pythonqrcode库是... 目录一、安装 python qrcode 库二、基本使用方法1. 生成简单二维码2. 生成带 Log

Java操作ElasticSearch的实例详解

《Java操作ElasticSearch的实例详解》Elasticsearch是一个分布式的搜索和分析引擎,广泛用于全文搜索、日志分析等场景,本文将介绍如何在Java应用中使用Elastics... 目录简介环境准备1. 安装 Elasticsearch2. 添加依赖连接 Elasticsearch1. 创

高效管理你的Linux系统: Debian操作系统常用命令指南

《高效管理你的Linux系统:Debian操作系统常用命令指南》在Debian操作系统中,了解和掌握常用命令对于提高工作效率和系统管理至关重要,本文将详细介绍Debian的常用命令,帮助读者更好地使... Debian是一个流行的linux发行版,它以其稳定性、强大的软件包管理和丰富的社区资源而闻名。在使用

Java后端接口中提取请求头中的Cookie和Token的方法

《Java后端接口中提取请求头中的Cookie和Token的方法》在现代Web开发中,HTTP请求头(Header)是客户端与服务器之间传递信息的重要方式之一,本文将详细介绍如何在Java后端(以Sp... 目录引言1. 背景1.1 什么是 HTTP 请求头?1.2 为什么需要提取请求头?2. 使用 Spr

java Stream操作转换方法

《javaStream操作转换方法》文章总结了Java8中流(Stream)API的多种常用方法,包括创建流、过滤、遍历、分组、排序、去重、查找、匹配、转换、归约、打印日志、最大最小值、统计、连接、... 目录流创建1、list 转 map2、filter()过滤3、foreach遍历4、groupingB