UART,IIC,SPI三兄弟的前生今世。
前言:在讲三兄弟之前,我不知道有没有人对UART和USART这俩人长得如此相像产生过强烈地好奇心。如果有的话, 三兄弟的事我们权且搁一会儿,先来聊聊UART和USART他们。
UART:universal asynchronous receiver and transmitter 即:通用异步收发器;
- UART是一种通用串行数据总线,用于异步通信。该总线双向通信,可以实现全双工传输和接收。直白一点讲,UART就是我们在嵌入式开发领域常说的串口。但是,UART是有别于IIC和SPI的,UART是一种硬件器件,常被集成在PC上或者单片机上,用用于主机与辅助设备通信,如汽车音响与外接AP之间的通信,与PC机通信包括与监控调试器和其它器件,如EEPROM通信。它将要传输的资料在串行通信与并行通信之间加以转换。作为把并行输入信号转换成串行输出信号的芯片,UART通常被集成于其他通信接口的连结上。
- UART用一条传输线将数据一位一位地顺序传送,以字符为单位,通信中两个字符间地时间间隔多少不固定,然而在同一个字符中地两个相邻位地时间是固定的。数据传输速率用波特率来表示,指单位时间内载波参数变化的次数或者每秒钟传送的二进制位数,如每秒钟传送240个字符, 而每个字符包含10位(1个起始位, 1个停止位, 8个数据位), 这时的波特率为2400Bd。
- 具体实物变现为独立的模块化芯片,或作为集成于微处理器中的周边设备。一般是RS232C规格的,与类似Maxim的MAX232之类的标准信号幅度变换芯片进行搭配,作为连接外部设备的接口。在UART上追加同步方式的序列信号变换电路的产品,被称为USART。
USART:universal synchronous asynchronous receiver and transmitter 即:通用同步/异步串行接收/发送器,该接口是一个高度灵活的串行通信设备。
结构组成
USART收发模块一般分为三大部分:时钟发生器,数据发送器和数据接收器。控制寄存器为所有的模块共享。
时钟发生器由同步逻辑电路(在同步从模式下由外部时钟输入驱动)和波特率发生器组成,发送时钟引脚XCK仅用于同步发送模式下。
发送器部分由一个单独的写入缓冲器(发送UDR)、一个串行移位寄存器、校验位发生器和用于处理不同桢结构的控制逻辑电路构成。使用写入缓冲器,实现了连续发送多帧数据无延时的通信。
接收器是USART模块最复杂的部分,最主要的是时钟和数据接收单元。数据接收单元用作异步数据的接收。除了接收单元,接收器还包括校验位校验器、控制逻辑、移位寄存器和两级接收缓冲器(接收UDR)。接收器支持与发送器相同的帧结构,同时支持帧错误、数据溢出和校验错误的检测。
总之:UART与USART都是单片机上的串口通信,他们之间的区别如下:
首先从名字上看:
UART:universal asynchronous receiver and transmitter通用异步收/发器
USART:universal synchronous asynchronous receiver and transmitter通用同步/异步收/发器
从名字上可以看出,USART在UART基础上增加了同步功能,即USART是UART的增强型,事实也确实是这样。但是具体增强到了什么地方呢?
其实当我们使用USART在异步通信的时候,它与UART没有什么区别,但是用在同步通信的时候,区别就很明显了:大家都知道同步通信需要时钟来触发数据传输,也就是说USART相对UART的区别之一就是能提供主动时钟。如STM32的USART可以提供时钟支持ISO7816的智能卡接口。
SPI
是motorala公司开发的一种同步串行通信协议,全双工通信方式,比IIC速度要快,可以达到几Mbps。存在主从设备,SPI用片选信号选择从机(四根线,SDO,SDI,SCLK,SS)。主要应用在EEPROM,FLASH以及实时时钟,AD转换器等。由于SPI本身采用的是具有时钟协议的通信协议,因此它并不需要设定相关波特率,要求每位数据之间的时间间隔要相等。(EEPROM全称为电可擦除可编程只读存储器,狭义的EEPROM的特点是可以随机访问和修改任何一个字节,可以往每一个bit中写入0或者1,性能好,成本高。而flash属于广义的EEPROM,也是电可擦除的rom。FLASH做的改进就是擦除时不再以字节为单位,而是以块为单位,一次简化了电路,数据密度更高,降低了成本,上M的rom一般都是flash)
IIC(SDA,SCLK)
存在主从设备,采用地址来选择从机。7位的IIC总线可以挂载127个地址不同的IIC从设备,0号“设备”作为设置读写操作地址(7位寻址,IIC总线规范规定,标准模式下IIC,从机地址为7位长,其次是读写位),在物理结构上,IIC系统是由一条串行时钟线(SCLK)以及一条串行数据总线(SDA}。主机按一定的通信协议向从机寻址和进行信息传输,在数据传输时主机初始化一次数据传输,主机使数据在SDA线上传输的同时还通过SCL线传输时钟信号,信息传输的对象和方向以及信息传输的开始和终止均由主机决定。每一个器件都有一个唯一的地址,而且可以是单接受的器件(例如:LCD驱动器)或者可以接受也可以发送的器件(存储器)。发送器可以在主模式下或从模式下操作,这取决于芯片是否必须启动数据的传输还是仅仅被寻址。
IIC有一下突出特征
(1)主设备+从设备
#1.分主设备和从设备。通信由主设备发起和主导,从设备只是按照IIC时序协议被动的接受主设备的通信。
#2.谁是主设备,由通信双方来决定(IIC协议并无规定)
(2)可以多个设备挂在一条总线上(从设备地址)
#1.主设备负责调度总线,决定某一时间和哪个从设备通信。
#2.同一时刻,只能有一个从设备和主设备通信,其他从设备处于冬眠状态。
#3.每一个IIC设备在通信中都有一个IIC从设备地址,共7个bit,广播地址全0.他是从设备本身固有属性。通信时主设备需要知道从设备的地址,然后在通信中通过地址来甄别是不是自己要找的那个从设备。这个地址是此设备唯一的,并不是全球唯一的。
#4.系统中可能有多种芯片,为此addr分为固定部分和可编程部分,细节视芯片而定,看datasheet。理论上7位有128位地址,然而除去保留地址如广播地址0x00等,数量要少于128个,且目标准协议里预见了地址的局限性,扩充10位地址的概念。
#5.对于IIC可以挂载多少个设备的问题:对于同一个地址的设备,在不进行地址扩充(片选)的情况下只能挂载一个,但是进行地址扩充的话,7位addr可以有128个片选地址,对于不同设备来说,标准协议里面没有规定限制具体个数的多少,这个由线路布线情况,软件情况以及工作模式确定。对于标准模式,只要总线上负载电容不超过400pf。不超过芯片的负载能力即可。
#。SDA传输数据是大端传输,是以字节为单位的,每次传输的有效数据都是1个字节(8位)。
查看9道真题和解析
顺丰集团工作强度 276人发布
