sip 时序图_SPI总线协议及SPI时序图详解

一、SPI总线介绍

SPI,是英语Serial Peripheral Interface的缩写,顾名思义就是串行外围设备接口。SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议。

SPI是一个环形总线结构,由ss(cs)、sck、sdi、sdo构成,其时序其实很简单,主要是在sck的控制下,两个双向移位寄存器进行数据交换。

上升沿发送、下降沿接收、高位先发送。

上升沿到来的时候,sdo上的电平将被发送到从设备的寄存器中。

下降沿到来的时候,sdi上的电平将被接收到主设备的寄存器中。

假设主机和从机初始化就绪:并且主机的sbuff=0xaa (10101010),从机的sbuff=0x55 (01010101),下面将分步对spi的8个时钟周期的数据情况演示一遍(假设上升沿发送数据)。

---------------------------------------------------

脉冲 主机sbuff 从机sbuff sdi sdo(到从设备)

---------------------------------------------------

0 00-0 10101010 01010101 0 0

---------------------------------------------------

1 0--1 0101010x 10101011 0 1

1 1--0 01010100 10101011 0 1

---------------------------------------------------

2 0--1 1010100x 01010110 1 0

2 1--0 10101001 01010110 1 0

---------------------------------------------------

3 0--1 0101001x 10101101 0 1

3 1--0 01010010 10101101 0 1

---------------------------------------------------

4 0--1 1010010x 01011010 1 0

4 1--0 10100101 01011010 1 0

---------------------------------------------------

5 0--1 0100101x 10110101 0 1

5 1--0 01001010 10110101 0 1

---------------------------------------------------

6 0--1 1001010x 01101010 1 0

6 1--0 10010101 01101010 1 0

---------------------------------------------------

7 0--1 0010101x 11010101 0 1

7 1--0 00101010 11010101 0 1

---------------------------------------------------

8 0--1 0101010x 10101010 1 0

8 1--0 01010101 10101010 1 0

全双工通讯,一次传2个字节

---------------------------------------------------

这样就完成了两个寄存器8位的交换,上面的0--1表示上升沿、1--0表示下降沿,sdi、 sdo相对于主机而言的。根据以上分析,一个完整的传送周期是16位,即两个字节,因为,首先主机要发送命令过去,然后从机根据主机的名准备数据,主机在下一个8位时钟周期才把数据读回来。

SPI总线是Motorola公司推出的三线同步接口,同步串行3线方式进行通信:一条时钟线SCK,一条数据输入线MOSI,一条数据输出线MISO;用于 CPU与各种外围器件进行全双工、同步串行通讯。SPI主要特点有:可以同时发出和接收串行数据;可以当作主机或从机工作;提供频率可编程时钟;发送结束中断标志;写冲突保护;总线竞争保护等。可以同时发送和接受串行数据;可以当作主机或从及工作;提供频率可编程始终;发送结束终端标志;写冲突保护;总写竞争保护.

SPI总线有四种工作方式(SP0, SP1, SP2, SP3),其中使用的最为广泛的是SPI0和SPI3方式。

SPI模块为了和外设进行数据交换,根据外设工作要求,其输出串行同步时钟极性和相位可以进行配置,时钟极性(CPOL)对传输协议没有重大的影响。如果CPOL=0,串行同步时钟的空闲状态为低电平;如果CPOL=1,串行同步时钟的空闲状态为高电平。时钟相位(CPHA)能够配置用于选择两种不同的传输协议之一进行数据传输。如果 CPHA=0,在串行同步时钟的第一个跳变沿(上升或下降)数据被采样;如果CPHA=1,在串行同步时钟的第二个跳变沿(上升或下降)数据被采样。 SPI主模块和与之通信的外设音时钟相位和极性应该一致。

SPI时序图详解-SPI接口在模式0下输出第一位数据的时刻

SPI接口在模式0下输出第一位数据的时刻

SPI接口有四种不同的数据传输时序,取决于CPOL和CPHL这两位的组合。图1中表现了这四种时序,

时序与CPOL、CPHL的关系也可以从图中看出。

图1

CPOL是用来决定SCK时钟信号空闲时的电平,CPOL=0,空闲电平为低电平,CPOL=1时,

空闲电平为高电平。CPHA是用来决定采样时刻的,CPHA=0,在每个周期的第一个时钟沿采样,CPHA=1,在每个周期的第二个时钟沿采样。

由于我使用的器件工作在模式0这种时序(CPOL=0,CPHA=0),所以将图1简化为图2,

只关注模式0的时序。

图2

我们来关注SCK的第一个时钟周期,在时钟的前沿采样数据(上升沿,第一个时钟沿),

在时钟的后沿输出数据(下降沿,第二个时钟沿)。首先来看主器件,主器件的输出口(MOSI)输出的数据bit1,在时钟的前沿被从器件采样,那主器件是在何时刻输出bit1的呢?bit1的输出时刻实际上在SCK信号有效以前,比 SCK的上升沿还要早半个时钟周期。bit1的输出时刻与SSEL信号没有关系。再来看从器件,主器件的输入口MISO同样是在时钟的前沿采样从器件输出的bit1的,那从器件又是在何时刻输出bit1的呢。从器件是在SSEL信号有效后,立即输出bit1,尽管此时SCK信号还没有起效。关于上面的主器件和从器件输出bit1位的时刻,可以从图3、4中得到验证。

图3

注意图3中,CS信号有效后(低电平有效,注意CS下降沿后发生的情况),故意用延时程序延时了一段时间,之后再向数据寄存器写入了要发送的数据,来观察主器件输出bit1情况(MOSI)可以看出,bit1(值为1)是在SCK信号有效之前的半个时钟周期的时刻开始输出的(与CS信号无关),到了SCK的第一个时钟周期的上升沿正好被从器件采样。

图4

图4中,注意看CS和MISO信号。我们可以看出,CS信号有效后,从器件立刻输出了bit1(值为1)。

通常我们进行的spi操作都是16位的。图5记录了第一个字节和第二个字节间的相互衔接的过程。第一个字节的最后一位在SCK的上升沿被采样,随后的SCK下降沿,从器件就输出了第二个字节的第一位。

二、SPI总线协议介绍(接口定义,传输时序)技术性能

SPI接口是Motorola 首先提出的全双工三线同步串行外围接口,采用主从模式(Master Slave)架构;支持多slave模式应用,一般仅支持单Master。

时钟由Master控制,在时钟移位脉冲下,数据按位传输,高位在前,低位在后(MSB first);SPI接口有2根单向数据线,为全双工通信,目前应用中的数据速率可达几Mbps的水平。

2、接口定义

SPI接口共有4根信号线,分别是:设备选择线、时钟线、串行输出数据线、串行输入数据线。

(1)MOSI:主器件数据输出,从器件数据输入

(2)MISO:主器件数据输入,从器件数据输出

(3)SCLK :时钟信号,由主器件产生

(4)/SS:从器件使能信号,由主器件控制

3、内部结构

4、传输时序

SPI接口在内部硬件实际上是两个简单的移位寄存器,传输的数据为8位,在主器件产生的从器件使能信号和移位脉冲下,按位传输,高位在前,低位在后。如下图所示,在SCLK的下降沿上数据改变,上升沿一位数据被存入移位寄存器。

SPI接口没有指定的流控制,没有应答机制确认是否接收到数据。

三、时序图浅析

接下来进入LCD1602使用的重点:操作时序。操作时序永远使用是任何一片IC芯片的最主要的内容。一个芯片的所有使用细节都会在它的官方器件手册上包含。所以使用一个器件事情,要充分做好的第一件事就是要把它的器件手册上有用的内容提取,掌握。介于中国目前的芯片设计能力有限,所以大部分的器件都是外国几个IC巨头比如TI、AT、MAXIM这些公司生产的,器件资料自然也是英文的多,所以,英文的基础要在阅读这些数据手册时得到提高哦。即便有中文翻译版本,还是建议看英文原版,看不懂时不妨再参考中文版,这样比较利于提高。

我们首先来看1602的引脚定义,1602的引脚是很整齐的SIP单列直插封装,所以器件手册只给出了引脚的功能数据表:

我们只需要关注以下几个管脚:

3脚:VL,液晶显示偏压信号,用于调整LCD1602的显示对比度,一般会外接电位器用以调整偏压信号,注意此脚电压为0时可以得到最强的对比度。

4脚:RS,数据/命令选择端,当此脚为高电平时,可以对1602进行数据字节的传输操作,而为电平时,则是进行命令字节的传输操作。命令字节,即是用来对LCD1602的一些工作方式作设置的字节;数据字节,即使用以在1602上显示的字节。值得一提的是,LCD1602的数据是8位的。

5脚:R/W,读写选择端。当此脚为高电平可对LCD1602进行读数据操作,反之进行写数据操作。笔者认为,此脚其实用处不大,直接接地永久置为低电平也不会影响其正常工作。但是尚未经过复杂系统验证,保留此意见。

6脚:E,使能信号,其实是LCD1602的数据控制时钟信号,利用该信号的上升沿实现对LCD1602的数据传输。

7~14脚:8位并行数据口,使得对LCD1602的数据读写大为方便。

现在来看LCD1602的操作时序:

在此,我们可以先不读出它的数据的状态或者数据本身。所以只需要看两个写时序:

①当我们要写指令字,设置LCD1602的工作方式时:需要把RS置为低电平,RW置为低电平,然后将数据送到数据口D0~D7,最后E引脚一个高脉冲将数据写入。

②当我们要写入数据字,在1602上实现显示时:需要把RS置为高电平,RW置为低电平,然后将数据送到数据口D0~D7,最后E引脚一个高脉冲将数据写入。

发现了么,写指令和写数据,差别仅仅在于RS的电平不一样而已。以下是LCD1602的时序图:

大家要慢慢学会看时序图,要知道操作一个器件的精华便蕴藏在其中,看懂看准了时序,你操控这个芯片就是非常容易的事了。1602的时序是我见过的一个最简单的时序:

1、注意时间轴,如果没有标明(其实大部分也都是不标明的),那么从左往右的方向为时间正向轴,即时间在增长。

2、上图框出并注明了看懂此图的一些常识:

(1).时序图最左边一般是某一根引脚的标识,表示此行图线体现该引脚的变化,上图分别标明了RS、R/W、E、DB0~DB7四类引脚的时序变化。

(2).有线交叉状的部分,表示电平在变化,如上所标注。

(3).应该比较容易理解,如上图右上角所示,两条平行线分别对应高低电平,也正好吻合(2)中电平变化的说法。

(4).上图下,密封的菱形部分,注意要密封,表示数据有效,Valid Data这个词也显示了这点。

3、需要十分严重注意的是,时序图里各个引脚的电平变化,基于的时间轴是一致的。一定要严格按照时间轴的增长方向来精确地观察时序图。要让器件严格的遵守时序图的变化。在类似于18B20这样的单总线器件对此要求尤为严格。

4、以上几点,并不是LCD1602的时序图所特有的,绝大部分的时序图都遵循着这样的一般规则,所以大家要慢慢的习惯于这样的规则。

也许你还注意到了上面有许多关于时间的标注,这也是个十分重要的信息,这些时间的标注表明了某些状态所要维持的最短或最长时间。因为器件的工作速度也是有限的,一般都跟不上主控芯片的速度,所以它们直接之间要有时序配合。话说现在各种处理器的主频也是疯狂增长,日后搞不好出现个双核单片机也不一定就是梦话。下面是时序参数表:

懂得估计主控芯片的指令时间,可以在官方数据手册上查到MCU的一些级别参数。比如我们现在用AVR M16做为主控芯片,外部12MHz晶振,指令周期就是一个时钟周期为(1/12MHz)us,所以至少确定了它执行一条指令的时间是us级别的。我们看到,以上给的时间参数全部是ns级别的,所以即便我们在程序里不加延时程序,也应该可以很好的配合LCD1602的时序要求了。怎么看这个表呢?很简单,我们在时序图里可以找到TR1,对应时序参数表,可以查到这个是E上升沿/下降沿时间,最大值为25ns,表示E引脚上的电平变化,必须在最大为25ns之内的时间完成。大家看是不是这个意思?

现在我来解读我对这个时序图的理解:

当要写命令字节的时候,时间由左往右,RS变为低电平,R/W变为低电平,注意看是RS的状态先变化完成。然后这时,DB0~DB7上数据进入有效阶段,接着E引脚有一个整脉冲的跳变,接着要维持时间最小值为tpw=400ns的E脉冲宽度。然后E引脚负跳变,RS电平变化,R/W电平变化。这样便是一个完整的LCD1602写命令的时序。

下面来看看CEPARK AVR开发板的1602显示部分原理图:

如你所见,KID画的这个也太能省了,就直接接1k电阻了事…….只有一点要说,就是这个解法,VL脚也就是偏压信号脚的电压就是不可调的了,即对比度固定。

作几点说明:

1、 LCD1602对写进去的数据字节呢是以ASCII码识别的,所以写进去用以显示的字符数据必须是某一个ADCII码,当然如果你不想查ASCII表的话,可以用字符来代替,即用单引号包含的字符常量。所以,也由此推出,’0’和30H(0的ASCII码)是等价的。

2、操作1602,要先对1602进行初始化,数据手册里写的比较清楚,并且对各个命令字的写入并没有先后要求。

3、 1602是有自定义字符的功能的,大家熟悉基本操作之后可以尝试自行拓展

4、在每次写完数据之后,应该要将E引脚置为低电平,为下一次E的高脉冲做准备。延伸来说,这叫释放时钟线,要养成释放时钟线的好习惯。对配合时序大有裨益。

5、可以将所要显示的字符一次定义在一个字符数组里,以调用字符数组的形式调用显示数据,这样程序会变得简洁而高效。

6、记住时序的要求,往往是对最小时间有要求,在你严格配合时序的情况下仍然的不到理想的结果时,可以尝试插入延时。这个并不违反时序的要求。况且相当多的器件手册并没有详细的讲述最小时间要求。

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

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

相关文章

Android11MIUI12,安卓11版MIUI12来了,3款已适配

原标题:安卓11版MIUI12来了,3款已适配现在安卓11系统第二个测试版升级更新都已经推送了,不知道各位有没有升级更新到安卓11系统体验一下新系统。不知道你的手机能不能升级安卓11系统,厂商有没有为你的手机适配安卓11系统&#xff…

简述ipython的特点 app_介绍、基本语法、流程控制

编译器是把源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样运行时计算机可以直接以机器语言来运行此程序,速度很快;而解释器则是只在执行程序时,才一条一条的解释成机器语言给计算机来执行,所以运行速度是不如编译后的程序运行的快的.这是因为计算机不能直接认识并…

grasp设计模式应用场景_grasp设计模式笔记回顾

根据讲师所讲做了一下笔记以便自己能方便学习:------------------------------------------grasp设计模式;grasp(general responsibility assignment software patterns:通用职责分配软件模式)模式相对于gof23模式更加抽象,它的核心思想&…

html修改details范围,HTML details 标签

HTML 标签标签用于创建一个可展开折叠的元件,用户可以从中检索其他附加的信息。实例使用 元素:Copyright 1999-2011.- by Refsnes Data. All Rights Reserved.All content and graphics on this web site are the property of the company Refsnes Data.…

c# 计算圆锥的体积_用C#如何编写程序计算球,圆柱和圆锥的表面积和体积? 用C#编写方法并通过方法...

//球体表面积A4π*R^2,体积V4/3π*R^3Console.WriteLine("请输入圆的半径R");double RConvert.ToInt32(Console.ReadLine());double round 4 * Math.PI * R * R;double volume 4 * Math.PI * R * R * R / 3;Console.WriteLine("圆的的表面积是{0};…

html中如何设计对话框,用纯css3和html制作泡沫对话框实现代码

现在,泡沫对话框是一种比较流行的趋势,一般都是用html和javascript,和或者图片来实现,今天用纯css3和html来实现一些基本的简单的泡沫对话框html代码如下:复制代码代码如下:The basic bubble variantsThis only needs …

clickhouse建库_专访ClickHouse创始人:数据库竞争依旧火热,技术整合势在必行

加入「公开课」交流群,获取更多学习资料、课程及热招岗位等信息翻译|郑天祺 (Amos Bird) 中科院计算所博士整理 | 夕颜2000 年以来,随着自互联网和云计算技术变革,数据库技术从底层计算系统开始发生一次蜕变,进入了以开…

html获取此次点击的id,github项目解析(八)--Activity启动过程中获取组件宽高的三种方式...

转载请标明出处:1片枫叶的专栏上1个github小项目中我们介绍了避免按钮重复点击的小框架,其实现的核心逻辑是重写OnClickListener的onClick方法,添加避免重复点击的逻辑,即为第2次点击与第1次点击的时间间隔添加阙值,若…

minitab怎么算西格玛水平_16:三因子二水平全因子实验设计和MINITAB应用训练

16:思慧慧咨询官网――精益生产、六西格玛黑带、绿带、TRIZ创新发明、实验设计DOE、价值工程、全面设备管理(TPM)培训和项目咨询​www.sihuide.com分享地址:千聊入口1 https://m.qlchat.com/topic/details?topicId20000087131743…

sqlserver 过滤html,sqlserver 过滤掉某些字段查询剩余字段的方法

select * from syscolumns a, sysobjects b where a.object_idb.object_id and b.namedingdan and a.name not in(编号,datafilename)报错,是因为我是sqlserver2005,没有obejct_id,而是id,所以改一下是:select * from …

python写软件测试用例_Python单元测试框架unittest:单个测试用例编写步骤及实例...

一、Python单元测试框架的编写步骤导入模块必须继承unittest.TestCase主要是配置环境:进行测试前的初始化工作,比如在接口测试前面做一些前置的参数赋值,数据库操作等等定义测试用例,名字以“test”开头定义assert断言&#xff0c…

html css position,[CSS]CSS Position 详解

一. CSS position 属性介绍CSS中position属性指定一个元素(静态的,相对的,绝对或固定)的定位方法的类型。有static,relative,absolute和fixed四种取值,默认是static。二. position: staticstatic:没有定位&…

基克的聚合 机器人_重做秒变神器!基克的聚合成辅助标配

导读:7.12版本登陆国服一周有余,在这次更新中有一件装备值得我们关注。它就是基克的聚合,乍一听你可能有点不熟悉,其实它就是之前基克的先驱重做之后的产物。今天笔者就要跟大家详细说说这件装备,它在改动之后俨然成为…

win2008无法用计算机名共享,Windows Server 2008 R2中文件共享

在网上找过很多次相关资料,还是自己整理一下吧。实践了才是自己的,只看永远是别人的。服务器:Server 2008 R2(IP:192.168.1.106);客户端:Server 2008 R2(IP:192.168.1.107)一、 创建用户itjong运…

hive udf 分组取top1_Hive中分组取前N个值的实现-row_number()

背景假设有一个学生各门课的成绩的表单,应用hive取出每科成绩前100名的学生成绩。这个就是典型在分组取Top N的需求。解决思路对于取出每科成绩前100名的学生成绩,针对学生成绩表,根据学科,成绩做orderby排序,然后对排序后的成绩&…

线性规划图解法求最优解_高中数学:简单的线性规划问题

1. 简单线性规划问题的有关概念先来看一道高考题:某公司招收男职员x名,女职员y名,x和y须满足约束条件,则的最大值是( )A. 80 B. 85 C. 90 D. 95(1)约束条件:变量x、y满足的一组条件,如上面高考题中的二元一…

在桌面关闭计算机关机不了怎么办,为什么我电脑按关机屏幕一直显示正在关机却一直关不了机怎么办...

“开始”-->“运行”-->键入“Regedit”-->“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\control\Shutdown子项,在右边窗口中新建一个"字符串值",命名为"FastReboot",同时将"数值数据"设为0即可。如果还不行再…

go struct 静态函数_Go语言学习笔记(四)结构体struct 接口Interface 反射reflect...

加 Golang学习 QQ群共同学习进步成家立业工作 ^-^ 群号:96933959结构体structstruct 用来自定义复杂数据结构,可以包含多个字段(属性),可以嵌套;go中的struct类型理解为类,可以定义方法,和函数定义有些许区…

html彩色背景指令,HTML_第四章 颜色背景的CSS,本 章 C S S 的 主 - phpStudy...

第四章 颜色背景的CSS本 章 C S S 的 主 要 作 用在前面的章节介绍完了声明与应用的方法及 一些特性之後,从这章开始,便要正式进入CSS的…

arcgis xml 下载 切片_xml格式文件如何用arcgis进行编辑和更新

展开全部为了让你的解析器能够明白这些62616964757a686964616fe59b9ee7ad9431333335343339字符,你必须在XML文档中统一的字符编码标准。--------------------------------------------------------------------------------Windows 95/98 记事本Windows 95/98 记事本…