SPI、I2C、UART、USART串行总线协议区别:异步
第一个区别固然是名字:ui
SPI(Serial Peripheral Interface)串行外设接口;spa
I2C(IntericBus);设计
UART(Univeral Asynchronous Receiver Transmitter)通用异步收发器;调试
每二个区别在电气信号线上:接口
SPI总线由三条信号线组成:队列
一、串行时钟(SCLK)ip
二、串行数据输出(SDO)内存
三、串行数据输入(SDI)同步
SPI总线能够实现多个SPI设备互相链接,提供SPI串行时钟的SPI设备为SPI主机或主设备(Master),其余设备间能够实现全双工通讯,当有多个从设备时,还能够增长一条从设备选择线。若是用通用I/O口模拟SPI总线必需要有一个输出口(SDO),一个输入口(SDI),另外一个口则视实现的设备类型而定,若是要实现主从设备,则需输入输出口;若只实现主设备,则需输出口便可;若只实现从设备,则只需输入口便可。
I2C总线是双向的,两线(SCL、SDA)串行、多主控(Multi master)接口标准,具备总线仲裁机制,很是适合在器件之间进行近距离、非常常性的数据通讯。在它的协议体系中,传输数据时都会带上目的设备的设备地址,所以能够实现设备组网。若是用通用I/O口模拟I2C总线,并实现双向传输,则须要一个输入输出口(SDA),另外还需一个输出口(SCL)。(注:I2C资料了解得比较少,这里的描述可能很不完善)。
UART总线是异步串口,所以,通常比前两种同步的结构要复杂不少,通常由波持率产生器(产生的波特率等于传输波特率的16倍)、UART接收器、UART发生器组成。硬件上由两根线:一根用于发送,一根用于接收。显然若是用通用I/O模拟UART总线,则需一个输入口,一个输出口。
第3、从第二点明显能够看出,SPI和UART能够实现全双工,但I2C不行。
第4、看看牛人们的意见
wudanyu:I2C线更少,我以为比UART、SPI更为强大,可是技术上也更加麻烦些。由于I2C须要有双向I/O的支持,并且使用上拉电阻。我以为抗干扰能力较弱。通常用于同一板卡上的芯片之间的通讯,较少用于远距离通讯。SPI实现要简单一些。UART须要固定的波特率,就是说两位数据的间隔要相等。而SPI则无所谓,由于它是有时钟的协议。
quickmouse:I2C的速度比SPI慢一点协议比SPI复杂一点,可是连线也比标准的SPI要少。
UART:Universal Asynchronous Receiver / Transmitter:通用异步接收/发送装置。UART是一个并行输入成串行输出的芯片。一般集成在主板上,多数是16550AFN芯片。由于计算机内部采用并行数据,不能直接把数据发到Modem,必须通过UART整理才能进行异步传输:
其过程为:CPU先把准备写入串行设备的数据放到UART的寄存器(临时内存块)中,再经过FIFO(First Input First Output先入先出队列)传送到串行设备,如果没有FIFO,
信息将变得杂乱无章,不可能传送到Modem,它是用于控制计算机与串行设备的芯片,有一点要注意的是,它提供了RS-232C数据终端设备接口,这样计算机就能够和调制解调器或其它使用RS-232C接口的串行设备通讯了。做为接口的一部分UART还提供如下功能:将由计算机内部传送过来的并行数据转换为输出的串行数据流将计算机外部来的串行数据转换为字节,供计算机内部使用并行数据的器件使用,在输出的串行数据流中加入奇偶检验位,并对从外部接收的数据流进行奇偶校验。在输出数据流中加入启停标记,并从接收数据流中删除启停标记。处理同键盘或鼠标发出的中断信号(键盘和鼠标也是串行设备)。能够处理计算机与外部串行设备的同步管理问题,有一些比较高档的UART还提供输入输出数据的缓冲区,如今比较新的UART16550。它能够在计算机须要处理数据前在其缓冲区内存储16字节数据,而一般的UART是8250。如今若是您购买了一个内置的调制解调器,此调制解调器内部一般就会有16550UART。
UART是一种通用串行数据总线,用于异步通讯,该总线双向通讯,能够实现全双工传输和接收。在嵌入式设计中,UART用来与PC进行通讯。包括与监控调试器和其它器件,如EEPROM通讯UART通讯。
UART首先将接收到的并行数据转换成串行数据来传输,消息帧以一个低位起始位开始,后面是7个或8个数据位,一个可用的奇偶位和一个或几个高位中止位。接收器发现开始位时它就知道数据准备发送,并尝试与发送器时钟频率同步。若是选择了奇偶。UART就在数据位后面加上奇偶位。奇偶可用来帮助错误检验。在接收过程当中,UART从消息帧中去掉超始位和结束位,对进来的字节进行奇偶校验,并将数据字节从串行转换成并行,UART也产生额外的信号来指示发送和接收的状态。例如:若是产生一个奇偶错误,UART就置位奇偶标志。
数据方向和通讯速度
数据传输能够首先从最低有效位(LSB)开始,而后有些UART容许灵活选择先发送最低有效位或最高有效位(MSB)。
微控制器中的UART传送数据的速度范围为每秒几百位到1.5Mb。例如:嵌入在ElanSc520微控制器中的高速UART通讯的速度能够高达1.152Mbps。UART通讯的速度能够高达1.152Mbps。UART的波特率还受发送和接收线对距离(线长度)的影响。目前,市场上有支持异步通讯和同时支持异步与同步通讯的两种硬件可用于UART,前者就是UART名字自己的含义,在摩托罗拉微控制器中被称为串行通讯接口(SCI);Microchip微控制器中的通用同步异步收发器(USART)和在富士通微控制器中的UART是后者的两个典型例子。
UART是通用异步收发器(异步串行通讯口)的英文缩写,它包括了RS23二、RS49九、RS42三、RS422和RS485等接口标准规范和总线标准规范,即UART是异步串行通讯口的总结,而RS23二、RS49九、RS42三、RS422和RS485等,是对应各类异步串行通讯口的接口标准和总线标准。因此,如今PC机的COM口均为RSS232。若配有各个异步串行通讯口则分别称为COM一、COM2...
USART USART:(Universal Synchronous/AsynchronousReceiver/Transmitter)通用同步/异步串行接收/发送器USART是一个全双工通用同步/异步串行收发模块,该接口 是一个高度灵活的串行通讯设备。(和UART有区别)
其主要特色以下:
#全双工操做(相互独立的接收数据寄存器和发送数据寄存器);
#支持同步和异步操做;
#同步操做时,可主机时钟同步,也可从机时钟同步;
#独立的高精度波特率发生器,不占用定时/计数器;
#支持五、六、七、8和9位数据位,1或2位中止位的串行数据桢结构;
#由硬件支持的奇偶校验位发生和检验;
#数据溢出检测;
#桢错误检测;
#包括错误起使位的检测噪声滤波器和数字低通滤波器;
#三个彻底独立的中断,TX发送完成、TX发送数据寄存器空、RX接收完成;
#支持多机通讯模式;
#支持倍速异步通讯模式。
USART收发模块通常分为三大部分:时钟发生器、数据发送器和接收器。控制寄存器为全部的模块共享。时钟发生器由同步逻辑电路(在同步从模式下由外部时钟输入驱 动)和波特率发生器组成。发送时钟引脚XCK仅用于同步发送模式下,发送器部分由一个单独的写入缓冲器(发送UDR)、一个串行移位寄存器、校验位发生器和用于处理 不一样浈结构的控制逻辑电路构成。使用写入缓冲器,实现了连续发送多浈数据无延时的通讯。接收器是USART模块最复杂的部分,最主要的是时钟和数据接收单元。数据接 收单元用做异步数据的接收。除了接收单元,接收器还包括校验位校验器、控制逻辑、移位寄存器和两级接收缓冲器(接收UDR)。接收器支持与发送器相同的桢结构,同时 支持桢错误、数据溢出和校验错误的检测。