目录
串行接口基本原理
串行通信
串行数据传送模式
串行通信方式
RS-232串行接口
RS-422串行接口
RS-485串行接口
RS串行总线总结
RapidIO高速串行总线
ARINC429总线
并行接口基本原理
并行通信
IEEE488总线
SCSI总线
MXI总线
PCI接口基本原理
PCI总线原理
PCI总线特点
USB接口基本原理
USB总线特点
USB系统描述
物理接口
电源
总线协议
健壮性
工作原理
SPI接口基本原理
SPI接口原理
SPI传输过程
IIC接口基本原理
IIC接口原理
通用传输过程及格式
数据传输过程
总线竞争的仲裁
SPI和IIC总线总结
串行接口基本原理
串行通信
数据是一位一位地进行传输,在传输中每一位数据都占据一个固定的时间长度。如下图所示,系统内部发送方先进行并/串转换,通过串口发送,到接收方再进行串/并转换被读取。
优点:传输线少,成本低。
缺点:速度慢。
串行数据传送模式
数据通信涉及两台数字设备之间传输数据的问题。常用的数据通信方式有并行通信和串行通信两种。当距离较近而且要求传输速率较高时,通常采用并行通信的方式,计算机系统的内部总线结构就是并行方式。当设备距离较远时,数据往往以串行方式传输。下图列出了三种基本的通信模式。
单工通信:数据仅能沿着从A到B的单一方向传播。
半双工通信:数据可以从A到B,也可以从B到A,但不能在同一时刻传播。
全双工通信:数据在同一时刻可以从A到B,或从B到A进行双向传播。
串行通信方式
串行通信在信息格式的约定上可以分为两种方式:异步通信和同步通信。
异步通信:是指通信的发送与接收设备使用各自的时钟控制数据的发送和接收过程。为使双方的收发协调,要求发送和接收设备的时钟尽可能一致,传输过程如下图所示。
异步通信方式:数据是一帧一帧传送的,每帧数据包含有起始位(0)、数据位、奇偶校验位和停止位(1),每帧数据的传送靠起始位来同步。一帧数据的各位代码间的时间间隔是固定的,而相邻两帧的数据其时间间隔是不固定的。在异步通信的数据传送中,传输线上允许空字符。
异步通信必须遵循的三项规定如下。
(1)字符的格式:每个字符传送时,必须前面加一起始位,后面加上1、1.5或2位停止位。例如ASCⅡ码传送时,一帧应该是:前面一个起始位,接着七位ASCⅡ编码,再接着一位奇偶校验位,最后一位停止位,共十位。如下图所示。
(2)波特率:就是传送数据位的速率,用位/秒(bit/s)表示,称之为波特。例如数据传送的速率为120字符/秒,每帧包括十个数据位,则传送波特率为:10×120=1200bit/s=1200波特;每一位的传送时间是其倒数1/1200=0.833ms。一般情况下,异步通信的波特率的值为:150、300、600、1200、2400、4800、9600、14400、28800bit/s等,数值呈倍数变动。
(3)校验位:采用奇偶校验的方式。
异步通信的特点:不要求收发双方时钟的严格一致,实现容易,设备开销较小。但每个字符要附加2~3位用于起止位,各帧之间还有间隔,因此传输效率不高。
同步通信:是一种比特同步通信技术,要求收发双方具有同频同相的同步时钟信号,只需在要传送报文的最前面附加特定的同步字符,使收发双方建立同步,以后便在同步时钟的控制下逐位发送/接收。
同步传输采用字符块的方式,减少每一个字符的控制和错误检测数据位,因而可以具有较高的传输速率。即将许多字符聚集成一个字符块后,在每块信息之前要加上1~2个同步字符,字符块之后再加入适当的错误检测数据才传送出去。
特点:数据传输速率高;但要求收发双方时钟保持严格同步。
采用同步和异步通信发送一串数据的示例如下。
RS-232串行接口
RS-232C是由美国电子工业协会(EIA)于1969年制定并采用的一种串行通信接口标准,后来被广泛采用,发展成为一种国际通用的串行通信接口标准。
下表为EIA所定的传送电气规格。
EIA所定的传送电气规格
状态 | L(Low) | H(High) |
电压范围 | -25V~-3V | +3V~+25V |
逻辑 | 1 | 0 |
名称 | SPACE | MARK |
RS-232C所用的驱动芯片通常以±12V的电源来驱动信号线,而微机系统里的TTL电路以+5V表示逻辑1,接地电压表示逻辑0,因此需要转换,TTL标准与RS-232C标准之间的电平转换电路利用集成芯片实现。
RS-232C接口信号:EIA制定的RS-232C接口与外界的相连采用25芯(DB-25)和9芯(DB-9)D型插接件。实际应用中,并不是每只引脚信号都必须用到,下面介绍9芯结构。
如下图所示,其各引脚功能如下。
CD:载波检测,主要用于Modem通知计算机其处于在线状态,即Modem检测到拨号音。
RXD:接收数据线,用于接收外部设备送来的数据。
TXD:发送数据线,用于将计算机的数据发送给外部设备。
DTR:数据终端就绪,当此引脚高电平时,通知Modem可以进行数据传输,计算机已准备好。
SG:接地信号线。
DSR:数据设备就绪,此引脚为高电平时,通知计算机Modem已准备好,可以进行数据通信。
RTS:请求发送,此引脚由计算机来控制,用以通知Modem马上传送数据至计算机;否则,Modem将收到的数据暂时放入缓冲区中。
CTS:清除(允许)发送,此引脚由Modem控制,用以通知计算机将要传送的数据送至Modem。
RI:振铃提示,Modem通知计算机有呼叫进来,是否接听呼叫由计算机决定。
计算机利用RS-232C接口进行串口通信,有简单连接和完全连接两种方式。简单连接又称为三线连接,即只连接发送数据线、接收数据线和信号地。如果应用中还需要使用RS-232C的控制信号,则采用完全连接方式,如下图所示。
RS-422串行接口
RS-422是RS-232的改进型,全称是“平衡电压数字接口电路的电气特性”。是一种单机发送、多机接收的单向、平衡传输规范,传输速率可达10Mb/s。采用差分传输方式,也称平衡传输。差分传输(两根信号线的差值)能够消除共模干扰。
RS-422允许在相同传输线上连接多个接收结点,最多可接十个结点,即一主多从结构,从设备之间不能通信。支持一点对多点的双向通信。其四线接口由于采用单独的发送和接收通道,因此不必控制数据方向,各装置之间任何必需的信号交换均可以按软件方式或硬件方式实现。
RS-422的最大传输距离为4000英尺(约1219m),最大传输速率为10Mb/s。其平衡双绞线的长度与传输速率成反比,在100kb/s速率以下,才可能达到最大传输距离。只有在很短的距离下才能获得最高传输速率。一般100m长的双绞线上所能获得的最大传输速率仅为1Mb/s。
RS-422需要在传输电缆的最远端接一个电阻,要求其阻值约等于传输电缆的特性阻抗。在短距离传输时可不需终接电阻,即一般在300m以下不需接电阻。
RS-485串行接口
为扩展应用范围,EIA在RS-422的基础上制定了RS-485标准,增加了多点、双向通信能力,通常在要求通信距离为几十米至上千米时,广泛采用RS-485收发器。RS-485收发器采用平衡发送和差分接收,即在发送端,驱动器将TTL电平信号转换成差分信号输出;在接收端,接收器将差分信号变成TTL电平,因此具有抑制共模干扰的能力,加上接收器具有高的灵敏度,能检测低达200mV的电压,故数据传输可达千米以外。
RS-485可以采用二线与四线方式,二线制可实现真正的多点双向通信。而采用四线连接时,与RS-422一样只能实现点对多的通信,即只能有一个主设备,其余为从设备,但它比RS-422有所改进。无论四线还是二线连接方式总线上都可连接多达32个设备。
RS-485共模输出电压在-7V~+12V之间,接收器最小输入阻抗为12k2。RS-485满足所有RS-422的规范,所以RS-485的驱动器可以在RS-422网络中应用。
RS-485与RS-422一样,最大传输速率为10Mb/s。当波特率为1200b/s时,最大传输距离理论上可达15km。平衡双绞线的长度与传输速率成反比,在100kb/s速率以下,才可能使用规定最长的电缆长度。
RS-485需要两个终端电阻,接在传输总线的两端,其阻值要求等于传输电缆的特性阻抗。在短距离传输时可不需终端电阻,即一般在300m以下不需终端电阻。
RS串行总线总结
RS-232:点对点,全双工,传输距离短(小于15m),连接器DB9和DB25,仅使用三线也可进行通信,常用作嵌入式开发调试串口。速率低,可选一般是9600、19200bit/s。
RS-422:一点对多点,差分信号,全双工,传输距离可达上千米。最多连接10个设备。速率可达10Mb/s:
RS-485:多点通信,差分信号,二线连接是多对多点通信,半双工;四线连接就是RS-422,全双工,单点对多点通信。传输距离可达上千米。最多连接32个设备。速率可达10Mb/s。
RapidIO高速串行总线
RapidIO(Rapid Input/Output)是一种高速串行总线技术,旨在用于高性能计算和通信系统中的数据传输。
为了满足灵活性和可扩展性的要求,RapidIO协议分为三层:逻辑层、传输层和物理层。逻辑层定义了操作协议;传输层定义了包交换、路由和寻址机制;物理层定义了电气特性、链路控制和纠错重传等。
RapidIO支持的逻辑层业务主要是:直接IO/DMA(Direct IO/Direct Memory Access)和消息传递(Message Passing)。
直接IO/DMA模式是最简单实用的传输方式,其前提是主设备知道被访问端的存储器映射。在这种模式下,主设备可以直接读写从设备的存储器。直接IO/DMA在被访问端的功能往往完全由硬件实现,所以被访问的器件不会有任何软件负担。从功能上讲,这一特点和德州仪器DSP的传统的主机接口(Host Port Interface,HPI)类似。但和HPI口相比,SRIO(Serial RapidIO)带宽大,管脚少,传输方式更灵活。
对上层应用来说,发起直接IO/DMA传输主要需提供以下参数:目地器件ID、数据长度、数据在目地器件存储器中的地址。
直接IO/DMA模式又可进一步分为以下几种传输格式:
(1)NWRITE:写操作,不要求接收端响应。
(2)NWRITE_R:带响应的NWRITE(NWRITE with Response),要求接收端响应。
(3)SWRITE:流写(Stream Write),数据长度必须是8字节的整数倍,不要求接收端响应。
(4)NREAD:读操作。
SWRITE是最高效的传输格式;带响应的写操作或读操作效率则较低,一般只能达到不带响应的传输效率的一半。
消息传递模式则类似于以太网的传输方式,它不要求主设备知道被访问设备的存储器状况。数据在被访问设备中的位置则由邮箱号(类似于以太网协议中的端口号)确定。从设备根据接收到的包的邮箱号把数据保存到对应的缓冲区,这一过程往往无法完全由硬件实现,而需要软件协助,所以会带来一些软件负担。
对上层应用来说,发起消息传递主要需提供以下参数:目地器件ID、数据长度、邮箱号。
ARINC429总线
ARINC429总线是一种串行标准,为面向接口型的单向广播式传输总线。该总线上只允许有一个发送设备,但可以有多个接收设备(最多为20个)。
并行接口基本原理
并行通信
并行通信通常是将数据字节的各位用多条数据线同时进行传送。一般用来连接打印机、扫描仪等,所以又称为打印口。如下图所示。
特点:控制简单、传输速度快;由于传输线较多,长距离传送时成本高且接收方的各位同时接收存在困难。
并行接口可以分为SPP(标准并行接口)、EPP(增强型并行接口)和ECP(扩展型并行接口)。并行总线分为标准并行总线和非标准并行总线。IEEE488总线和SCSI总线是常用的标准并行总线;MXI总线是一种高性能的非标准的通用多用户并行总线。
IEEE488总线
IEEE488总线又称GPIB(General Purpose Interface Bus)总线。它按照位并行、字节串行双向异步方式传输信号。以总线方式连接,仪器设备直接并联于总线上,总线上最多可连接15台设备。最大传输距离20m,信号传输速度一般为500kb/s,最大传输速度为1Mb/s。广泛应用在仪器、仪表、测控领域。
SCSI总线
SCSI总线速度可达5Mb/s,传输距离6m。传输速率很高。普遍用作计算机的高速外设总线,如连接高速硬盘驱动器。
MXI总线
MXI总线是一种高性能非标准的通用多用户并行总线。是32位高速并行总线。最高速度可达23Mb/s,传输距离20m,用作计算机与测控机箱的互联。
PCI接口基本原理
PCI总线原理
PCI(Peripheral Component Interconnect)总线是一种高性能局部总线,是为了满足外设间以及外设与主机间高速数据传输而提出来的。在数字图形、图像和语音处理,以及高速实时数据采集与处理等对数据传输率要求较高的应用中,采用PCI总线来进行数据传输,可以解决原有的标准总线数据传输率低带来的瓶颈问题。
PCI总线是一种树型结构,并且独立于CPU,可以和CPU并行操作。PCI总线上可以挂接PCI设备和PCI桥片,一个PCI设备可以既是主设备也是从设备,但是在同一个时刻,这个PCI设备或者为主设备或者为从设备。在PCI总线中有三类设备,PCI主设备、PCI从设备和桥设备。其中PCI从设备只能被动地接收来自HOST主桥,或者其他PCI设备的读写请求;而PCI主设备可以通过总线仲裁获得PCI总线的使用权,主动地向其他PCI设备或者主存储器发起存储器读写请求。而桥设备的主要作用是管理下游的PCI总线,并转发上下游总线之间的总线事务。PCI总线有三种桥,即HOST/PCI桥、PCI/PCI桥和PCI/LEGACY桥。
PCI总线的地址总线与数据总线是分时复用的。这样做的好处是,一方面可以节省接插件的管脚数,另一方面便于实现猝发数据传输。在做数据传输时,由一个PCI设备做发起者(主控,Initiator或Master),而另一个PCI设备做目标(从设备,Target或Slave)。总线上的所有时序的产生与控制,都由Master来发起。PCI总线在同一时刻只能供一对设备完成传输,这就要求有一个仲裁机构(Arbiter),来决定谁有权力拿到总线的主控权。
PCI总线特点
(1)高速性。PCI局部总线以33MHz的时钟频率操作,采用32位数据总线,数据传输速率可高达132MB/s,远超过以往各种总线。而早在1995年6月推出的PCI总线规范2.1已定义了64位、66MHz的PCI总线标准。因此PCI总线完全可为未来的计算机提供更高的数据传送率。另外,PCI总线的主设备(Master)可与计算机内存直接交换数据,而不必经过计算机CPU中转,也提高了数据传送的效率。
(2)即插即用性。PCI设备识别主要是对开发商代码和设备代码进行识别,PCI设备的硬件资源,则是由计算机根据其各自的要求统一分配,绝不会有任何的冲突问题。作为PCI板卡的设计者,不必关心计算机的哪些资源可用,哪些资源不可用,也不必关心板卡之间是否会有冲突。
(3)可靠性。PCI独立于处理器的结构,形成一种独特的中间缓冲器设计方式,将中央处理器子系统与外围设备分开。这样用户可以随意增添外围设备,以扩充计算机系统而不必担心在不同时钟频率下会导致性能的下降。PCI总线增加了奇偶校验错(PERR)、系统错(SERR)、从设备结束(STOP)等控制信号及超时处理等可靠性措施,使数据传输的可靠性大为增加。
(4)复杂性。PCI总线强大的功能大大增加了硬件设计和软件开发的实现难度。硬件上要采用大容量、高速度的CPLD或FPGA芯片来实现PCI总线复杂的功能。软件上则要根据所用的操作系统,用软件工具编制支持即插即用功能的设备驱动程序。
(5)自动配置。PCI总线规范规定PCI设备可以自动配置。PCI定义了三种地址空间:存储器空间、输入/输出空间和配置空间,每个PCI设备中都有256字节的配置空间用来存放自动配置信息,在系统初始化时,通过idsel引脚片选决定PCI设备,自动根据读到的有关设备的信息,结合系统的实际情况为设备分配存储地址、中断和某些定时信息。
(6)共享中断。PCI总线是采用低电平有效方式,多个中断可以共享一条中断线。
(7)扩展性好。如果需要把许多设备连接到PCI总线上,而总线驱动能力不足时,可以采用多级PCI总线,这些总线上均可以并发工作,每个总线上均可挂接若干设备。因此PCI总线结构的扩展性是非常好的。
(8)多路复用。在PCI总线中为了优化设计采用了地址线和数据线共用一组物理线路,即多路复用。PCI接插件尺寸小,又采用了多路复用技术,减少了元件和管脚个数,提高了效率。
(9)严格规范。PCI总线对协议、时序、电气性能、机械性能等指标都有严格的规定,保证了PCI的可靠性和兼容性。由于PCI总线规范十分复杂,其接口的实现就有较高的技术难度。
USB接口基本原理
USB总线特点
通用串行总线(Universal Serial Bus,USB)是由Intel等厂商制定的连接计算机与具有USB接口的多种外设之间通信的串行总线。最多可连接127个设备。用于多种嵌入式系统设备的数据通信,如移动硬盘、数码相机、高速数据采集设备等。
(1)使用简单。USB提供机箱外的热即插即用功能,连接外设不必再打开机箱,也不必关闭主机电源,USB可智能地识别USB链上外围设备的动态插入或拆除,具有自动配置和重新配置外设的能力,因此连接设备方便。
每个USB系统中有个主机,USB总线采用“级联”方式可连接多个外部设备。每个USB设备用一个USB插头连接到上一个USB设备的USB插座上,而其本身又提供一或多个USB插座供下一个或多个USB设备连接使用。这种多重连接是通过集线器(Hub)来实现的,整个USB网络中最多可连接127个设备,支持多个设备同时操作。
(2)应用范围广。USB系统数据报文附加信息少,带宽利用率高,可同时支持同步传输和异步传输两种传输方式。可同时支持不同速率的设备,速率最高可达几百Mb/s。
(3)支持主机与设备之间的多数据流和多消息流传输,且支持同步和异步传输类型。
(4)低成本的电缆和连接器。USB通过一根四芯的电缆传送信号和电源,电缆长度可长达5m。
(5)较强的纠错能力。USB系统可实时地管理设备插拔。在USB协议中包含了传输错误管理、错误恢复等功能,同时根据不同的传输类型来处理传输错误。
(6)总线供电。USB总线可为连接在其上的设备提供5V电压/100mA电流的供电,最大可提供500mA的电流。USB设备也可采用自供电方式。
USB系统描述
一个USB系统由三部分来描述:USB主机、USB设备和USB互连。
USB主机:在任一USB系统中只有一个主机,到主计算机系统的USB接口被称作主控制器。主控制器可采用硬件、固件或软件相结合的方式来实现。与Hub集成在主机系统内,向上与主总线(如PCI总线)相连,向下可提供一或多个连接点。
USB设备分类:为Hub(集线器)和Function(功能)两大类。Hub提供到USB的附加连接点,Function为主机系统提供附加的性能,如ISDN连接、数字操纵杆或扬声器等。实际上,功能就是可发送和接收USB数据的、可实现某种功能的USB设备。USB设备应具有标准的USB接口。
USB互连:是USB设备与主机的连接和通信方式,它包括总线拓扑结构、内层关系、数据流模型和USB调度表。
USB总线用来连接各USB设备和USB主机。USB在物理上连接成一个层叠的星形拓扑结构,Hub是每个星的中心,每根线段表示一个点到点(Point-to-Point)的连接,可以是主机与一个Hub或功能之间的连接,也可以是一个Hub与另一个Hub或功能之间的连接。
USB的拓扑结构最多只能有七层(包括根层)。在主机和任一设备之间的通信路径中最多支持五个非根Hub,复合设备(Compound Device)要占据两层,不能把它连到第七层,第七层只能连接Function设备。七层拓扑结构如下图所示。
物理接口
USB总线的电缆有四根导线:一对标准尺寸的双绞信号线和一对标准尺寸的电源线。
USB总线支持的数据传输率有三种:高速信令位传输率为480Mb/s:全速信令位传输率为12Mb/s;低速信令位传输率为1.5Mb/s。
USB2.0支持在主控制器与Hub之间用高速传输全速和低速数据,而Hub与设备之间以全速或低速传输数据,这种支持能力可以将全速设备和低速设备对高速设备可用带宽的影响减到最小。
电源
USB的电源规范包括两个方面:
(1)电源分配用来处理USB设备如何使用主机通过USB总线提供的电源。每根USB电缆提供的电源功率是有限的,主机为直接连接到它的USB设备提供电源,Hub也对它所连接的USB设备提供电源,USB设备也可自带电源。完全依赖电缆供电的USB设备称作总线供电设备(Bus-Powered Device),有后备(Alternate)电源的设备称作自我供电设备(Self-Powered Device)。
(2)电源管理用来处理USB系统软件和设备如何适应主机上的电源管理系统。USB主机有一个独立于USB的电源管理系统,USB系统软件与主机电源管理系统之间交互作用,共同处理诸如挂起或恢复这样的系统电源事件。
总线协议
USB是一种查询(Polling)总线,由主控制器启动所有的数据传输。USB上所挂连的外设通过由主机调度的(Host-Scheduled)、基于令牌的(Token-Based)协议来共享USB带宽。
大部分总线事务涉及三个包的传输。当主控制器按计划地发出一个描述事务类型和方向、USB设备地址和端点号的USB包时,就开始发起一个事务,这个包称作“令牌包”(Token Packet),它指示总线上要执行什么事务,欲寻址的USB设备及数据传送方向。然后,事务源发送一个数据包 (Data Packet),或者指示它没有数据要传输。最后,目标一般还要用一个指示传输是否有成功的握手包(Handshake Packet)来响应。
主机与设备端点之间的USB数据传输模型被称作管道。管道有两种类型:流和消息。消息数据具有USB定义的结构,而流数据没有。管道与数据带宽、传输服务类型、端点特性(如方向性和缓冲区大小)有关。当USB设备被配置时,大多数管道就形成了。一旦设备加电,总是形成一个被称作默认控制管道的消息管道,以便提供对设备配置、状态和控制信息的访问。
事务调度表(Transaction Schedule)允许对某些流管道进行流量控制,在硬件级,通过使用NAK(否认)握手信号来调节数据传输率,以防止缓冲区上溢或下溢产生。当被否认时,一旦总线时间可用会重试该总线事务。流量控制机制允许灵活地进行调度,以适应异类混合流管道的同时服务,因此,可以在不同的时间间隔,用不同规模的包为多个流管道服务。
健壮性
USB采取以下措施提高它的健壮性:
(1)使用差分驱动器和接收器以及屏蔽保护,以保证信号的完整性。
(2)控制域和数据域的CRC保护校验。
(3)连接和断开检测及系统级资源配置。
(4)协议的自我修复,对丢失包或毁坏包执行超时(Timeouts)处理。
(5)对流数据进行流量控制,以保证对等步和硬件缓冲器维持正常的管理。
(6)采用数据管道和控制管道结构,以保证功能之间的独立性。
(7)协议允许用硬件或软件的方法对错误进行处理,硬件错误处理包括对传输错误的报告和重发。
工作原理
USB设备插入USB端点时,主机通过默认地址0与设备的端点0进行通信。在这个过程中,主机发出一系列试图得到描述符的标准请求,通过这些请求,主机得到所有感兴趣的设备信息,从而知道了设备的情况以及该如何与设备通信。随后主机通过发出Set Address请求为设备设置一个唯一的地址。这样,配置过程就完成了,以后主机就通过为设备设置好的地址与设备通信,而不再使用默认地址。
SPI接口基本原理
SPI接口原理
串行外围设备接口(Serial Peripheral Interface,SPI)是由Motorola公司开发,用来在微控制器和外围设备芯片之间提供一个低成本、易使用的接口(SPI有时候也被称为4线接口)。这种接口可以用来连接存储器(存储数据)、A/D转换器、D/A转换器、实时时钟日历、LCD驱动器、传感器、音频芯片,甚至其他处理器。
SPI主要使用四个信号:主机输出/从机输入(MOSI)、主机输入/从机输出(MISO)、串行SCLK或SCK、外设芯片(CS)。有些处理器有SPI接口专用的芯片选择,称为从机选择SS。
MOSI信号由主机产生,从机接收。在有些芯片上,MOSI只被简单地标为串行输入(SI),或者串行数据输入SDI。MISO信号由从机产生,不过还是在主机的控制下产生的。在一些芯片上,MISO有时被称为串行输出(SO)或串行数据输出(SDO)。外设片选信号通常只是由主机的备用I/O引脚产生的。
与标准的串行接口不同,SPI是一个同步协议接口,所有的传输都参照一个共同的时钟,这个同步时钟信号由主机产生,接收数据的外设使用时钟来对串行比特流的接收进行同步化。可以将多个具有SPI接口的芯片连到主机的同一个SPI接口上,主机通过控制从设备的片选输入引脚来选择接收数据的从设备。
SPI传输过程
上图是微处理器通过SPI接口与外设进行连接。主机和外设都包含一个串行移位寄存器,主机通过向它的SPI串行寄存器写入一个字节来发起一次传输。寄存器是通过MOSI信号线将字节传送给外设,外设也将自己移位寄存器中的内容通过MISO信号线返回给主机。这样,两个移位寄存器中的内容就被交换了。外设的写操作和读操作是同步完成的,因此SPI成为一个很有效的协议。
如果只是进行写操作,主机只需忽略收到的字节;反过来,如果主机要读取外设的一个字节,就必须发送一个空字节来引发从机的传输。
当主机发送一个连续的数据流时,有些外设能够进行多字节传输。许多拥有SPI接口的存储器芯片都以这种方式工作。在这种传输方式下,SPI外设的芯片选择端必须在整个传输过程中保持低电平。比如,存储器芯片会希望在一个“写”命令之后紧接着收到的是四个地址字节(起始地址),这样,后面接收到的数据就可以存储到该地址。一次传输可能会涉及千字节的移位或更多的信息。
其他外设只需要一个单字节(比如一个发给A/D转换器的命令),有些甚至还支持菊花链连接,如下图所示是菊花链连接三台SPI设备。
主机处理器从其SPI接口发送三个字节的数据。第一个字节发送给外设A,当第二个字节发送给外设A的时候,第一个字节己移出了A,而传送给了B。同样,主机想要从外设A读取一个结果,它必须再发送一个3字节(空字节)的序列,这样就可以把A中的数据移到B中,然后再移到C中,最后送回到主机。在这个过程中,主机还依次从B和C接收到字节。
注意,菊花链连接不一定适用于所有的SPI设备,特别是要求多字节传输的(比如存储器芯片)设备。有的外设芯片不支持菊花链连接。
根据时钟极性和时钟相位的不同,SPI有四个工作模式。
时钟极性CPOL有高、低两极;时钟极性为低电平时,空闲时时钟(SCK)处于低电平,传输时跳转到高电平;时钟极性为高电平时,空闲时时钟处于高电平,传输时跳转到低电平。
时钟相位CPHA有两个:时钟相位0和时钟相位1。当时钟相位为0时,时钟周期的前一边缘采集数据;当时钟相位为1时,时钟周期的后一边缘采集数据。
IIC接口基本原理
IIC接口原理
内部集成电路总线(Inter Integrated Circuit BUS,IIC BUS)是由Philips公司推出的二线制串行扩展总线,用于连接微控制器及其外围设备。是具备总线仲裁和高低速设备同步等功能的高性能多主机总线。直接用导线连接设备,通信时无需片选信号。
在IIC总线上,只需要两条线——串行数据SDA线和串行时钟SCL线,它们用于总线上器件之间的信息传递,都是双向的。每个器件都有一个唯一的地址以供识别,而且各器件都可以作为一个发送器或接收器(由器件的功能决定)。
IIC总线有如下操作模式:主发送模式、主接收模式、从发送模式、从接收模式。
通用传输过程及格式
起始条件:当IIC接口处于从模式时,要想数据传输,必须检测SDA线上的起始条件,起始条件由主器件产生。在SCL信号为高时,SDA产生一个由高变低的电平变化处,即产生一个启动信号。当IIC总线上产生了启动信号后,这条总线就被发出起始信号的主器件占用了,变成“忙”状态。
停止条件:在SCL信号为高时,SDA产生一个由低变高的电平变化处,产生停止信号。停止条件也由主器件产生,作用是停止与某个从器件之间的数据传输。当IIC总线上产生了一个停止条件,那么在几个时钟周期之后总线就被释放,变成“闲”状态。如下图所示。
当主器件送出一个起始条件,它还会立即送出一个从地址,来通知将与它进行数据通信的从器件。1个字节的地址包括7位的地址信息和1位的传输方向指示位,如果第7位为0,表示马上要进行一个写操作;如果为1,表示马上要进行一个读操作。
数据传输格式:SDA线上传输的每个字节长度都是8位,每次传输中字节的数量是没有限制的。在起始条件后面的第一个字节是地址域,之后每个传输的字节后面都有一个应答(ACK)位 (即一帧共有9位)。传输中串行数据的MSB(字节的高位)首先发送。
应答信号:为了完成1个字节的传输操作,接收器应该在接收完1个字节之后发送ACK位到发送器,告诉发送器己经收到了这个字节。ACK脉冲信号在SCL线上第9个时钟处发出(前面8个时钟完成1个字节的数据传输,SCL上的时钟都是由主器件产生的)。当发送器要接收ACK脉冲时,应该释放SDA信号线,即将SDA置高。接收器在接收完前面8位数据后,将SDA拉低。发送器探测到SDA为低,就认为接收器成功接收了前面的8位数据,如下图所示。
数据传输过程
开始:主设备产生启动信号,标明数据传输开始。
地址:主设备发送地址信息,包含7位的从设备地址和1位的数据方向指示位(读或写位,表示数据流的方向)。
数据:根据指示位,数据在主设备和从设备之间进行传输。数据一般以8位传输,MSB先传;具体能传输多少量的数据并没有限制。接收器产生1位的ACK(应答信号)表明收到了每个字节。传输过程可以被中止和重新开始。
停止:主设备产生停止信号,结束数据传输。
总线竞争的仲裁
IIC总线上可以挂接多个器件,有时会发生两个或多个主器件同时想占用总线的情况。IIC总线具有多主控能力,可对发生在SDA线上的总线竞争进行仲裁。
仲裁原则:当多个主器件同时想占用总线时,如果某个主器件发送高电平,而另一个主器件发送低电平,则发送电平与此时SDA总线电平不符的那个器件将自动关闭其输出级。
总线竞争的仲裁在两个层次上进行:首先是地址位的比较,如果主器件寻址同一个从器件,则进入数据位比较,从而确保了竞争仲裁的可靠性。由于是利用IC总线上的信息进行仲裁,不会造成信息的丢失。
SPI和IIC总线总结
SPI包含四根信号线,分别是:
(1)SCLK:Serial Clock(output from master)。
(2)MOSI,SIMO:Master Output,Slave Input(output from master)。
(3)MISO,SOMI:Master Input,Slave Output(output from slave)。
(4)SS:Slave Select(active low,output from master)。
SPI是单主设备总线,有片选信号,是环形总线结构,其数据收发线是各自独立的。
IIC有两条信号线:数据线SDA、时钟信号线SCL。
IIC是多主机总线,没有物理的片选信号线,其数据收发线是复用的。IIC数据传输速率有标准模式(100kb/s)、快速模式(400b/s)和高速模式(3.4Mb/s),另外一些变种实现了低速模式(10kb/s)和快速+模式(1Mb/s)。