原创 从大体上了解UART,I2C,SPI

2011-8-4 15:28 1629 9 9 分类: MCU/ 嵌入式

 UART,I2C,SPI 这三种通讯协议非常常用。很多人都用得很熟练的,可是对它们的概念,区别,特点都熟练掌握的人不多。我整理了一下网上牛人的说法,还有书本上的资料。

大概总结如下:

 

SPI(Serial Peripheral InteRFace:串行外设接口)

I2C(INTER IC BUS)

UART(Universal Asynchronous Receiver Transmitter:通用异步收发器)

 

基本区别:

UART:通用异步串行口。按照标准波特率完成双向通讯,速度慢。速度最慢。可以实现全双工。

I2C:一种串行传输方式,2线接口,网上可找到其通信协议和用法的。速度居中。不可以实现全双工。

SPI:高速同步串行口。3线接口,收发独立、可同步进行。速度最快。可以实现全双工。

 

详细区别:

UART:

UART是用于控制计算机与串行设备的芯片。有一点要注意的是,它提供了RS-232C数据终端设备接口,这样计算机就可以和调制解调器或其它使用RS-232C接口的串行设备通信了。作为接口的一部分,UART还提供以下功能:

将由计算机内部传送过来的并行数据转换为输出的串行数据流。将计算机外部来的串行数据转换为字节,供计算机内部使用并行数据的器件使用。在输出的串行数据流中加入奇偶校验位,并对从外部接收的数据流进行奇偶校验。在输出数据流中加入启停标记,并从接收数据流中删除启停标记。处理由键盘或鼠标发出的中断信号(键盘和鼠票也是串行设备)。可以处理计算机与外部串行设备的同步管理问题。有一些比较高档的UART还提供输入输出数据的缓冲区,现在比较新的UART16550,它可以在计算机需要处理数据前在其缓冲区内存储16字节数据,而通常的UART8250。现在如果您购买一个内置的调制解调器,此调制解调器内部通常就会有16550 UART

UART总线是异步串口,因此一般比前两种同步串口的结构要复杂很多,一般由波特率产生器(产生的波特率等于传输波特率的16)UART接收器、UART发送器组成,硬件上由两根线,一根用于发送,一根用于接收。

显然,如果用通用IO口模拟UART总线,则需一个输入口,一个输出口。当然,这种情况比较少见。

 

I2C:

能用于替代标准的并行总线,能连接的各种集成电路和功能模块。I2C是多主控总线,所以任何一个设备都能像主控器一样工作,并控制总线。总线上每一个设备都有一个独一无二的地址,根据设备它们自己的能力,它们可以作为发射器或接收器工作。多路微控制器能在同一个I2C总线上共存。

I2C总线是双向、两线(SCLSDA)、串行、多主控(multi-master)接口标准,具有总线仲裁机制,非常适合在器件之间进行近距离、非经常性的数据通信。在它的协议体系中,传输数据时都会带上目的设备的设备地址,因此可以实现设备组网。

     如果用通用IO口模拟I2C总线,并实现双向传输,则需一个输入输出口(SDA),另外还需一个输出口(SCL)

 

     SPI总线由三条信号线组成:串行时钟(SCLK)、串行数据输出(MOSI)、串行数据输入(MISO)SPI总线可以实现多个SPI设备互相连接。提供SPI串行时钟的SPI设备为SPI主机或主设备(Master),其他设备为SPI从机或从设备(Slave)。主从设备间可以实现全双工通信,当有多个从设备时,还可以增加一条从设备选择线,实现四线。

     如果用通用IO口模拟SPI总线,必须要有一个输出口,一个输入口,另一个口则视实现的设备类型而定,如果要实现主从设备,则需输入输出口,若只实现主设备,则需输出口即可,若只实现从设备,则只需输入口即可。

 

常见应用:

UARTMAX3232MAX232 电平转换芯片;MCU与电脑通讯;一些MCU都支持串口下载方式。

I2C:我就知道是24C02这一类芯片

SPI:学单片机的时候都用过的TCL549;一般的LCD控制器接口;SD卡的SPI模式;NRF24L01模块;AT45DB161D这些SPI FLASH器件;

 

三者都是通信协议,由于协议不同,决定了设备不同。针对不同的场合,我们要选择不同的协议。针对不同的设备,我们要使用相应的协议。

文章评论0条评论)

登录后参与讨论
我要评论
0
9
关闭 站长推荐上一条 /2 下一条