关于IIC和SPI总线(精辟)

关于IIC和SPI总线(精辟)
关于IIC和SPI总线(精辟)

关于IIC和SPI总线(精辟)

IICvs SPI

现今,在低端数字通信应用领域,我们随处可见IIC (Inter-Integrated Circuit) 和SPI (Serial Peripheral Interface)的身影。原因是这两种通信协议非常适合近距离低速芯片间通信。Philips(for IIC)和Motorola(for SPI)出于不同背景和市场需求制定了这两种标准通信协议。

IIC 开发于1982年,当时是为了给电视机内的CPU和外围芯片提供更简易的互联方式。电视机是最早的嵌入式系统之一,而最初的嵌入系统是使用内存映射(memory-mapped I/O)的方式来互联微控制器和外围设备的。要实现内存映射,设备必须并联入微控制器的数据线和地址线,这种方式在连接多个外设时需大量线路和额外地址解码芯片,很不方便并且成本高。

为了节省微控制器的引脚和和额外的逻辑芯片,使印刷电路板更简单,成本更低,位于荷兰的Philips实验室开发了'Inter-Integrated Circuit’,IIC 或IIC ,一种只使用二根线接连所有外围芯片的总线协议。最初的标准定义总线

速度为100kbps。经历几次修订,主要是1995年的400kbps,1998的3.4Mbps。

有迹象表明,SPI总线首次推出是在1979年,Motorola公司将SPI总线集成在他们第一支改自68000微处理器的微控制器芯片上。SPI总线是微控制器四线的外部总线(相对于内部总线)。与IIC不同,SPI没有明文标准,只是一种事实标准,对通信操作的实现只作一般的抽象描述,芯片厂商与驱动开发者通过data sheets和application notes沟通实现上的细节。

SPI

对于有经验的数字电子工程师来说,用SPI互联两支数字设备是相当直观的。SPI是种四根信号线协议(如图):§SCLK: Serial Clock (output from master);

§MOSI; SIMO: Master Output, Slave Input(output from master);

§MISO; SOMI: Master Input, Slave Output(output from slave);

§SS: Slave Select (active low, outputfrom master).

SPI是[单主设备(single-master )]通信协议,这意味着总线中的只有一支中心设备能发起通信。当SPI主设备想读/写[从设备]时,它首先拉低[从设备]对应的SS线(SS是低电平有效),接着开始发送工作脉冲到时钟线上,在相应的脉冲时间上,[主设备]把信号发到MOSI实现“写”,同时可对MISO采样而实现“读”,如下图:

SPI有四种操作模式——模式0、模式1、模式2和模式3,它们的区别是定义了在时钟脉冲的哪条边沿转换(toggles)输出信号,哪条边沿采样输入信号,还有时钟脉冲的稳定电平值(就是时钟信号无效时是高还是低)。每种模式由一对参数刻画,它们称为时钟极(clock polarity)CPOL与时钟期(clock phase)CPHA。[主从设备]必须使用相同的工作参数——SCLK、CPOL 和CPHA,才能正常工作。如果有多个[从设备],并且它们使用了不同的工作参数,那么[主设备]必须在读写不同[从设备]间重新配置这些参数。以上SPI总线协议的主要内容。SPI不规定最大传输速率,没有地址方案;SPI也没规定通信应答机制,没有规定流控制规则。事实上,SPI[主设备]甚至并不知道指定的[从设备]是否存在。这些通信控制都得通过SPI协议以外自行实现。例如,要用SPI连接一支[命令-响应控制型]解码芯片,则

必须在SPI的基础上实现更高级的通信协议。SPI并不关心物理接口的电气特性,例如信号的标准电压。在最初,大多数SPI应用都是使用间断性时钟脉冲和以字节为单位传输数据的,但现在有很多变种实现了连续性时间脉冲和任意长度的数据帧。

IIC

与SPI的单主设备不同,IIC 是多主设备的总线,IIC没有物理的芯片选择信号线,没有仲裁逻辑电路,只使用两条信号线——'serial data’(SDA) 和'serial clock’(SCL)。IIC协议规定:

§第一,每一支IIC设备都有一个唯一的七位设备地址;

§第二,数据帧大小为8位的字节;

§第三,数据(帧)中的某些数据位用于控制通信的开始、停止、方向(读写)和应答机制。

IIC 数据传输速率有标准模式(100 kbps)、快速模式(400 kbps)和高速模式(3.4 Mbps),另外一些变种实现了低速模式(10 kbps)和快速+模式(1 Mbps)。

物理实现上,IIC 总线由两根信号线和一根地线组成。两根信号线都是双向传输的,参考下图。IIC协议标准规定发起通信的设备称为主设备,主设备发起一次通信后,其它设备均为从设备。IIC 通信过程大概如下。首先,主设备发一个START信号,这个信号就像对所有其它设备喊:请大家注意!然后其它设备开始监听总线以准备接收数据。接着,主设备发送一个7位设备地址加一位的读写操作的数据帧。当所设备接收数据后,比对地址自己是否目标设备。如果比对不符,设备进入等待状态,等待STOP信号的来临;如果比对相符,设备会发送一个应答信号——ACKNOWLEDGE作回应。

当主设备收到应答后便开始传送或接收数据。数据帧大小为8位,尾随一位的应答信号。主设备发送数据,从设备应答;相反主设备接数据,主设备应答。当数据传送完毕,主设备发送一个STOP信号,向其它设备宣告释放总线,其它设备回到初始状态。基于IIC总线的物理结构,总线上的START 和STOP信号必定是唯一的。另外,IIC总线标准规定SDA 线的数据转换必须在SCL线的低电平期,在SCL线的高电平期,SDA线的上数据是稳定的。在物理实现上,SCL线和SDA线都是漏极开路(open-drain),通过上拉电阻外加一个电压源。当把线路接地时,线路为逻辑0,当释放线路,线

路空闲时,线路为逻辑1。基于这些特性,IIC设备对总线的操作仅有“把线路接地”——输出逻辑0。

IIC总线设计只使用了两条线,但相当优雅地实现任意数目设备间无缝通信,堪称完美。我们设想一下,如果有两支设备同时向SCL线和SDA线发送信息会出现什么情况。

基于IIC总线的设计,线路上不可能出现电平冲突现象。如果一支设备发送逻辑0,其它发送逻辑1,那么线路看到的只有逻辑0。也就是说,如果出现电平冲突,发送逻辑0的始终是“赢家”。

总线的物理结构亦允许主设备在往总线写数据的同时读取数据。这样,任何设备都可以检测冲突的发生。当两支主设备竞争总线的时候,“赢家”并不知道竞争的发生,只有“输家”发现了冲突——当它写一个逻辑1,却读到0时——而退出竞争。

10位设备地址

任何IIC设备都有一个7位地址,理论上,现实中只能有127种不同的IIC设备。实际上,已有IIC的设备种类远远多于这个限制,在一条总线上出现相同的地址的IIC

设备的概率相当高。为了突破这个限制,很多设备使用了双重地址——7位地址加引脚地址(external configuration pins)。IIC 标准也预知了这种限制,提出10位的地址方案。

10位的地址方案对IIC协议的影响有两点:

§第一,地址帧为两个字节长,原来的是一个字节;

§第二,第一个字节前五位最高有效位用作10位地址标识,约定是“11110”。除了10位地址标识,标准还预留了一些地址码用作其它用途,如下表:时钟拉伸

在IIC 通信中,主设备决定了时钟速度。因为时钟脉冲信号是由主设备显式发出的。但是,当从设备没办法跟上主设备的速度时,从设备需要一种机制来请求主设备慢一点。这种机制称为时钟拉伸,而基于I2C结构的特殊性,这种机制得到实现。当从设备需要降低传输的速度的时候,它可以按下时钟线,逼迫主设备进入等待状态,直到从设备释放时钟线,通信才继续。

高速模式

原理上讲,使用上拉电阻来设置逻辑1会限制总线

的最大传输速度。而速度是限制总线应用的因素之一。这也说明为什么要引入高速模式(3.4 Mbps)。在发起一次高速模式传输前,主设备必须先在低速的模式下(例如快速模式)发出特定的“High Speed Master”信号。为缩短信号的周期和提高总线速度,高速模式必须使用额外的I/O缓冲区。另外,总线仲裁在高速模式下可屏蔽掉。更多的信息请参与总线标准文档。

IIC vs SPI: 哪位是赢家?

我们来对比一下IIC 和SPI的一些关键点:

第一,总线拓扑结构/信号路由/硬件资源耗费

IIC 只需两根信号线,而标准SPI至少四根信号,如果有多个从设备,信号需要更多。一些SPI变种虽然只使用三根线——SCLK, SS和双向的MISO/MOSI,但SS线还是要和从设备一对一根。另外,如果SPI要实现多主设备结构,总线系统需额外的逻辑和线路。用IIC 构建系统总线唯一的问题是有限的7位地址空间,但这个问题新标准已经解决——使用10位地址。从第一点上看,IIC是明显的大赢家。

第二,数据吞吐/传输速度

如果应用中必须使用高速数据传输,那么SPI是

必然的选择。因为SPI是全双工,IIC 的不是。SPI没有定义速度限制,一般的实现通常能达到甚至超过10 Mbps。IIC 最高的速度也就快速+模式(1 Mbps)和高速模式(3.4 Mbps),后面的模式还需要额外的I/O缓冲区,还并不是总是容易实现的。

第三,优雅性

IIC 常被称更优雅于SPI。公正的说,我们更倾向于认为两者同等优雅和健壮。IIC的优雅在于它的特色——用很轻盈的架构实现了多主设备仲裁和设备路由。但是对使用的工程师来讲,理解总线结构更费劲,而且总线的性能不高。

SPI的优点在于它的结构相当的直观简单,容易实现,并且有很好扩展性。SPI的简单性不足称其优雅,因为要用SPI 搭建一个有用的通信平台,还需要在SPI之上构建特定的通信协议软件。也就是说要想获得SPI特有而IIC没有的特性——高速性能,工程师们需要付出更多的劳动。另外,这种自定的工作是完全自由的,这也说明为什么SPI没有官方标准。IIC和SPI都对低速设备通信提供了很好的支持,不过,SPI适合数据流应用,而IIC更适合“字节设备”的多主设备应用。

小结

在数字通信协议簇中,IIC和SPI常称为“小”协议,相对Ethernet, USB, SATA, PCI-Express等传输速度达数百上千兆字节每秒的总线。但是,我们不能忘记的是各种总线的用途是什么。“大”协议是用于系统外的整个系统之间通信的,“小”协议是用于系统内各芯片间的通信,没有迹象表明“大”协议有必要取代“小”协议。IIC和SPI的存在和流行体现了“够用就好”的哲学。回应文首,IIC和SPI如此的流行,它是任何一位嵌入式工程师必备的工具。

总线协议及SPI时序图详解

SPI总线协议及SPI时序图详解 SPI,是英语Serial Peripheral Interface的缩写,顾名思义就是串行外围设备接口。SPI,占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简 SPI是一个环形总线结构,由ss(cs)、sck、sdi、sdo构成,其时序其实很简单,上升沿发送、下降沿接收、高位先发送。 上升沿到来的时候,sdo上的电平将被发送到从设备的寄存器中。 下降沿到来的时候,sdi上的电平将被接收到主设备的寄存器中。 假设主机和从机初始化就绪:并且主机的sbuff=0xaa (10101010),从机的sbuff=0x5一遍(假设上升沿发送数据)。 --------------------------------------------------- 脉冲主机sbuff 从机sbuff sdi sdo --------------------------------------------------- 0 00-0 10101010 01010101 0 0 --------------------------------------------------- 1 0--1 0101010x 10101011 0 1 1 1--0 0101010010101011 0 1 --------------------------------------------------- 2 0--1 1010100x 01010110 1 0 2 1--0 1010100101010110 1 0 ---------------------------------------------------

单片机软件模拟SPI接口—加深理解SPI总线协议

SPI — SPI SPI(Serial Peripheral Interfacer ) SPI RAM EEPROM FlashROM A D D A LED LED I O UART SPI I O SPI I O AT89C205l SPI EEPROM 93CA6 1 I O SPI 93C46 SPI 93CA6 SPI 4 I O (SK) DO DI CS (MSB) (LsB) 93C46 SPI 2

SPI SPI AT89C2051 SPI 1 AT89C2051 EEPROM 93C46 P1 0 SPI SDO P1 2 SPI SCK P1 3 SPI SCS P1 1 SPI SDI P1 2(SCK) 0( ) AT89C2051 P1 0 1 (1) 2 (10) 6 (A5A4A3A2A1A0) P1 1 1 (0) l6 ( ) AT89C2051 P1 0 1 (1) 2 (01) 6 (A5A4A3A2A1A0) P1 0 l6 ( ) (WEN)) 1 (1) 2 (00) 6 (11XXXX) (WDS)) 1 (1) 2 (00) 6 (00XXXX) C51 SPI // I/O sbit SDO=P1^0 sbit SDI=P1^1 sbit SCK=P1^ 2 sbit SCS=P1^3 sbit ACC_7= ACC^7 unsigned int SpiRead(unsigned char add) { unsigned char i unsigned int datal6 add&=0x3f /*6 */ add |=0x80 /* l0*/ SDO=1 /* 1 */ SCK=0 SCK=1 for(i=0 i<8 i++)/* */ { if(add&0x80==1) SDO=1 else SDO=0 SCK=0 /* */ SCK=1 add<<= 1 } SCK=1 /* 1 */

SPI通信协议(SPI总线)学习

SPI通信协议(SPI总线)学习 各位读友大家好!你有你的木棉,我有我的文章,为了你的木棉,应读我的文章!若为比翼双飞鸟,定是人间有情人!若读此篇优秀文,必成天上比翼鸟! SPI通信协议(SPI总线)学习1、什么是SPI?SPI是串行外设接口(Serial Peripheral Interface)的缩写。是Motorola 公司推出的一种同步串行接口技术,是一种高速的,全双工,同步的通信总线。2、SPI优点支持全双工通信通信简单数据传输速率块3、缺点没有指定的流控制,没有应答机制确认是否接收到数据,所以跟IIC总线协议比较在数据可靠性上有一定的缺陷。4、特点1):高速、同步、全双工、非差分、总线式2):主从机通信模式5、协议通信时序详解1):SPI的通信原理很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要至少4根线,事实上3根也可以(单向传输时)。也是所有基于SPI的设备共有的,它们是SDI(数据输入)、SDO(数据输出)、SCLK(时钟)、CS(片选)。(1)SDO/MOSI –主设备数据输出,从设备数据输入;(2)SDI/MISO –主设备数据输入,从设备数据输出;(3)SCLK –时钟信号,由主设备产生;(4)CS/SS –从设备使能信号,由主设备控制。当有多个从设备的时候,因为每个从设备上都有一个片选引脚接入到主设备机中,当我们的主设备和某个从设备通信时将需要将从设备对应的片选引脚电平拉低或者是拉高。2):需要说明的是,我们SPI通信有4种不同的模式,不

同的从设备可能在出厂是就是配置为某种模式,这是不能改变的;但我们的通信双方必须是工作在同一模式下,所以我们可以对我们的主设备的SPI模式进行配置,通过CPOL(时钟极性)和CPHA(时钟相位)来控制我们主设备的通信模式,具体如下:Mode0:CPOL=0,CPHA=0Mode1:CPOL=0,CPHA=1Mode2:CPOL=1,CPHA=0Mode3:CPOL=1,CPHA=1时钟极性CPOL 是用来配置SCLK的电平出于哪种状态时是空闲态或者有效态,时钟相位CPHA是用来配置数据采样是在第几个边沿:CPOL=0,表示当SCLK=0时处于空闲态,所以有效状态就是SCLK处于高电平时CPOL=1,表示当SCLK=1时处于空闲态,所以有效状态就是SCLK处于低电平时CPHA=0,表示数据采样是在第1个边沿,数据发送在第2个边沿CPHA=1,表示数据采样是在第2个边沿,数据发送在第1个边沿例如:CPOL=0,CPHA=0:此时空闲态时,SCLK处于低电平,数据采样是在第1个边沿,也就是SCLK由低电平到高电平的跳变,所以数据采样是在上升沿,数据发送是在下降沿。CPOL=0,CPHA=1:此时空闲态时,SCLK 处于低电平,数据发送是在第1个边沿,也就是SCLK由低电平到高电平的跳变,所以数据采样是在下降沿,数据发送是在上升沿。CPOL=1,CPHA=0:此时空闲态时,SCLK处于高电平,数据采集是在第1个边沿,也就是SCLK由高电平到低电平的跳变,所以数据采集是在下降沿,数据发送是在上升沿。CPOL=1,CPHA=1:此时空闲态时,SCLK处于高电平,数据发送是在第

SPI总线协议SPI时序图详解

SPI总线协议及SPI时序图详解 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 0101010010101011 0 1 --------------------------------------------------- 2 0--1 1010100x 01010110 1 0 2 1--0 1010100101010110 1 0 --------------------------------------------------- 3 0--1 0101001x 10101101 0 1 3 1--0 0101001010101101 0 1 --------------------------------------------------- 4 0--1 1010010x 01011010 1 0 4 1--0 1010010101011010 1 0 --------------------------------------------------- 5 0--1 0100101x 10110101 0 1 5 1--0 0100101010110101 0 1 --------------------------------------------------- 6 0--1 1001010x 01101010 1 0 6 1--0 1001010101101010 1 0 --------------------------------------------------- 7 0--1 0010101x 11010101 0 1 7 1--0 0010101011010101 0 1 --------------------------------------------------- 8 0--1 0101010x 10101010 1 0 8 1--0 01010101 10101010 1 0 这样就完成了两个寄存器8位的交换,上面的0--1表示上升沿、1--0表示下降沿,sdi、 sdo相对于主机而言的。根据以上分析,一个完整的传送周期是16位,即两个字节,因为,首先主机要发送命令过去,然后从机根据主机的名准备数据,主机在下一个8位时钟周期才把数据读回来。 SPI总线是Motorola公司推出的三线同步接口,同步串行3线方式进行通信:一条时钟线SCK,一条数

SPI总线协议

原文:SanDisk Secure Digital Card - Product Manual Version 2.2 (Document No. 80-13-00169 September 2004)第5章 SPI总线协议译者:醇酒。请尊重我的劳动,勿抄袭和修改本文中的内容,若文中翻译有不妥之处,请Email:chunjiu○https://www.360docs.net/doc/f88906417.html,处指正,不胜感激! SD卡规格书第五章 SPI总线协议 译者注:

SPI总线协议目录 5.1. SPI总线协议 5.1.1. 模式选择 5.1.2. 总线传送保护 5.1.3. 数据的读取 5.1.4. 数据写入 5.1.5. 擦除和写保护处理 5.1. 6. 读取CID/CSD寄存器 5.1.7. 复位顺序 5.1.8. 时钟控制 5.1.9. 错误条件 5.1.9.1. CRC和无效指令 5.1.9.2. 读取、写入和擦除的超时情形 5.1.10.存储器阵列分布 5.1.11. 卡的锁定/解锁 5.1.12. 特殊用途的命令集 5.1.13. 版权保护命令集 5.2. SPI命令设置 5.2.1. 命令格式 5.2.2. 命令类 5.2.2.1. 详细的命令描述 5.2.3.应答 5.2.3.1 R1 的格式 5.2.3.2. R1b的格式 5.2.3.3. R2的格式 5.2.3.4. R3 的格式 5.2.3.5. 数据应答 5.2.4. 数据标记 5.2.5.数据错误标记 5.2. 6. 清除状态位 5.3. 卡寄存器 5.4. SPI总线时序图解 5.4.1. 命令 / 应答 5.4.2. 数据读取 5.4.3. 数据写入 5.4.4. 时钟数值 5.5. SPI 电气接口 5.6. SPI总线操作条件(环境) 5.7.总线时钟 附录: 英文特殊命令表 英文通用命令表 存储器阵列图 产品规格表 主控制器设计参考(简介,无实际内容)

SPI协议的简单实例说明

SPI是一个环形总线结构,由ss(cs)、sck、sdi、sdo构成,其时序其实很简单,主要是在sck的控制下,两个双向移位寄存器进行数据交换。 假设下面的8位寄存器装的是待发送的数据10101010,上升沿发送、下降沿接收、高位先发送。 那么第一个上升沿来的时候数据将会是sdo=1;寄存器=0101010x。下降沿到来的时候,sdi上的电平将所存到寄存器中去,那么这时寄存器=0101010sdi,这样在8个时钟脉冲以后,两个寄存器的内容互相交换一次。这样就完成里一个spi时序。 例子: 假设主机和从机初始化就绪:并且主机的sbuff=0xaa,从机的sbuff=0x55,下面将分步对spi的8个时钟周期的数据情况演示一遍:假设上升沿发送数据 这样就完成了两个寄存器8位的交换,上面的上表示上升沿、下表示下降沿,sdi、sdo相对于主机而言的。其中ss引脚作为主机的时候,从机可以把它拉底被动选为从机,作为从机的是时候,可以作为片选脚用。根据以上分析,一个完整的传送周期是16位,即两个字节,因为,首先主机要发送命令过去,然后从机根据主机的名准备数据,主机在下一个8位时钟周期才把数据读回来!!

SPI,是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口。SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议,比如P89LPC900. SPI,是一种高速的,全双工,同步的通信总线,其工作模式有两种:主模式和从模式,无论那种模式,都支持 3Mbit/s的速率,并且还具有传输完成标志和写冲突保护标志。到目前为止,我使用过的具有SPI总线的器件,就是存储芯片Eprom:at25128,在使用过程中,发现的确是有这种总线的优点。下面以P89LPC900单片机的SPI总线来解释SPI总线的通用使用规则。 LPC900单片机的SPI接口主要由4个引脚构成:SPICLK、MOSI、MISO及/SS,其中SPICLK是整个SPI总线的公用时钟,MOSI、MISO作为主机,从机的输入输出的标志,MOSI是主机的输出,从机的输入,MISO是主机的输入,从机的输出。/SS 是从机的标志管脚,在互相通信的两个SPI总线的器件,/SS管脚的电平低的是从机,相反/SS管脚的电平高的是主机。在一个SPI通信系统中,必须有主机。 SPI总线可以配置成单主单从,单主多从,互为主从。今以互为主从模式作为讲解: 要进行SPI互为主从操作,必须遵照以下步骤: 1 对A、B进行初始化,均设为主机(需要进行以下操作)。 a) SPI端口初始化为准双向。 b) SPCTL配置为0x50,SSIG=0,SPEN=1,MSTR=1。 c) 清除SPSTAT中的SPIF及WCOL标志位为0。

spi总线协议英文版

竭诚为您提供优质文档/双击可除spi总线协议英文版 篇一:spi总线协议及spi时序图详解 spi总线协议及spi时序图详解 spi是一个环形总线结构,由ss(cs)、sck、sdi、sdo 构成,其时序其实很简单,主要是在sck的控制下,两个双向移位寄存器进行数据交换。 下面为一种情况例举: 上升沿发送、下降沿接收、高位先发送。 上升沿到来的时候,sdo上的电平将被发送到从设备的寄存器中。 下降沿到来的时候,sdi上的电平将被接收到主设备的寄存器中。 假设主机和从机初始化就绪:并且主机的 sbuff=0xaa(10101010),从机的sbuff=0x55(01010101),下面将分步对spi的8个时钟周期的数据情况演示一遍(假设上升沿发送数据)。 ---------------------------------------------------

脉冲主机sbuff从机 sbuffsdisdo--------------------------------------------------- 000-0101010100101010100--------------------------------------------------- 10--10101010x1010101101 11--0010101001010101101--------------------------------------------------- 20--11010100x010******* 21--0101010010101011010--------------------------------------------------- 30--10101001x1010110101 31--0010100101010110101--------------------------------------------------- 40--11010010x010******* 41--0101001010101101010---------------------------------

SPI通信协议(SPI总线)学习

SPI通信协议(SPI总线)学习 1、什么是SPI? SPI是串行外设接口(Serial Peripheral Interface)的缩写。是Motorola 公司推出的一 种同步串行接口技术,是一种高速的,全双工,同步的通信总线。 2、SPI优点 支持全双工通信 通信简单 数据传输速率块 3、缺点 没有指定的流控制,没有应答机制确认是否接收到数据,所以跟IIC总线协议比较在数据可靠性上有一定的缺陷。 4、特点 1):高速、同步、全双工、非差分、总线式 2):主从机通信模式 5、协议通信时序详解 1):SPI的通信原理很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要至少4根线,事实上3根也可以(单向传输时)。也是所有基于SPI的设备共有的,它们是SDI(数据输入)、SDO(数据输出)、SCLK(时钟)、CS(片选)。 (1)SDO/MOSI – 主设备数据输出,从设备数据输入; (2)SDI/MISO – 主设备数据输入,从设备数据输出; (3)SCLK – 时钟信号,由主设备产生; (4)CS/SS – 从设备使能信号,由主设备控制。当有多个从设备的时候,因为每个从设 备上都有一个片选引脚接入到主设备机中,当我们的主设备和某个从设备通信时将需 要将从设备对应的片选引脚电平拉低或者是拉高。 2):需要说明的是,我们SPI通信有4种不同的模式,不同的从设备可能在出厂是就是配置为某种模式,这是不能改变的;但我们的通信双方必须是工作在同一模式下,所以我们可以对我们的主设备的SPI模式进行配置,通过CPOL(时钟极性)和CPHA(时钟相位)来控制我们主设备的通信模式,具体如下: Mode0:CPOL=0,CPHA=0 Mode1:CPOL=0,CPHA=1 Mode2:CPOL=1,CPHA=0 Mode3:CPOL=1,CPHA=1 时钟极性CPOL是用来配置SCLK的电平出于哪种状态时是空闲态或者有效态,时钟相位CPHA 是用来配置数据采样是在第几个边沿: CPOL=0,表示当SCLK=0时处于空闲态,所以有效状态就是SCLK处于高电平时 CPOL=1,表示当SCLK=1时处于空闲态,所以有效状态就是SCLK处于低电平时 CPHA=0,表示数据采样是在第1个边沿,数据发送在第2个边沿 CPHA=1,表示数据采样是在第2个边沿,数据发送在第1个边沿 例如: CPOL=0,CPHA=0:此时空闲态时,SCLK处于低电平,数据采样是在第1个边沿,也就是SCLK由低电平到高电平的跳变,所以数据采样是在上升沿,数据发送是在下降沿。

SPI、I2C、UART三种串行总线协议的区别

第一个区别当然是名字: SPI(Serial Peripheral Interface:串行外设接口); I2C(INTER IC BUS) UART(Universal Asynchronous Receiver Transmitter:通用异步收发器) 第二,区别在电气信号线上: SPI总线由三条信号线组成:串行时钟(SCLK)、串行数据输出(SDO)、串行数据输 入(SDI)。SPI总线可以实现多个SPI设备互相连接。提供SPI串行时钟的SPI设备为SPI主机或主设备(Master),其他设备为SPI从机或从设备(Slave)。主从设备间可以 实现全双工通信,当有多个从设备时,还可以增加一条从设备选择线。如果用通用IO 口模拟SPI总线,必须要有一个输出口(SDO),一个输入口(SDI),另一个口则视实现 的设备类型而定,如果要实现主从设备,则需输入输出口,若只实现主设备,则需输 出口即可,若只实现从设备,则只需输入口即可。 I2C总线是双向、两线(SCL、SDA)、串行、多主控(multi-master)接口标准,具有总线仲裁机制,非常适合在器件之间进行近距离、非经常性的数据通信。 在它的协议体系中,传输数据时都会带上目的设备的设备地址,因此可以实现 设备组网。如果用通用IO口模拟I2C总线,并实现双向传输,则需一个输入 输出口(SDA),另外还需一个输出口(SCL)。(注:I2C资料了解得比较少,这 里的描述可能很不完备) UART总线是异步串口,因此一般比前两种同步串口的结构要复杂很多,一般 由波特率产生器(产生的波特率等于传输波特率的16倍)、UART接收器、 UART发送器组成,硬件上由两根线,一根用于发送,一根用于接收。显然, 如果用通用IO口模拟UART总线,则需一个输入口,一个输出口。 第三,从第二点明显可以看出,SPI和UART可以实现全双工,但I2C不行; 第四,看看牛人们的意见吧! 1、I2C线更少,我觉得比UART、SPI更为强大,但是技术上也更加麻烦些,因为I2C需要有双向IO的支持,而且使用上拉电阻,我觉得抗干扰能力较弱,一般用于同一板卡上芯片之间的通信,较少用于远距离通信。SPI实现要简单 一些,UART需要固定的波特率,就是说两位数据的间隔要相等,而SPI则无 所谓,因为它是有时钟的协议。 2、I2C的速度比SPI慢一点,协议比SPI复杂一点,但是连线也比标准的SPI要少。

(完整)spi总线协议详细说明

SPI总线原理与应用篇《电子制作》2008年9月站长原创,如需引用请注明出处 大家好,通过以前的学习,我们已经对51单片机综合学习系统的使用方法及学习方式有所了解与熟悉,学会了使用IIC总线的基本知识,体会到了综合学习系统的易用性与易学性,这一期我们将一起学习SPI总线的基本原理与应用实例。 先看一下我们将要使用的51单片机综合学习系统能完成哪些实验与产品开发工作:分别有流水灯,数码管显示,液晶显示,按键开关,蜂鸣器奏乐,继电器控制,IIC总线,SPI 总线,PS/2实验,AD模数转换,光耦实验,串口通信,红外线遥控,无线遥控,温度传感,步进电机控制等等。主体系统如图1所示,其配套书本教程《单片机快速入门》如图2所示。 图1 51单片机综合学习系统主机部分图片

图2 51单片机综合学习系统配套书本教程——《单片机快速入门》 上图是我们将要使用的51单片机综合学习系统硬件平台,如图1所示,本期实验我们用到了综合系统主机、板载的AT93C46芯片,综合系统其它功能模块原理与使用详见前几期《电子制作》杂志及后期连载教程介绍。 SPI总线简介 SPI总线基本概念 SPI ( Serial Peripheral Interface ———串行外设接口) 总线是Motorola公司推出的一种同步串行接口技术。SPI总线系统是一种同步串行外设接口,允许MCU 与各种外围设备以串行方式进行通信、数据交换。外围设备包括FLASHRAM、A/ D 转换器、网络控制器、MCU 等。SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议。其工作模式有两种:主模式和从模式。SPI是一种允许一个主设备启动一个从设备的同步通讯的协议,从而完成数据的交换。也就是SPI是一种规定好的通讯方式。这种通信方式的优点是占用端口较少,一般4根就够基本通讯了(不算电源线)。同时传输速度也很高。一般来说要求主设备要有SPI控制器(也可用模拟方式),就可以与基于SPI的芯片通讯了。 SPI总线系统结构

spi 总线协议(英文版)

AN-300 https://www.360docs.net/doc/f88906417.html, Ramtron International Corporation 1850 Ramtron Drive, Colorado Springs, CO 80921 (800) 545-FRAM, (719) 481-7000, Fax (719) 481-7058 SPI Bus Compatibility FM25160 16Kb SPI FRAM Overview The FM25160 uses an industry standard SPI interface. When comparing the FM25160 with 16Kb SPI EEPROMs, users may notice two minor operating differences. First, the SPI bus protocol includes 4 modes which may be selected by the Figure 1. Expected Timing Relationship In the current data sheet, the timing parameter tCSU has a minimum value of 240 nS. This indicates that the chip select signal must fall at least 240 nS prior to the first rising edge. However the polarity relationship indicated by the figure must be satisfied as well. As shown, the SCK must be low when the chip select falls and remain low for the tCSU period. After the falling edge of /CS, the SCK cannot start high, then go low and back high in order to produce the first rising edge. While this might satisfy the tCSU parameter it will cause improper operation. An example that will not work is shown in Figure 2. it will be necessary to set the SCK pin to a low state manually prior to beginning a transaction. The desired relationship for Mode 0 is illustrated below. In order to highlight the differences, Modes 1 through 3 are also shown.

SPI、I2C、UART、USB串行总线协议的区别

SPI、I2C、UART、USB串行总线协议的区别 SPI、I2C、UART三种串行总线协议的区别 第一个区别当然是名字: SPI(Serial Peripheral Interface:串行外设接口); I2C(INTER IC BUS) UART(Universal Asynchronous Receiver Transmitter:通用异步收发器) 第二,区别在电气信号线上: SPI总线由三条信号线组成:串行时钟(SCLK)、串行数据输出( SDO)、串行数据输入(SDI)。SPI总线可以实现多个SPI 设备互 相连接。提供SPI串行时钟的SPI设备为SPI主机或主设备(Mast er),其他设备为SPI从机或从设备(Slave)。主从设备间可 以 实现全双工通信,当有多个从设备时,还可以增加一条从设备 选择线。 如果用通用IO口模拟SPI总线,必须要有一个输出口(SDO),一

个输入口(SDI),另一个口则视实现的设备类型而定,如果要实现主从设备,则需输入输出口,若只实现主设备,则需输出 口即可,若只实现从设备,则只需输入口即可。 I2C总线是双向、两线(SCL、SDA)、串行、多主控(multi-mas ter)接口标准,具有总线仲裁机制,非常适合在器件之间进行近距离、非经常性的数据通信。在它的协议体系中,传输数 据时都会带上目的设备的设备地址,因此可以实现设备组网。如果用通用IO口模拟I2C总线,并实现双向传输,则需一 个输 入输出口(SDA),另外还需一个输出口(SCL)。(注:I2C资 料 了解得比较少,这里的描述可能很不完备) UART总线是异步串口,因此一般比前两种同步串口的结构要复 杂很多,一般由波特率产生器(产生的波特率等于传输波特率的16倍)、UART接收器、UART发送器组成,硬件上由两根线, 一根用于发送,一根用于接收。 显然,如果用通用IO口模拟UART总线,则需一个输入口,一个

SPI总线协议

一、概述. SPI, Serial Perripheral Interface, 串行外围设备接口, 是Motorola 公司推出的一种同步串行接口技术. SPI 总线在物理上是通过接在外围设备微控制器(PICmicro) 上面的微处理控制单元(MCU) 上叫作同步串行端口(Synchronous Serial Port) 的模块(Module)来实现的, 它允许MCU 以全双工的同步串行方式, 与各种外围设备进行高速数据通信. SPI 主要应用在EEPROM, Flash, 实时时钟(RTC), 数模转换器(ADC), 数字信号处理器(DSP) 以及数字信号解码器之间. 它在芯片中只占用四根管脚(Pin) 用来控制以及数据传输, 节约了芯片的pin 数目, 同时为PCB 在布局上节省了空间. 正是出于这种简单易用的特性, 现在越来越多的芯片上都集成了SPI技术. 二、特点 1. 采用主-从模式(Master-Slave) 的控制方式 SPI 规定了两个SPI 设备之间通信必须由主设备(Master) 来控制次设备(Slave). 一个Master 设备可以通过提供Clock 以及对Slave 设备进行片选(Slave Select) 来控制多个Slave 设备, SPI 协议还规定Slave 设备的Clock 由Master 设备通过SCK 管脚提供给Slave 设备, Slave 设备本身不能产生或控制Clock, 没有Clock 则Slave 设备不能正常工作. 2. 采用同步方式(Synchronous)传输数据 Master 设备会根据将要交换的数据来产生相应的时钟脉冲(Clock Pulse), 时钟脉冲组成了时钟信号(Clock Signal) , 时钟信号通过时钟极性(CPOL) 和时钟相位(CPHA) 控制着两个SPI 设备间何时数据交换以及何时对接收到的数据进行采样, 来保证数据在两个设备之间是同步传输的. 3. 数据交换(Data Exchanges) SPI 设备间的数据传输之所以又被称为数据交换, 是因为SPI 协议规定一个SPI 设备不能在数据通信过程中仅仅只充当一个"发送者(Transmitter)" 或者"接收者(Receiver)". 在每个Clock 周期内, SPI 设备都会发送并接收一个bit 大小的数据, 相当于该设备有一个bit 大小的数据被交换了. 一个Slave 设备要想能够接收到Master 发过来的控制信号, 必须在此之前能够被Master 设备进行访问(Access). 所以, Master 设备必须首先通过SS/CS pin 对Slave 设备进行片选, 把想要访问的Slave 设备选上. 在数据传输的过程中, 每次接收到的数据必须在下一次数据传输之前被采样. 如果之前接收到的数据没有被读取, 那么这些已经接收完成的数据将有可能会被丢弃, 导致SPI 物理模块最终失效.因此, 在程序中一般都会在SPI 传输完数据后, 去读取SPI 设备里的数据, 即使这些数据(Dummy Data)在我们的程序里是无用的. 三、工作机制

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

SPI总线协议及SPI时序图详解 2009-11-10 22:10 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 ---------------------------------------------------

SPI总线协议

一、概述. SPI,Serial Perripheral Interface,串行外围设备接口,是Motorola公司推出的一种同步串行接口技术.SPI总线在物理上是通过接在外围设备微控制器(PICmicro)上面的微处理控制单元(MCU)上叫作同步串行端口(Synchronous Serial Port)的模块(Module)来实现的,它允许MCU以全双工的同步串行方式,与各种外围设备进行高速数据通信. SPI主要应用在EEPROM,Flash,实时时钟(RTC),数模转换器(ADC),数字信号处理器(DSP)以及数字信号解码器之间.它在芯片中只占用四根管脚(Pin)用来控制以及数据传输,节约了芯片的pin数目,同时为PCB在布局上节省了空间.正是出于这种简单易用的特性,现在越来越多的芯片上都集成了SPI技术. 二、特点 1.采用主-从模式(Master-Slave)的控制方式 SPI规定了两个SPI设备之间通信必须由主设备(Master)来控制次设备(Slave).一个Master设备可以通过提供Clock以及对Slave设备进行片选(Slave Select)来控制多个Slave设备,SPI协议还规定Slave设备的Clock由Master设备通过SCK管脚提供给Slave设备,Slave设备本身不能产生或控制Clock,没有Clock则Slave设备不能正常工作. 2.采用同步方式(Synchronous)传输数据 Master设备会根据将要交换的数据来产生相应的时钟脉冲(Clock Pulse),时钟脉冲组成了时钟信号(Clock Signal),时钟信号通过时钟极性(CPOL)和时钟相位(CPHA)控制着两个SPI设备间何时数据交换以及何时对接收到的数据进行采样,来保证数据在两个设备之间是同步传输的. 3.数据交换(Data Exchanges) SPI设备间的数据传输之所以又被称为数据交换,是因为SPI协议规定一个SPI 设备不能在数据通信过程中仅仅只充当一个"发送者(Transmitter)"或者"接收者(Receiver)".在每个Clock周期内,SPI设备都会发送并接收一个bit大小的数据,相当于该设备有一个bit大小的数据被交换了. 一个Slave设备要想能够接收到Master发过来的控制信号,必须在此之前能够被Master设备进行访问(Access).所以,Master设备必须首先通过SS/CS pin对Slave设备进行片选,把想要访问的Slave设备选上. 在数据传输的过程中,每次接收到的数据必须在下一次数据传输之前被采样.如果之前接收到的数据没有被读取,那么这些已经接收完成的数据将有可能会被丢弃,导致SPI物理模块最终失效.因此,在程序中一般都会在SPI传输完数据后,去读取SPI设备里的数据,即使这些数据(Dummy Data)在我们的程序里是无用的. 三、工作机制

SPI通信原理及通信协议

SPI通信原理及通信协议 2010-09-14 18:48:13 SPI:高速同步串行口。3,4线接口,收发独立、可同步进行. SPI,是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口。是Motorola首先在其MC68HCXX系列处理器上定义的。SPI接口主要应用在 EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议,比如 AT91RM9200. SPI总线系统是一种同步串行外设接口,它可以使MCU与各种外围设备以串行方式进行通信以交换信息。外围设置FLASHRAM、网络控制器、LCD显示驱动器、A/D转换器和MCU等。SPI总线系统可直接与各个厂家生产的多种标准外围器件直接接口,该接口一般使用4条线:串行时钟线(SCK)、主机输入/从机输出数据线MISO、主机输出/从机输入数据线MOST和低电平有效的从机选择线SS(有的SPI接口芯片带有中断信号线INT或INT、有的SPI接口芯片没有主机输出/从机输入数据线MOSI)。 SPI的通信原理很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要至少4根线,事实上3根也可以 (单向传输时)。也是所有基于SPI的设备共有的,它们是SDI(数据输入),SDO(数据输出),SCK(时钟),CS(片选)。 (1)SDO –主设备数据输出,从设备数据输入 (2)SDI –主设备数据输入,从设备数据输出

相关主题
相关文档
最新文档