通讯协议学习之路:QSPI协议理论

news2024/12/26 23:41:05

通讯协议之路主要分为两部分,第一部分从理论上面讲解各类协议的通讯原理以及通讯格式,第二部分从具体运用上讲解各类通讯协议的具体应用方法。

后续文章会同时发表在个人博客(jason1016.club)、CSDN;视频会发布在bilibili(UID:399951374)

一、QSPI是什么?

SPI协议其实是包括:Standard SPI、Dual SPI和Queued SPI三种协议接口,分别对应3-wire, 4-wire, 6-wire。

(1)通常我们说的SPI就是Standard SPI,有4根信号线,分别为CLK、CS、MOSI和MISO。数据线工作在全双工。

(2)Dual SPI,它只是针对SPI Flash而言,不是针对所有SPI外设。对于SPI Flash,全双工并不常用,因此扩展了mosi和miso的用法,让它们工作在半双工,用以加倍数据传输。也就是对于Dual SPI Flash,可以发送一个命令字节进入dual mode,这样mosi变成SIO0(serial io 0),mosi变成SIO1(serial io 1),这样一个时钟周期内就能传输2个bit数据,加倍了数据传输。

(3)类似的,还可以扩展,与也是针对SPI Flash,Qual SPI Flash增加了两根I/O线(SIO2,SIO3),目的是一个时钟内传输4个bit

而QSPI就是Queued SPI的简写。

二、接口问题

上图是某SPI FLASH的引脚接口示意图,它即支持SPI通信,也可以使用DSPI通信或者QSPI通信,这块芯片一共有8个有用的管脚,其每个管脚的功能定义如下:

每个引脚的详细描述如下:

1、Chip Select(/CS)

片选信号Chip Select(/CS)的作用是使能或者不使能设备的操作,当CS为高时,表示设备未被选中,串行数据输出线(DO或IO0,IO1,IO2,IO3)均处于高阻态,当CS为低时,表示设备被选中,FPGA可以给QSPI Flash发送数据或从QSPI Flash接收数据。

2、串行数据输入信号DI以及串行输出信号DO

标准的SPI协议在串行时钟信号(SCLK)的上升沿把串行输入信号DI上的数据存入QSPI Flash中,在串行时钟信号(SCLK)的下降沿把QSPI Flash中的数据串行化通过单向的DO引脚输出。而在Dual SPI与Quad SPI中,DI与DO均为双向信号(既可以作为输入,也可以作为输出)。

3、Write Project(/WP)

写保护信号的作用是防止QSPI Flash的状态寄存器被写入错误的数据,WP信号低电平有效,但是当状态寄存器2的QE位被置1时,WP信号失去写保护功能,它变成Quad SPI的一个双向数据传输信号。

4、HOLD(/HOLD)

HOLD信号的作用是暂停QSPI Flash的操作。当HOLD信号为低,并且CS也为低时,串行输出信号DO将处于高阻态,串行输入信号DI与串行时钟信号SCLK将被QSPI Flash忽略。当HOLD拉高以后,QSPI Flash的读写操作能继续进行。当多个SPI设备共享同一组SPI总线相同的信号的时候,可以通过HOLD来切换信号的流向。和WP信号一样,当当状态寄存器2的QE位被置1时,HOLD信号失去保持功能,它也变成Quad SPI的一个双向数据传输信号。

5、串行时钟线

串行时钟线用来提供串行输入输出操作的时钟。

三、QSPI的使用

3.1 工作模式

该接口可以在以下三种模式下工作:

① 间接模式:使用 QSPI 寄存器执行全部操作

② 状态轮询模式:周期性读取外部 Flash 状态寄存器,而且标志位置 1 时会产生中断(如擦除或烧写完成,会产生中断)

③ 内存映射模式:外部 Flash 映射到微控制器地址空间,从而系统将其视作内部存储器

采用双闪存模式时,将同时访问两个 Quad-SPI Flash,吞吐量和容量均可提高二倍。

QSPI功能框图,双闪存模式禁止:

QSPI 使用 6 个信号连接Flash,分别是四个数据线BK1_IO0~BK1_IO3,一个时钟输出CLK,一个片选输出(低电平有效)BK1_nCS,它们的作用介绍如下:

  • BK1_nCS:片选输出(低电平有效),适用于 FLASH 1。如果 QSPI 始终在双闪存模式下工作,则其也可用于 FLASH 2从设备选择信号线。QSPI通讯以BK1_nCS线置低电平为开始信号,以BK1_nCS线被拉高作为结束信号。
  • CLK:时钟输出,适用于两个存储器,用于通讯数据同步。它由通讯主机产生,决定了通讯的速率,不同的设备支持的最高时钟频率不一样,如STM32的QSPI时钟频率最大为fpclk/2,两个设备之间通讯时,通讯速率受限于低速设备。
  • BK1_IO0:在双线 / 四线模式中为双向 IO,单线模式中为串行输出,适用于FLASH 1。
  • BK1_IO1:在双线 / 四线模式中为双向 IO,单线模式中为串行输入,适用于FLASH 1。
  • BK1_IO2:在四线模式中为双向 IO,适用于 FLASH 1。
  • BK1_IO3:在四线模式中为双向 IO,适用于 FLASH 1。

3.2 状态

我们可以通过配置,选择到底使用哪种方式与其进行通信传输。在进行四线读写操作(QSPI)之前一定要把寄存器中的QE(Quad Enable)位置为1,除此以外,四线读操作还需要在读数据之前等待8个dummy clock用来加快读数据的速度(详细内容请阅读芯片手册)。所以,四线操作相对于单线操作而言除了要增加四线模式读写数据的状态以外还要增加一个写状态寄存器的功能用来开启QE(Quad Enable)位以及一个dummy用来等待8个clock。

四线模式的状态为以下几个:

1、空闲状态:用来初始化各个寄存器的值

2、发送命令状态:用来发送8-bit的命令码

3、发送地址状态:用来发送24-bit的地址码

4、读等待状态(单线模式):当读数据操作正在进行的时候进入此状态等待读数据完毕

5、写数据状态(单线模式):在这个状态FPGA往QSPI Flash里面写数据

6、写状态寄存器状态:用来把状态寄存器的QE(Quad Enable)置1

7、Dummy Clock状态:四线读数据之前需要等待8个dummy clock

8、写数据状态(四线模式):在这个状态FPGA往QSPI Flash里面通过四线模式写数据

9、读等待状态(四线模式):在这个状态等待FPGA从QSPI Flash里面通过四线模式读数据完成

10、结束状态:一条指令操作结束,并给出一个结束标志

其中6-9的状态是四线模式的代码在单线模式代码的基础上增加的四个状态。

3.3 命令序列

QSPI通过命令与Flash通信,每条命令包括指令、地址、交替(复用)字节、空指令和数据共五个阶段,而这五个阶段任一阶段均可跳过,但至少要包含指令、地址、交替字节或数据阶段之一。nCS在每条指令开始前下降,在每条指令完成后再次上升。QSPI四线模式下的读命令时序如下图所示。

1)指令阶段

这一阶段,将在QSPI_CCR[7:0]寄存器的instruction字段中配置的一条8位指令发送到Flash,指定待执行操作的类型。

尽管大多数Flash从IO0/SO信号(单线SPI模式)只能以一次1位的方式接收指令,但指令阶段可选择一次发送2位(在双线SPI模式中通过IO0/IO1)或一次发送4位(在四线SPI模式中通过IO0/IO1/IO2/IO3)。这可通过QSPI_CCR[9:8]寄存器中的IMODE[1:0]字段进行配置。若IMODE = 00,则跳过指令阶段,命令序列从地址阶段(如果存在)开始。

2)地址阶段

在地址阶段,将1-4字节发送到Flash,指示操作地址。待发送的地址字节数在QSPI_CCR[13:12]寄存器的ADSIZE[1:0]字段中进行配置。在间接模式和自动轮询模式下,待发送的地址字节在QSPI_AR寄存器的ADDRESS[31:0]中指定;在内存映射模式下,则通过AHB(来自于内核或DMA)直接给出地址。地址阶段可一次发送1位(单线SPI模式通过SO)、2位(双线SPI模式中通过IO0/IO1)或4位(在四线SPI模式中通过IO0/IO1/IO2/IO3)。这可通过QUADSPI_CCR[11:10]寄存器中的ADMODE[1:0]字段进行配置。若ADMODE = 00,则跳过地址阶段,命令序列直接进入下一阶段(如果存在)。

3)交替字节阶段

在交替字节阶段,将1-4字节发送到Flash,一般用于控制操作模式。待发送的交替字节数在QSPI_CCR[17:16]寄存器的ABSIZE[1:0]字段中进行配置。待发送的字节在QSPI_ABR寄存器中指定。

交替字节阶段可一次发送1位(在单线SPI模式中通过SO)、2位(在双线SPI模式中通过IO0/IO1)或4位(在四线SPI模式中通过IO0/IO1/IO2/IO3)。这可通过QSPI_CCR[15:14]寄存器中的ABMODE[1:0]字段进行配置。若ABMODE = 00,则跳过交替字节阶段,命令序列直接进入下一阶段(如果存在)。

交替字节阶段存在仅需发送单个半字节而不是一个全字节的情况,比如采用双线模式并且仅使用两个周期发送交替字节时。在这种情况下,固件可采用四线模式(ABMODE = 11)并发送一个字节,方法是ALTERNATE的位7和3置“1”(IO3保持高电平)且位6和2置“0”(IO2线保持低电平)。此时,半字节的高2位存放在ALTERNATE的位4:3,低2位存放在位1和0中。例如,如果半字节2 (0010)通过IO0/IO1发送,则ALTERNATE应设置为0x8A (1000_1010)。

4)空指令周期阶段

在空指令周期阶段,给定的1-31个周期内不发送或接收任何数据,目的是当采用更高的时钟频率时,给Flash留出准备数据阶段的时间。这一阶段中给定的周期数在QSPI_CCR[22:18]寄存器的DCYC[4:0]字段中指定。在SDR和DDR模式下,持续时间被指定为一定个数的全时钟周期。若DCYC为零,则跳过空指令周期阶段,命令序列直接进入数据阶段(如果存在)。空指令周期阶段的操作模式由DMODE确定。为确保数据信号从输出模式转变为输入模式有足够的“周转”时间,使用双线和四线模式从Flash接收数据时,至少需要指定一个空指令周期。

5)数据阶段

在数据阶段,可从Flash接收或向其发送任意数量的字节。在间接模式和自动轮询模式下,待发送/接收的字节数在QSPI_DLR寄存器中指定。在间接写入模式下,发送到Flash的数据必须写入QSPI_DR寄存器。在间接读取模式下,通过读取QSPI_DR寄存器获得从Flash接收的数据。在内存映射模式下,读取的数据通过AHB直接发送回Cortex或DMA。数据阶段可一次发送/接收1位(在单线SPI模式中通过SO)、2位(在双线SPI模式中通过IO0/IO1)或4位(在四线SPI模式中通过IO0/IO1/IO2/IO3)。这可通过QUADSPI_CCR[15:14]寄存器中的ABMODE[1:0] 字段进行配置。若DMODE = 00,则跳过数据阶段,命令序列在拉高nCS时立即完成。这一配置仅可用于仅间接写入模式。

参考文章:https://blog.csdn.net/wangguchao/article/details/105593303

四、疑难问题

1、qspi和spi异同

QSPI(Quad SPI)和SPI(Serial Peripheral Interface)是两种串行通信协议,用于在主设备和从设备之间进行数据传输。它们有一些相似之处,但也有一些重要的区别。

相似之处:

1. 串行通信:QSPI和SPI都是串行通信协议,通过少量的引脚进行数据传输。

2. 主从结构:QSPI和SPI都是基于主从结构的通信协议,其中主设备控制通信的发起和时序,从设备响应主设备的指令并进行数据传输。

不同之处:

1. 传输速率:QSPI通常支持更高的传输速率,因为它使用了四条数据线(Quad),可以同时传输四个数据位。而SPI通常只使用一条数据线,每次只能传输一个数据位。

2. 总线模式:QSPI支持多种总线模式,如单线模式、双线模式和四线模式,可以根据需求选择不同的模式。而SPI通常只支持单线模式。

3. 时钟频率:QSPI通常支持更高的时钟频率,可以实现更快的数据传输速度。SPI的时钟频率相对较低。

4. 引脚数量:QSPI通常需要更多的引脚来支持四线模式的数据传输,而SPI只需要少量的引脚。

5. 片选信号:QSPI通常使用片选信号(Chip Select)来选择要进行通信的从设备,而SPI通常使用片选信号或使能信号来选择从设备。

需要根据具体的应用需求和设备支持来选择使用QSPI还是SPI。QSPI适用于需要更高传输速率和更大带宽的应用,而SPI适用于传输速率要求不高的应用。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1109875.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【动态规划】392. 判断子序列、115. 不同的子序列

提示:努力生活,开心、快乐的一天 文章目录 392. 判断子序列💡解题思路🤔遇到的问题💻代码实现🎯题目总结 115. 不同的子序列💡解题思路🤔遇到的问题💻代码实现&#x1f3…

进程地址空间初识

进程地址空间: 空间布局图: 下面来看这样一段代码: 对应执行的结果如下: 可以看到一个很奇怪的现象: g_val的值不同,却用的是同一块地址 这是为什么? 说明对应的地址一定不是物理地址&#…

EF执行迁移时提示provider: SSL Provider, error: 0 - 证书链是由不受信任的颁发机构颁发的

ef在执行时提示provider: SSL Provider, error: 0 - 证书链是由不受信任的颁发机构颁发的。 只需要在数据库链接字符串后增加EncryptTrue;TrustServerCertificateTrue;即可 再次执行

c++生成随机数(猜数字游戏)

如果之前学过python的小伙伴看到随机数这个知识点肯定会觉得很简单,但是c的随机数就需要注意一些小细节了~ 先来给大家展示一下python的随机数: import random #导入随机数库 arandom.randint(100,200)#随机100-200之间的数字 以下是c的&a…

【黑夜送书第一期】好书来袭,AI时代程序员/项目经理开发之道送3本~

🏆作者简介,黑夜开发者,CSDN领军人物,全栈领域优质创作者✌,CSDN博客专家,阿里云社区专家博主,2023年6月CSDN上海赛道top4。 🏆数年电商行业从业经验,历任核心研发工程师…

Elasticsearch:生成式人工智能带来的社会转变

作者:JEFF VESTAL 了解 Elastic 如何走在大型语言模型革命的最前沿 – 通过提供实时信息并将 LLM 集成到数据分析的搜索、可观察性和安全系统中,帮助用户将 LLM 提升到新的高度。 iPhone 社会转变:新时代的黎明 曾几何时,不久前…

毫米波雷达2-雷达的工作模式

文章目录 flash mode: 用于烧写functional mode: Power off the board and remove the jumper from only header SOP2 (this puts the board back in functional mode) flash mode: 用于烧写 functional mode: Power off the board and remove the jumper from only header SOP…

配电房环境智能监控系统:守护电力设施,保障安全运行

随着电力系统的日益复杂化,配电房的环境监控显得尤为重要。传统的监控方式已经无法满足现代配电房的需求,因此,配电房环境智能监控系统应运而生。 一、系统概述 力安科技电易云配电房环境智能监控系统是一款集成了环境参数监测、设备运行…

当AI遇上3D建模:一场创意与技术的完美碰撞!

在这个充满无限可能的时代,科技的发展日新月异,让我们见证了一场创意与技术的完美碰撞——AI与3D建模的结合。这种结合为我们开辟了一个全新的领域,让我们在虚拟世界中自由挥洒创意,为现实世界创造更多的可能性。 3D建模AI生成是…

Windows下定时下载Linux服务器的数据库备份文件(pscp+bat脚本+定时任务)

下载传输软件pscp Download PuTTY: latest release (0.79) 创建bat执行脚本 echo 删除旧的备份文件 del D:\db_bk\*.dbecho 下载新的备份文件 D:\Programs\pscp -P 22 -pw youPassword youName192.168.1.1:/home/backup/test.db D:\db_bk\ 设置定时任务 1.使用任务计划程…

2023年【天津市安全员C证】报名考试及天津市安全员C证操作证考试

题库来源:安全生产模拟考试一点通公众号小程序 天津市安全员C证报名考试是安全生产模拟考试一点通生成的,天津市安全员C证证模拟考试题库是根据天津市安全员C证最新版教材汇编出天津市安全员C证仿真模拟考试。2023年【天津市安全员C证】报名考试及天津市…

代码与细节(一)

在用到 Java17的新特性 Unmodifiable Lists 时不知道你是否和我有同样的惊讶 为什么弄了这么多重载方法? 先说结论:为了性能。 其实一细想,都能想明白:varargs(可变参数) 的背后是数组的内存分配和初始化,相比正常的…

36张图详解网络基础知识

下午好,我的网工朋友。 在网工这行,只要是面试,一般都难逃网络协议相关的问题吧。 不管是OSI还是TCP/IP,这都是非常重要、基础的知识,很多知识点都是以它们为基础去串联的。 作为网络世界的底层技术,掌握…

外贸行业常用英文邮件模板分享

外贸邮件营销可以帮助企业扩大客户群、提高客户忠诚度、降低营销成本、提高营销效果、增强客户沟通和提高客户满意度等方面具有重要作用和优势,U-Mail邮件营销平台给大家分享一些外贸企业常用的英文邮件模板 以下是一些英文邮件模板案例,供您参考&#x…

使用Axure RP和内网穿透技术制作静态站点并实现公网访问

文章目录 前言1.在AxureRP中生成HTML文件2.配置IIS服务3.添加防火墙安全策略4.使用cpolar内网穿透实现公网访问4.1 登录cpolar web ui管理界面4.2 启动website隧道4.3 获取公网URL地址4.4. 公网远程访问内网web站点4.5 配置固定二级子域名公网访问内网web站点4.5.1创建一条固定…

【LeetCode:1726. 同积元组 | 哈希表】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

Echarts:双折线图的值一样,高度却不一样

问题 在使用Echarst绘制双折线图的时候,2条线在相同的横坐标下,y轴的值是一样的,但是展示在图上的时候2条折线在那个横坐标值下的高度却不一样即xx1时,y12,y22,但是显示在图上的却是:xx1时&…

Kafka Tool(Kafka 可视化工具)安装及使用教程

Kafka Tool(Kafka 可视化工具)安装及使用教程 Kafka Tool 工具下载 下载地址 http://www.kafkatool.com/download.html 下载界面 不同版本的Kafka对应不同版本的工具,个人使用的是2.11,所以下载的是最新的2.0.8版本&#xff…

璞华科技再次赋能,助力成都市温江区“码”上维权不烦“薪” !

科技赋能护“薪”行动 “码”上维权不烦“薪” 为保障劳动者工资收入的合法权益,提升人社部门智能化咨询服务能力,2023年10月17日,成都市温江区人力资源和社会保障局发布“码上护薪”小程序,助力劳动者“码”上维权不烦”薪”。…

Ant Design Form表单组件手动清楚校验信息(提示文字及红框)

出现场景 当我们的表单项是按条件验证的情况,或者该表单项是不可编辑然后是关联赋值(比如选择某个下拉框,赋上关联值),并且你还先点击了按钮进行验证,那么即使赋上了值也不能触发该表单二次验证。所以就需…