在使用W25Q128JV DTR Flash颗粒时会发现这个芯片可以通过SPI、Dual SPI、Quad SPI、QPI进行擦除编程读写,第一次接触到这些的小伙伴可能就会有点头晕了,这些SPI都是什么格式呢?
下面就让我们来一一了解一下他们之间的区别,以及如何使用它们。下面的链接是W25Q128JV DTR的芯片手册,请特别注意其与W25Q128JV的区别。
无论是哪种SPI,都是主从式接口,同一条总线上只能有一个主机,可以有一个或者多个从机;传输都是由主机发起的。
何为总线空闲?
一般情况下,当主机的CS/SS引脚输出为高电平时,代表总线空闲;
也叫标准SPI接口,有四根线,分别为CS/SS(片选)、MISO(主机输入从机输出)、MOSI(主机输出从机输入)、CLK(串行时钟);并且四根线都是单向的;主机通过MOSI发送数据给设备;设备通过MISO发送数据给主机。
标准SPI支持全双工通信、半双工通信以及单工通信。
全工通信是指发送和接收同时进行;半双工是指某个时刻只能发送或者接收;单工指只能一个方向通信,要么主机只能发送,要么只能接收。
一般情况下硬件接线拓扑如下

上图是一台主机一台从机的硬件接线情况

上图是一台主机三台从机的接线情况,通过IO1/2/3分别选中对应从设备,某个时刻只能选中的从设备可以通信。
根据CLK与MISO、MOSI之间的位置关系,标准SPI有4种模式

其直接影响SPI总线空闲时的时钟信号是高电平还是低电平;CPOL=1 表示空闲时是高电平,CPOL=0 表示空闲时是低电平;
其直接决定SPI总线从哪个跳变沿开始采样数据;
CPHA=0 表示从第一个跳变沿开始采样,CPHA=1 表示从第二个跳变沿开始采样;
| mode | CPOL | CPHA |
|---|---|---|
| mode 0 | 0 | 0 |
| mode 1 | 0 | 1 |
| mode 2 | 1 | 0 |
| mode 3 | 1 | 1 |
我们发现标准SPI通信时发送和接收时主机和从机都只能使用自己的那根数据线进行数据传输,Dual SPI无论是接收还是发送都是使用两根数据线进行的,所以单向数据传输速度上是标准SPI的双倍。
另外需要注意Dual SPI一般情况下用于半双工通信。


另外需要注意Qual SPI一般情况下用于半双工通信。
手把手系列--STM32 QSPI操作指南_coder.mark的博客-CSDN博客
https://blog.csdn.net/tianizimark/article/details/121718162 Quad SPI外设可以使用任意一种SPI模式,具体要看从设备的要求。
这个接口要求通信的每个阶段都需要使用4线进行通信。
基于上面的介绍,相信大家对这几个名词已经有了一定的了解
OK,下面我们根据W25Q128JV DTR的芯片手册来具体说说这四种SPI的使用区别
注意不是所有的从设备都支持QPI数据格式的,但是一般情况下MCU端的Quad SPI硬件外设支持每个阶段的自定义配置。
由于Flash操作的特殊性,一般第一个字节都是操作码,并且一般都是半双工通信或者单工通信。
下面图例中DI是指从设备的输入段,DO是指从设备的输出端
只发送命令字的情况

发送多个字节的情况

发送一个字节然后进行接收的情况

Dual SPI并不要求每一个阶段都需要是双线传输,在Flash操作中一般第一个字节都是单线传输的

上图中除了第一个字节是单线传输,后面的地址阶段和数据阶段都是通过双线传输,这种传输方式也叫做DIO 。
上图中只在数据阶段是双线传输,地址阶段是标准SPI传输,这种形式的传输方式叫做DOUT。

上图中只在数据阶段是四线传输,指令和地址阶段是标准SPI传输,这种形式的传输也叫做QOUT。
上图中只在指令标准SPI传输,其他阶段都是四线传输,这种形式的传输也叫做QIO。

上图中所有阶段都是四线传输,这种形式的传输也叫做QPI。

至此,我们基本上已经完成了本博文的目的,希望对你有所帮助,记得点赞加收藏哈。
另外,关于华邦FLASH的操作细节,大家可以关注我的对应博文
我构建了两个需要相互通信和发送文件的Rails应用程序。例如,一个Rails应用程序会发送请求以查看其他应用程序数据库中的表。然后另一个应用程序将呈现该表的json并将其发回。我还希望一个应用程序将存储在其公共(public)目录中的文本文件发送到另一个应用程序的公共(public)目录。我从来没有做过这样的事情,所以我什至不知道从哪里开始。任何帮助,将不胜感激。谢谢! 最佳答案 无论Rails是什么,几乎所有Web应用程序都有您的要求,大多数现代Web应用程序都需要相互通信。但是有一个小小的理解需要你坚持下去,网站不应直接访问彼此
请帮助我理解范围运算符...和..之间的区别,作为Ruby中使用的“触发器”。这是PragmaticProgrammersguidetoRuby中的一个示例:a=(11..20).collect{|i|(i%4==0)..(i%3==0)?i:nil}返回:[nil,12,nil,nil,nil,16,17,18,nil,20]还有:a=(11..20).collect{|i|(i%4==0)...(i%3==0)?i:nil}返回:[nil,12,13,14,15,16,17,18,nil,20] 最佳答案 触发器(又名f/f)是
在Cooper的书BeginningRuby中,第166页有一个我无法重现的示例。classSongincludeComparableattr_accessor:lengthdef(other)@lengthother.lengthenddefinitialize(song_name,length)@song_name=song_name@length=lengthendenda=Song.new('Rockaroundtheclock',143)b=Song.new('BohemianRhapsody',544)c=Song.new('MinuteWaltz',60)a.betwee
我正在检查一个Rails项目。在ERubyHTML模板页面上,我看到了这样几行:我不明白为什么不这样写:在这种情况下,||=和ifnil?有什么区别? 最佳答案 在这种特殊情况下没有区别,但可能是出于习惯。每当我看到nil?被使用时,它几乎总是使用不当。在Ruby中,很少有东西在逻辑上是假的,只有文字false和nil是。这意味着像if(!x.nil?)这样的代码几乎总是更好地表示为if(x)除非期望x可能是文字false。我会将其切换为||=false,因为它具有相同的结果,但这在很大程度上取决于偏好。唯一的缺点是赋值会在每次运行
我正在阅读一本关于Ruby的书,作者在编写类初始化定义时使用的形式与他在本书前几节中使用的形式略有不同。它看起来像这样:classTicketattr_accessor:venue,:datedefinitialize(venue,date)self.venue=venueself.date=dateendend在本书的前几节中,它的定义如下:classTicketattr_accessor:venue,:datedefinitialize(venue,date)@venue=venue@date=dateendend在第一个示例中使用setter方法与在第二个示例中使用实例变量之间是
SPI接收数据左移一位问题目录SPI接收数据左移一位问题一、问题描述二、问题分析三、探究原理四、经验总结最近在工作在学习调试SPI的过程中遇到一个问题——接收数据整体向左移了一位(1bit)。SPI数据收发是数据交换,因此接收数据时从第二个字节开始才是有效数据,也就是数据整体向右移一个字节(1byte)。请教前辈之后也没有得到解决,通过在网上查阅前人经验终于解决问题,所以写一个避坑经验总结。实际背景:MCU与一款芯片使用spi通信,MCU作为主机,芯片作为从机。这款芯片采用的是它规定的六线SPI,多了两根线:RDY和INT,这样从机就可以主动请求主机给主机发送数据了。一、问题描述根据从机芯片手
最近在学习CAN,记录一下,也供大家参考交流。推荐几个我觉得很好的CAN学习,本文也是在看了他们的好文之后做的笔记首先是瑞萨的CAN入门,真的通透;秀!靠这篇我竟然2天理解了CAN协议!实战STM32F4CAN!原文链接:https://blog.csdn.net/XiaoXiaoPengBo/article/details/116206252CAN详解(小白教程)原文链接:https://blog.csdn.net/xwwwj/article/details/105372234一篇易懂的CAN通讯协议指南1一篇易懂的CAN通讯协议指南1-知乎(zhihu.com)视频推荐CAN总线个人知识总
Transformers开始在视频识别领域的“猪突猛进”,各种改进和魔改层出不穷。由此作者将开启VideoTransformer系列的讲解,本篇主要介绍了FBAI团队的TimeSformer,这也是第一篇使用纯Transformer结构在视频识别上的文章。如果觉得有用,就请点赞、收藏、关注!paper:https://arxiv.org/abs/2102.05095code(offical):https://github.com/facebookresearch/TimeSformeraccept:ICML2021author:FacebookAI一、前言Transformers(VIT)在图
📢博客主页:https://blog.csdn.net/weixin_43197380📢欢迎点赞👍收藏⭐留言📝如有错误敬请指正!📢本文由Loewen丶原创,首发于CSDN,转载注明出处🙉📢现在的付出,都会是一种沉淀,只为让你成为更好的人✨文章预览:一.分辨率(Resolution)1、工业相机的分辨率是如何定义的?2、工业相机的分辨率是如何选择的?二.精度(Accuracy)1、像素精度(PixelAccuracy)2、定位精度和重复定位精度(RepeatPrecision)三.公差(Tolerance)四.课后作业(Post-ClassExercises)视觉行业的初学者,甚至是做了1~2年
转自:spring.profiles.active和spring.profiles.include的使用及区别说明下文笔者讲述spring.profiles.active和spring.profiles.include的区别简介说明,如下所示我们都知道,在日常开发中,开发|测试|生产环境都拥有不同的配置信息如:jdbc地址、ip、端口等此时为了避免每次都修改全部信息,我们则可以采用以上的属性处理此类异常spring.profiles.active属性例:配置文件,可使用以下方式定义application-${profile}.properties开发环境配置文件:application-dev