最新动态

I2C和SPI,UART三种数据传输方式的区别
时间:2017-05-16

SPI--Serial Peripheral Interface,(Serial Peripheral Interface:串行外设接口)串行外围设备接口,是Motorola公司推出的一种同步串行通讯方式,是一种三线同步总线,因其硬件功能很强,与SPI有关的软件就相当简单,使CPU有更多的时间处理其他事务。 
 
I2C--INTER-IC(INTER IC BUS:意为IC之间总线)串行总线的缩写,是PHILIPS公司推出的芯片间串行传输总线。它以1根串行数据线(SDA)和1根串行时钟线(SCL)实现了双工的同步数据传输。具有接口线少,控制方式简化,器件封装形式小,通信速率较高等优点。在主从通信中,可以有多个I2C总线器件同时接到I2C总线上,通过地址来识别通信对象。 
能用于替代标准的并行总线,能连接的各种集成电路和功能模块。I2C是多主控总线,所以任何 
一个设备都能像主控器一样工作,并控制总线。总线上每一个设备都有一个独一无二的地址,根 
据设备它们自己的能力,它们可以作为发射器或接收器工作。多路微控制器能在同一个I2C总线上共存。 
最主要的优点是其简单性和有效性。它支持多主控(multimastering), 其中任何能够进行发送 
和接收的设备都可以成为主总线。一个主控能够控制信号的传输和时钟频率。当然,在任何时间点上只能有一个主控。 
UART(Universal Asynchronous Receiver Transmitter:通用异步收发器):单端,远距离传输。 
大多数计算机包含两个基于RS232的串口。串口同时也是仪器仪表设备通用的通信协议;很多 
GPIB兼容的设备也带有RS-232口。同时,串口通信协议也可以用于获取远程采集设备的数据。 
串口通信的概念非常简单,串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通 
信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。它很简单并且能够实现远距离通信。比如IEEE488定义并行通行状态时,规定设备线总常不得超过20米,并且任意两个设备间的长度不得超过2米;而对于串口而言,长度 可达1200米。  



区别在电气信号线上: 
     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不行

 

A:I2C线更少,我觉得比UART、SPI更为强大,但是技术上也更加麻烦些,因为I2C需要有双向IO的支持,而且使用上拉电阻,我觉得抗干扰能力较弱,一般用于同一板卡上芯片之间的通信,较少用于远距离通信。SPI实现要简单一些,UART需要固定的波特率,就是说两位数据的间隔要相等,而SPI则无所谓,因为它是有时钟的协议。 
B:I2C的速度比SPI慢一点,协议比SPI复杂一点,但是连线也比标准的SPI要少

 

 

SPI 是一种允许一个主设备启动一个与从设备的同步通讯的协议,从而完成数据的交换。也就是SPI是一种规定好 
的通讯方式。这种通信方式的优点是占用端口较少,一般4根就够基本通讯了。同时传输速度也很高。一般来说要 
求主设备要有SPI控制器(但可用模拟方式),就可以与基于SPI的芯片通讯了。  SPI 的通信原理很简单,它需要至少4根线,事实上3根也可以。也是所有基于SPI的设备共有的,它们是 
SDI(数据输入),SDO(数据输出),SCK(时 钟),CS(片选)。其中CS是控制芯片是否被选中的,也就 
是说只有片选信号为预先规定的使能信号时(高电位或低电位),对此芯片的操作才有效。这就允许 在同一总 
线上连接多个SPI设备成为可能。 
     接下来就负责通讯的3根线了。通讯是通过数据交换完成的,这里先要知道SPI是串行通讯协议,也就是说数 
据是一位一位的传输的。这就是SCK时钟线存在的原 因,由SCK提供时钟脉冲,SDI,SDO则基于此脉冲完成数 
据传输。数据输出通过SDO线,数据在时钟上沿或下沿时改变,在紧接着的下沿或上沿被读取。 完成一位数据传 
输,输入也使用同样原理。这样,在至少8次时钟信号的改变(上沿和下沿为一次),就可以完成8位数据的传输。 
     要注意的是,SCK信号线只由主设备控制,从设备不能控制信号线。同样,在一个基于SPI的设备中,至少有一个主控设备。 
     这样传输的特点:这样的传输方式有一个优点,与普通的串行通讯不同,普通的串行通讯一次连续传送至少8位数据,而SPI允许数据一位一位的传送,甚至允许暂停,因为SCK时钟线由主控设备控制,当没有时钟跳变时,从设备不采集或传送数据。也就是说,主设备通过对SCK时钟线的控制可以完成对通讯的控制。 
     SPI还是一个数据交换协议:因为SPI的数据输入和输出线独立,所以允许同时完成数据的输入和输出。 
     不同的SPI设备的实现方式不尽相同,主要是数据改变和采集的时间不同,在时钟信号上沿或下沿采集有不同定义,具体请参考相关器件的文档。 

I2C 
• 只要求两条总线线路:一条串行数据线SDA 一条串行时钟线SCL 
• 每个连接到总线的器件都可以通过唯一的地址和一直存在的简单的主机从机关系软件设定地址主机可以作为主机 
发送器或主机接收器• 它是一个真正的多主机总线如果两个或更多主机同时初始化数据传输可以通过冲突检测和仲 裁,防止数据被破坏 
• 串行的8 位双向数据传输位速率在标准模式下可达100kbit/s 快速模式下可达400kbit/s 高速模式下可达3.4Mbit/s 
• 片上的滤波器可以滤去总线数据线上的毛刺波保证数据完整 • 连接到相同总线的IC 数量只受到总线的最大电容400pF 限制 UART 
UART

总线是异步串口,因此一般比前两种同步串口的结构要复杂很多,一般由波特率产生器(产生的波特率等于传 
输波特率的16倍)、UART接收器、UART发送器组成,硬件上由两根线,一根用于发送,一根用于接收。 
     显然,如果用通用IO口模拟UART总线,则需一个输入口,一个输出口。 
UART常用于控制计算机与串行设备的芯片。有一点要注意的是,它提供了RS-232C数据终端设备接口,这样计算 
机就可以和调制解调器或其它使用RS-232C接口的串行设备通信了

[返回]