SPI总线由三条信号线组成:串行时钟(SCLK)、串行数据输出(SDO)、串行数据输入(SDI)。SPI总线能够实现多个SPI设备互相链接。提供SPI串行时钟的SPI设备为SPI主机或主设备(Master),其余设备为SPI从机或从设备(Slave)。主从设备间能够实现全双工通讯,当有多个从设备时,还能够增长一条从设备选择线。
若是用通用IO口模拟SPI总线,必需要有一个输出口(SDO),一个输入口(SDI),另外一个口则视实现的设备类型而定,若是要实现主从设备,则需输入输出口,若只实现主设备,则需输出口便可,若只实现从设备,则只需输入口便可。
I2C总线是双向、两线(SCL、SDA)、串行、多主控(multi-master)接口标准,具备总线仲裁机制,很是适合在器件之间进行近距离、非常常性的数据通讯(个人平衡小车读取MPU6050模块的数据就是用I2C总线)。在它的协议体系中,传输数据时都会带上目的设备的设备地址,所以能够实现设备组网。
若是用通用IO口模拟I2C总线,并实现双向传输,则需一个输入输出口(SDA),另外还需一个输出口(SCL)。(注:I2C资料了解得比较少,这里的描述可能很不完备)
UART总线是异步串口,所以通常比前两种同步串口的结构要复杂不少(单片机的书上有介绍的,其实也算不上复杂),通常由波特率产生器(产生的波特率等于传输波特率的16倍)、UART接收器、UART发送器组成,硬件上由两根线,一根用于发送,一根用于接收。
显然,若是用通用IO口模拟UART总线,则需一个输入口,一个输出口。html
从第二点明显能够看出,SPI和UART能够实现全双工,但I2C不行。安全
SPI 的通讯原理很简单,它须要至少4根线,事实上3根也能够。也是全部基于SPI的设备共有的,它们是SDI(数据输入),SDO(数据输出),SCK(时 钟),CS(片选)。其中CS是控制芯片是否被选中的,也就是说只有片选信号为预先规定的使能信号时(高电位或低电位),对此芯片的操做才有效。这就容许 在同一总线上链接多个SPI设备成为可能。网络
接下来就负责通信的3根线了。通信是经过数据交换完成的,这里先要知道SPI是串行通信协议,也就是说数据是一位一位的传输的。这就是SCK时钟线存在的原 因,由SCK提供时钟脉冲,SDI,SDO则基于此脉冲完成数据传输。数据输出经过SDO线,数据在时钟上沿或下沿时改变,在紧接着的下沿或上沿被读取。 完成一位数据传输,输入也使用一样原理。这样,在至少8次时钟信号的改变(上沿和下沿为一次),就能够完成8位数据的传输。异步
要注意的是,SCK信号线只由主设备控制,从设备不能控制信号线。一样,在一个基于SPI的设备中,至少有一个主控设备。async
这样传输的特色:这样的传输方式有一个优势,与普通的串行通信不一样,普通的串行通信一次连续传送至少8位数据,而SPI容许数据一位一位的传送,甚至容许暂停,由于SCK时钟线由主控设备控制,当没有时钟跳变时,从设备不采集或传送数据。也就是说,主设备经过对SCK时钟线的控制能够完成对通信的控制。分布式
SPI仍是一个数据交换协议:由于SPI的数据输入和输出线独立,因此容许同时完成数据的输入和输出。性能
不一样的SPI设备的实现方式不尽相同,主要是数据改变和采集的时间不一样,在时钟信号上沿或下沿采集有不一样定义,具体请参考相关器件的文档。ui
I2Curl
只要求两条总线线路:一条串行数据线SDA 一条串行时钟线SCLspa
每一个链接到总线的器件均可以经过惟一的地址和一直存在的简单的主机从机关系软件设定地址主机能够做为主机发送器或主机接收器
它是一个真正的多主机总线若是两个或更多主机同时初始化数据传输能够经过冲突检测和仲裁,防止数据被破坏
串行的8 位双向数据传输位速率在标准模式下可达100kbit/s 快速模式下可达400kbit/s 高速模式下可达3.4Mbit/s
片上的滤波器能够滤去总线数据线上的毛刺波保证数据完整
链接到相同总线的IC 数量只受到总线的最大电容400pF 限制
UART
UART总线是异步串口,所以通常比前两种同步串口的结构要复杂不少,通常由波特率产生器(产生的波特率等于传输波特率的16倍)、UART接收器、UART发送器组成,硬件上由两根线,一根用于发送,一根用于接收。
显然,若是用通用IO口模拟UART总线,则需一个输入口,一个输出口。
UART经常使用于控制计算机与串行设备的芯片。有一点要注意的是,它提供了RS-232C数据终端设备接口,这样计算机就能够和调制解调器或其它使用RS-232C接口的串行设备通讯了。
UART是通用异步收发器(异步串行通讯口)的英文缩写,它包括了RS23二、RS49九、RS42三、RS422和RS485等接口标准规范和总线标准规范,即UART是异步串行通讯口的总称。而RS23二、RS49九、RS42三、RS422和RS485等,是对应各类异步串行通讯口的接口标准和总线标准,它规定了通讯口的电气特性、传输速率、链接特性和接口的机械特性等内容。其实是属于通讯网络中的物理层(最底层)的概念,与通讯协议没有直接关系。而通讯协议,是属于通讯网络中的数据链路层(上一层)的概念。 COM口是PC(我的计算机)上,异步串行通讯口的简写。因为历史缘由,IBM的PC外部接口配置为RS232,成为实际上的PC界默认标准。因此,如今PC机的COM口均为RS232。若配有多个异步串行通讯口,则分别称为COM一、COM2...
明显能够看出,SPI和UART能够实现全双工,但I2C不行
USART:通用同步异步收发器。(与UART的区别很明显)
UART:universal asynchronous receiver and transmitter通用异步收发器; USART:universal synchronous asynchronous receiver and transmitter通用同步异步收发器。通常而言,单片机中,名称为UART的接口通常只能用于异步串行通信,而名称为USART的接口既能够用于同步串行通信,也能用于异步串行通信。
USB
是英文Universal Serial BUS(通用串行总线)的缩写,是一个外部总线标准,用于规范电脑与外部设备的链接和通信,是应用在PC 领域的接口技术。USB 接口支持设备的即 即用和热插拔功能。USB 是在1994 年末由尔、
康柏.IBM、Microsoft 等多家公司联合提出的.
USB的电气特性还有传输特性
CAN
下面附上一个文档,分析得更为专业细致:http://wenku.baidu.com/link?url=Mmt8LXPzG6IJ6ncR1jeB6wwyWq-vcwWC9zxqoxoH5IRMkNbZhlwfeJEfhrqKLSuSoL5LnFTqSjRAdxaGmKE84NdDIRyrDogmdrS48ZyE63a
串行总线的选择:
http://www.elecfans.com/article/84/119/2009/2009050957716.html
微控制器(µC)是当今各类先进电子产品的核心,它须要与一个或多个外设器件通讯。之前,µC的外设是以存储器映射方式与数据和地址总线链接的。对地址线译码以得到片选信号,从而在有限的地址范围内为每一个外设分配惟一的地址。这种接口类型所需的最少引脚数(除电源和地以外)为:8 (数据) + 1 (R//W) + 1 (/CS) + n条地址线[n = log2(内部寄存器或存储器字节的数目)]。例如,与一个16字节外设通讯时,须要的引脚数为:8 +1 + 1 + 4 = 14。这种接口的访问速度快,但较多的引脚数也同时带来了封装尺寸增大和总成本提升的问题。要下降成本和缩小封装尺寸,串行接口显然是理想的替代方案。
选择串行总线并不是易事。除须要考虑数据速率、数据位传输顺序(先传最高位或最低位)和电压外,设计者还应该考虑如下几点:
表1以矩阵的形式展现了各类通用总线系统之间的差别。16种可能组合中只有4种通用类型为你们所熟知。
除这些特性外,具体应用还会提出更多要求,如供电方式、隔离、噪声抑制、µC (主机)与外设(从机)间的最大传输距离、以及电缆链接方式(总线型、星型、可承受线路反接等)。提出相似要求的应用包括楼宇自动化、工业控制和抄表等,而且都已制定了相应的标准。1, 2
表1:串行总线系统归纳
下面的一段话看看就行了解一下:
若是实际应用能够提供时钟线,则总线选择范围可扩展到I²C12和SMBus13器件。根据SMBus的规范,它能够看做是100kbps I²C总线规范增长了超时特性后的派生总线类型。在某个节点与总线主机失去同步的状况下,超时特性可避免总线发生闭锁,而I²C系统则须要通过一次上电复位过程,才能从这种故障状态恢复至正常工做状态。在1-Wire系统中,复位/在线检测周期可将通讯接口复位至肯定的启动条件下。
除了时钟线外,I²C/SMBus还为总线上传输的每一个字节提供一个应答位。这使得有效数据速率下降了12%。通讯过程开始于一个启动条件,并跟随从器件地址和一个数据方向位(读/写),最后结束于一个中止条件。对于1-Wire系统,首先须要知足网络层的要求(即选择某个特定器件,执行search ROM命令或者广播);接下来发送与特定器件相关的命令代码,该代码同时会影响数据的传输方向(读/写)。
原有I²C和SMBus总线系统的一个突出问题是其有限的7位地址空间。因为可提供超过127种不一样器件类型,咱们没法根据从器件地址推断器件功能。此外,许多I²C器件还容许用户随意设置1个或多个地址位,以在总线上挂接多个相同器件。这种特性进一步减小了可用的地址空间。解决地址冲突问题的标准作法是将总线系统划分红若干段,某一时刻可在软件控制下激活某个网络段。该网络段须要增长更多硬件,也使应用固件更为复杂。I²C系统不具有网络节点查找或枚举功能,所以很难处理节点数动态变化的系统。这一问题可借助SMBus Specification Version 2.013中的地址分辨率协议得以解决。可是,支持该特性的SMBus器件极为稀少。
SPI14和MICROWIRE15 (SPI的子集)均须要为每一个从器件提供一条额外的片选线。因为具备片选信号,SPI协议只定义了针对存储器地址和状态寄存器的读/写命令。它不提供应答功能。一般,SPI器件的数据输入和数据输出采用不一样的引脚。鉴于数据输出在除了读操做外的任何状况下均为三态(禁止),所以可将两个数据引脚接到一块儿以构成单根双向数据线。当其它总线系统没法提供所需的功能或须要较高的数据传输速率时,可选用SPI总线,它能够支持2Mbps或更高的速率。SPI和MICROWIRE的不利因素在于产生CS信号的译码逻辑,以寻址某个特定器件。可是不会产生地址冲突问题。和I²C总线同样,不提供节点查找功能。主机没法根据从器件的逻辑地址来推断器件功能,所以很难管理节点动态变化的网络。
咱们对这些标准进行讨论,以举例说明差分传输的特色。这类总线系统中传输速率最快的两种是FireWire16和USB 2.017,它们采用点对点电气链接。使用先进的节点或集线器,能够构成树状拓扑的虚拟总线,数据包从源发送至端点(USB),或采用对等传输(FireWire),突发数据速率高达480Mbps (USB 2.0)或1600Mbps (FireWire)。尺寸有限的数据包以及接收/缓冲/重发通讯机制增长了传输时间,反过来下降了有效的数据吞吐能力。USB的拓扑和协议容许最多链接126个节点,FireWire容许最多63个节点,使用无源电缆时节点间的最大传输距离为4.5m。专为包括PC外设、多媒体、工业控制和航空(仅FireWire)应用而设计,USB和FireWire器件能够带电插入系统(热插拔)。该特性容许网络节点数动态变化。
LVDS1八、RS-48519和CAN20可实现挂接主机和从机的总线型结构,甚至能够链接多个主机。这些标准中低压差分信号(LVDS)是速率最快的,若是总线长度不超过10m,可工做在100Mbps速率下。可用的数据速率及吞吐能够更快或更慢,具体取决于网络尺寸。LVDS电气标准专为背板应用而设计,支持热插拔功能,但不包含任何协议。
RS-485也仅定义了电气参数。RS-485定义了负载和每条总线的最大负载数目(32),而不是以节点的形式给出。一个电气节点的负载能够小于1。12m网络距离下的典型数据速率可高达35Mbps,1200m距离下数据速率可达100kbps,这些特性足以知足数据采集和控制应用。RS-485设备的协议一般基于原来设计用于RS-232的部分协议。
与此不一样,控制器局域网(CAN)为分布式实时控制定义了通讯协议,安全性很是高,专门面向汽车应用和工业自动化领域。数据速率从40m距离下的1Mbps到1000m距离下的50kbps。寻址方式是基于消息的,协议自己对节点数没有任何限制。CAN节点支持热插拔,网络节点数能够动态变化。
在简单、低成本总线系统中,与LIN总线和SensorPath相比,1-Wire系统的从器件可提供最普遍的功能和网络驱动器。I²C和SMBus除了须要数据线和参考地以外,还须要时钟线和VCC电源,固然可供选择的器件功能也很是多。SPI和MICROWIRE须要额外的片选线,但能够提供更高的数据速率。除支持寄生供电和网络节点查找功能外,1-Wire接口和协议还支持热插拔,这一特性一般仅在使用差分信号的高速系统以及SMBus 2.0兼容产品中才提供。iButton®产品是使用极为普遍的热插拔1-Wire器件,热插拔是这类器件的正常工做方式。事实已经证实,1-Wire器件在下列应用中极为有效:全球识别号2一、电路板/配件标识与认证十、温度检测和执行装置等。另一种很是成功的1-Wire产品是具备安全存储器和质询-响应机制的器件,它能以最低的成本实现双向认证和软件代码保护22, 23。