UART,IIC,SPI
UART和USART:
USART:通用同步异步收发器(Universal Synchronous Asynchronous Receiver and Transmitter)
UART:通用异步收发器(Universal Asynchronous Receiver and Transmitter)
同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。
异步是指:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式。
同步是阻塞模式,异步是非阻塞模式。
UART是全双工串行异步通信,不需要时钟线,需要两根信号线Tx和Rx
PC和单片机通信需要加电平转换芯片将TTL(单片机)转RS232(PC)
UART的传输过程:
接收过程:Rx接收数据,经过编解码模块,一位一位放入接收移位寄存器,然后一次性写入接收数据寄存器,CPU就可以从接收数据寄存器读取了
发送过程:CPU将数据写入发送数据寄存器,然后发送数据寄存器一次性发送给发送移位寄存器,然后根据波特率将数据一位一位发送出去。
大多情况下用于调试
IIC:
IIC:适合多主机多从机间的通信。半双工同步串行通信,需要一根时钟线SCL和一根数据线SDA。是一个支持多设备的总线(总线就是多设备共用信号线),通过地址访问设备
数据协议:
起始和结束信号:
SCL为高电平时,SDA由高变低是起始信号。
SCL为高电平时,SDA由低变高是终止信号。
传输过程中SCL为高电平时SDA数据有效,SCL为低电平时进行SDA高低切换
主机写数据到从机:
起始信号----主机发送地址和写信号----从机应答----主机发送数据-----从机应答----。。。----主机发送数据-----从机非应答----结束信号
主机由从机读数据:
起始信号----主机发送地址和读信号----从机应答----从机发送数据----主机应答----。。。从机发送数据-------主机非应答----结束信号
上面两个过程可以复合使用
总线空闲条件
IIC总线上设备都释放总线(发出传输停止)后,IIC总线根据上拉电阻变成高电平,SDA SCL都是高电平。
参考:https://blog.****.net/MoLiYw/article/details/101103224
SPI:
SPI:(Serial Peripheral Interface串行外设接口),串行外设接口全双工同步串行通信,传输速率高,只支持单主机,采用主从控制方式
使用四条线:
SCK:时钟信号 -> 主机产生,速率受限低速设备
SS(CS/NSS):片选 -> 低电平有效,同一时刻只允许一个设备连接
MISO(SDI):主设备输入/从设备输出
MOSI(SDO):主设备输出/从设备输入
通过片选选择从机设备:
多从机与主机连接时,共用SCK.MISO,MOSI
每个从机单独有一根SS线,主机将SS线拉低即选中该设备。
起始信号:SS线置低
终止信号:SS线拉高
CPOL/CPHA和通讯模式:
SPI有四种通讯模式,由CPOL(时钟极性)和CPHA(时钟相位共同决定)
CPOL时钟极性决定SCK线在空闲时的状态:
CPOL=0,SCK在空闲状态为低电平
CPOL=1,SCK在空闲状态为高电平
CPHA时钟相位决定数据的采样时刻:
CPHA=0,MISO和MOSI线上的数据在SCK时钟线的“奇数边沿”被采样
CPHA=1,MISO和MOSI线上的数据在SCK时钟线的“偶数边沿”被采样
举例:CPHA=0,SCK=0/1的两种情模式
总结:
IIC和SPI的不同:
IIC | SPI |
---|---|
半双工 | 全双工 |
多主机总线 | 单主机总线 |
通过地址选择设备 | SS片选 |
传输速度比SPI慢 | |
采样方式,空闲状态电平等细节不同 |