转:SPI、I2C、UART、USART串行总线协议的区别

SPI、I2C、UART、USART串行总线协议的区别
发布时间:2010-10-09 10:57:39
技术类别:通信网络 
 

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和UART可以实现全双工,


但I2C不行;


第四,看看牛人们的意见吧! 
wudanyu:I2C线更少,我觉得比UART、SPI更为强大,但是技


术上也更加麻烦些,因为I2C需要有双向IO的支持,而且使用


上拉电阻,我觉得抗干扰能力较弱,一般用于同一板卡上芯片


之间的通信,较少用于远距离通信。SPI实现要简单一些,UAR


T需要固定的波特率,就是说两位数据的间隔要相等,而SPI则


无所谓,因为它是有时钟的协议。 
quickmouse:I2C的速度比SPI慢一点,协议比SPI复杂一点,


但是连线也比标准的SPI要少。


UART  UART: Universal Asynchronous


Receiver/Transmitter,通用异步接收/发送装置,UART是一


个并行输入成为串行输出的芯片,通常集成在主板上,多数是


16550AFN芯片。因为计算机内部采用并行数据,不能直接把数


据发到Modem,必须经过UART整理才能进行异步传输,其过程


为:CPU先把准备写入串行设备的数据放到UART的寄存器(临


时内存块)中,再通过FIFO(First Input First Output,先


入先出队列)传送到串行设备,若是没有FIFO,信息将变得杂


乱无章,不可能传送到Modem。
  它是用于控制计算机与串行设备的芯片。有一点要注意的


是,它提供了RS-232C数据终端设备接口,这样计算机就可以


和调制解调器或其它使用RS-232C接口的串行设备通信了。作


为接口的一部分,UART还提供以下功能:将由计算机内部传送


过来的并行数据转换为输出的串行数据流。将计算机外部来的


串行数据转换为字节,供计算机内部使用并行数据的器件使用


。在输出的串行数据流中加入奇偶校验位,并对从外部接收的


数据流进行奇偶校验。在输出数据流中加入启停标记,并从接


收数据流中删除启停标记。处理由键盘或鼠标发出的中断信号


(键盘和鼠标也是串行设备)。可以处理计算机与外部串行设


备的同步管理问题。有一些比较高档的UART还提供输入输出数


据的缓冲区,现在比较新的UART是16550,它可以在计算机需


要处理数据前在其缓冲区内存储16字节数据,而通常的UART是


8250。现在如果您购买一个内置的调制解调器,此调制解调器


内部通常就会有16550 UART。


什么是 UART
  UART是一种通用串行数据总线,用于异步通信。该总线双


向通信,可以实现全双工传输和接收。在嵌入式设计中,UART


用来与PC进行通信,包括与监控调试器和其它器件,如EEPROM


通信。 
  UART通信 
  UART首先将接收到的并行数据转换成串行数据来传输。消


息帧从一个低位起始位开始,后面是7个或8个数据位,一个可


用的奇偶位和一个或几个高位停止位。接收器发现开始位时它


就知道数据准备发送,并尝试与发送器时钟频率同步。如果选


择了奇偶,UART就在数据位后面加上奇偶位。奇偶位可用来帮


助错误校验。 
  在接收过程中,UART从消息帧中去掉起始位和结束位,对


进来的字节进行奇偶校验,并将数据字节从串行转换成并行。


UART也产生额外的信号来指示发送和接收的状态。例如,如果


产生一个奇偶错误,UART就置位奇偶标志。 
  数据方向和通信速度 
  数据传输可以首先从最低有效位(LSB)开始。然而,有些U


ART允许灵活选择先发送最低有效位或最高有效位(MSB)。 
  微控制器中的UART传送数据的速度范围为每秒几百位到1.


5Mb。例如,嵌入在ElanSC520微控制器中的高速UART通信的速


度可以高达1.1152Mbps。UART波特率还受发送和接收线对距离


(线长度)的影响。 
  目前,市场上有只支持异步通信和同时支持异步与同步通


信的两种硬件可用于UART。前者就是UART名字本身的含义,在


摩托罗拉微控制器中被称为串行通信接口(SCI);Microchip微


控制器中的通用同步异步收发器(USART)和在富士通微控制器


中的UART是后者的两个典型例子。UART是通用异步收发器(异


步串行通信口)的英文缩写,它包括了RS232、RS499、RS423


、RS422和RS485等接口标准规范和总线标准规范,即UART是异


步串行通信口的总称。


而RS232、RS499、RS423、RS422和RS485等,是对应各种异步


串行通信口的接口标准和总线标准,它规定了通信口的电气特


性、传输速率、连接特性和接口的机械特性等内容。实际上是


属于通信网络中的物理层(最底层)的概念,与通信协议没有


直接关系。而通信协议,是属于通信网络中的数据链路层(上


一层)的概念。 COM口是PC(个人计算机)上,异步串行通信


口的简写。由于历史原因,IBM的PC外部接口配置为RS232,成


为实际上的PC界默认标准。所以,现在PC机的COM口均为RS232


。若配有多个异步串行通信口,则分别称为COM1、COM2...


USART  USART:(Universal Synchronous/Asynchronous


Receiver/Transmitter)通用同步/异步串行接收/发送器 
  USART是一个全双工通用同步/异步串行收发模块,该接口


是一个高度灵活的串行通信设备。
  其主要特点如下:
  #全双工操作(相互独立的接收数据寄存器和发送数据寄


存器);
  #支持同步和异步操作;
  #同步操作时,可主机时钟同步,也可从机时钟同步;
  #独立的高精度波特率发生器,不占用定时/计数器;
  #支持5、6、7、8和9位数据位,1或2位停止位的串行数据


桢结构;
  #由硬件支持的奇偶校验位发生和检验;
  #数据溢出检测;
  #桢错误检测;
  #包括错误起使位的检测噪声滤波器和数字低通滤波器;
  #三个完全独立的中断,TX发送完成、TX发送数据寄存器


空、RX接收完成;
  #支持多机通信模式;
  #支持倍速异步通信模式。
  USART收发模块一般分为三大部分:时钟发生器、数据发


送器和接收器。控制寄存器为所有的模块共享。时钟发生器由


同步逻辑电路(在同步从模式下由外部时钟输入驱动)和波特


率发生器组成。发送时钟引脚XCK仅用于同步发送模式下,发


送器部分由一个单独的写入缓冲器(发送UDR)、一个串行移


位寄存器、校验位发生器和用于处理不同浈结构的控制逻辑电


路构成。使用写入缓冲器,实现了连续发送多浈数据无延时的


通信。接收器是USART模块最复杂的部分,最主要的是时钟和


数据接收单元。数据接收单元用作异步数据的接收。除了接收


单元,接收器还包括校验位校验器、控制逻辑、移位寄存器和


两级接收缓冲器(接收UDR)。接收器支持与发送器相同的桢


结构,同时支持桢错误、数据溢出和校验错误的检测。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第一个区别当然是名字: SPI(Serial Peripheral Interface:串行外设接口); I2C(INTER IC BUS:意为IC之间总线) 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总线,则需一个输入口,一个输出口。 第三,从第二点明显可以看出,SPIUART可以实现全双工,但I2C不行; 第四,看看牛人们的意见吧! wudanyu:I2C线更少,我觉得比UARTSPI更为强大,但是技术上也更加麻烦些,因为I2C需要有双向IO的支持,而且使用上拉电阻,我觉得抗干扰能力较弱,一般用于同一板卡上芯片之间的通信,较少用于远距离通信。SPI实现要简单一些,UART需要固定的波特率,就是说两位数据的间隔要相等,而SPI则无所谓,因为它是有时钟的协议。 quickmouse:I2C的速度比SPI慢一点,协议SPI复杂一点,但是连线也比标准的SPI要少。 1、UARTUSART两个别区说不出来,USART是新出的,不过区别在什么地方我也搞不清楚。UART就是两线,一根发送一根接收,可以全双工通信,线数也比较少。数据是异步传输的,对双方的时序要求比较严格,通信速度也不是很快。在多机通信上面用的最多。 2、SPI接口和上面UART相比,多了一条同步时钟线,上面UART的缺点也就是它的优点了,对通信双方的时序要求不严格不同设备之间可以很容易结合,而且通信速度非常快。一般用在产品内部元件之间的高速数据通信上面,如大容量存储器等。 3、I2C接口也是两线接口,它是两根线之间通过复杂的逻辑关系传输数据的,通信速度不高,程序写起来也比较复杂。一般单片机系统里主要用来和24C02等小容易存储器连接。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值