UART(Universal Asynchronous Receiver Transmitter)
通用异步收发器,它是一种总线协议,比如主控制器要和其他的芯片或者其他的外围设备进行通信,这时我们就可以使用UART总线。(毫不夸张地说,UART是嵌入式领域使用最多的一种通信协议)。
UART(通用异步收发器),是一种通用的串行、异步通信总线,该总线有两条数据线,可以实现全双工的发送和接收,在嵌入式系统中常用于主机与辅助设备之间的通信。
概念:并行、串行;单工、半双工、全双工。
波特率:用于描述UART通信时的通信速度,其单位为bps(bit per second),即每秒传送的bit数量。
注意:数据线空闲的时候被置位高电平。串行发送数据的时候从低位到高位依次发送。每次只能发一个字节,字节之间要有一个空闲位,防止时钟累计误差。
UART控制器:
一般情况下处理器中都会集成UART控制器,我们使用UART进行通信时只需要对其内部相关的寄存器进行设置即可。
IIC
IIC是Philips公司在八十年代初推出的一种串行、半双工总线,主要用于近距离、低速的芯片之间的通信;IIC总线有两根双向的信号线,一根数据线(SDA)用于收发数据,一根时钟线(SCL)用于通信双方时钟的同步;IIC总线硬件结构简单,成本较低,因此在各个领域得到了广泛应用。
IIC总线是一种多主机总线,连接在IIC总线上的器件分为主机和从机,主机有权发起和结束一次通信,而从机只能被主机呼叫。当总线上有多个主机同时启用总线时,IIC也具备冲突检测和仲裁的功能来防止错误的产生。每个连接到IIC总线上的器件都有一个唯一的地址(7bit),且每个器件都可以作为主机也可以作为从机(同一时刻只能有一个主机),总线上的器件增加和删除不影响其他器件正常工作;IIC总线在通信时总线上发送数据的器件为发送器,接收数据的器件为接收器。
IIC通信过程:
- 主机发送起始信号启用总线。
- 主机发送一个字节数据,指明从机地址和后续字节的传输方向
- 被寻址的从机发送应答信号回应主机
- 发送器发送一个字节数据
- 接收器发送一个应答信号回应发送器
- …(循环步骤4、5)
- 通信完成后主机发送停止信号释放总线
IIC总线的寻址方式:
- IIC总线上传送的数据时广义的,既包括地址,又包括真正的数据。
- 主机在发送起始信号后必须发送一个字节的数据,该数据的高七位是要与之通信的从机地址,最低位表示后续字节的传送方向。“0”表示主机发送数据,“1”表示主机接收数据,总线上所有的从机接收到该字节数据后都将这七位地址与自己的地址比较,如果相同则认为自己被主机寻址,人后再根据第8位将自己定为发送器或者接收器。
起始信号和停止信号
注:SCL和SDA在空闲时都是高电平。 - SCL为高电平时,SDA由高变低表示起始信号
- SCL为高电平时,SDA由低变高表示终止信号
- 起始信号和终止信号都是由主机发出,起始信号产生后总线处于占用状态,终止信号产生后总线处于空闲状态。
字节传送与应答:
IIC总线通信时每个字节为8位长度,数据传送时,由高位到低位(UART是由低位到高位)依次发送,发送器发送完后接收器必须发送一位应答位(应答位为低电平)来回应发送器,即一帧共有9位。
IIC同步信号:
IIC总线在进行数据传送时,当SCL线为低电平期间,发送器向数据线上发送一位数据,在此期间数据线上的信号允许发生改变。当SCL线为高电平期间,接收器从数据线上接收一位数据,在此期间数据线上的信号不允许发生改变。通过SCL(时钟线)来协调发送方与接收方之间的发送与接收。
典型IIC时序:(A表示应答,非A表示不应答)
1. 主机向从机发送数据:
上图中,首先主机发送开始信号S,然后发送从机地址和传输方向位(0表示主机位发送器),这时结束可能有两种情况,一种是发送器主动停止发送,另一种是接收器不想继续接收,那么接收器不会再回复应答信号,主机收不到应答信号也会发送停止信号。
2. 从机向主机发送数据:
情况和主机向从机发送数据类似。
3. 从机向主机发送数据:
按照常规在IIC一次通信过程中一旦确定了通信方向(主机向从机发送或者从机向主机发送)就不允许改变,但是如上图所示,主机发送开始信号后,从机地址后跟着“0”,代表由主机向从机发送数据;发送结束后如果从机有数据想发给主机,但这时发送方向不允许改变,这时可以让主机再发送一次开始信号,此时从机地址后跟一位“1”就可以实现主机作为接收器,从机作为发送器。值得注意的是在前后两次开始信号之间没有结束信号,因为如果主机发送结束信号,那么主线的控制权可能被其它主机夺走,因此中间没有发送停止信号。
SPI(Serial Peripheral Interface)
SPI(串行外设接口)是一种高速的,全双工的,同步的 串行通信总线;SPI采用主从工作方式,一般有一个主设备和一个或多个从设备;SPI需要至少4根线,分别是MISO(主设备输入,从设备输出),MOSI(主设备输出,从设备输入),SCLK(时钟),CS(片选);SPI使用引脚较少且布线方便,所以越来越多的芯片集成了这种通信协议。
寻址方式:
当有多个从设备时,主设备要和某个从设备通信,需要先向对应从设备的片选线上发送使能信号(高电平或者低电平,根据从机而定)
SPI总线在进行数据传送时,先传送高位,后传送低位;一个字节传送完成后即可开始下一位的传送(UART传送完一个字节后有一个空闲位,IIC发送完一个字节后会有一个应答位);SPI总线采用同步方式工作,时钟线上升沿或下降沿时发送器向数据线上发送数据,在紧接着的下降沿或上升沿时接收器从数据线上读取数据,完成一位数据传送,八个时钟周期即可完成一个字节数据的传送。
极性和相位:
SPI总线有四种不同的工作模式,取决于极性(CPOL)和相位(CPHL)。
CPOL表示SCLK空闲时的状态:
- CPOL = 0 , 空闲时SCLK为低电平
- CPOL = 1 , 空闲时SCLK为高电平
CPHA表示采样时刻:
- CPHA = 0 ,每个周期的第一个时钟沿采样
- CPHA = 1 ,每个周期的第二个时钟沿采样
CPOL = 0 ,CPHA = 0
CPOL = 0 ,CPHA = 1
CPOL = 1 ,CPHA = 0
CPOL = 1 ,CPHA = 1
对于极性和相位需要说明的是,对于一个特定的从设备来说,一般在出厂是就会将其设计为某种特定的工作模式;我们在使用该设备时就必须保证主设备的工作模式和该从设备的工作模式保持一致,否则无法进行通信;所以一般我们需要对主设备的CPOL和CPHA进行配置。
IIC和SPI的异同
相同点:
- 均采用串行、同步的方式
- 均采用TTL电平,因此传输距离近,应用场景类似
- 均采用主从的工作方式
不同点:
- IIC为半双工,SPI为全双工
- IIC有应答机制,SPI无应答机制
- IIC通过广播从机地址来寻址,SPI通过向对应从机发送使能信号
- IIC时钟极性和时钟相位固定(SCL低电平时发送器发送一位数据,SCL高电平时接收器接收一位数据)。SPI时钟极性和时钟相位可以调节。