目录
1、IIC(Inter-Integrated Circuit ,集成电路总线):低速,半双工,同步串行总线
2、UART(Universal Asynchronous Receiver and Transmitter,通用异步收/发器):全双工,异步串行总线
3、SPI(Serial Peripheral Interface,串行外设接口):高速,全双工,同步串行总线
一、通信方式
通信方式是指通信双方之间的工作方式或者信号传输方式。
根据数据传输方式可以分为串行通信和并行通信。
串行通信又称为点对点通信。
串行通信根据数据同步方式分为同步传送和异步传送。
串行通信根据数据传送方向与时间的关系可以分为单工、半双工、全双工通信。
通信方式 | 根据数据传输方式 | 串行通信 | 数据同步方式 | 同步传送 | SPI、IIC |
异步传送 | UART | ||||
数据传输方向与时间的关系 | 单工通信 | ||||
半双工通信 | IIC | ||||
全双工通信 | SPI、UART | ||||
并行通信 |
单工、半双工、双工通信方式区别:
(1)单工:数据传输只支持数据在一个方向上传输;在同一时间只有一方能接受或发送信息,不能实现双向通信,举例:电视,广播。
(2)半双工:数据传输允许数据在两个方向上传输,但是,在某一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信;在同一时间只可以有一方接受或发送信息,可以实现双向通信。举例:对讲机。
(3)全双工:数据通信允许数据同时在两个方向上传输,因此,全双工通信是两个单工通信方式的结合,它要求发送设备和接收设备都有独立的接收和发送能力;在同一时间可以同时接受和发送信息,实现双向通信,举例:电话通信。
二、IIC、UART、SPI总线介绍
1、IIC(Inter-Integrated Circuit ,集成电路总线):低速,半双工,同步串行总线
(1)传输速率:
标准模式(100 kbps)、快速模式(400 kbps)和高速模式(3.4 Mbps),另外一些变种实现了低速模式(10 kbps)和快速+模式(1 Mbps)。
(2)总线构成:
SDA(数据线)和SCL(时钟线),可以发送和接收数据,并且在硬件上都需要接一个上拉电阻到VCC。
(3)通讯状态:
IIC总线在通信的过程中一共有一下几种状态:
<1> 空闲状态:SDA 和 SCL 两条信号线同时处于高电平。
<2> 起始状态:SCL为高电平,SDA由高电平到低电平。起始信号由主控器发起,发起前处于空闲状态。
<3> 结束状态:SCL为高电平,SDA由低电平到高电平。结束信号由主控器发起,发起后处于空闲状态。
<4> 有效的数据位传输
在 IIC 总线上传送的每一位数据都有一个时钟脉冲相对应(或同步控制),即在 SCL 串行时钟的配合下,数据在 SDA 上从高位向低位依次串行传送每一位的数据。
进行数据传送时,在 SCL 呈现高电平期间,SDA 上的电平必须保持稳定,低电平为数据 0,高电平为数据 1。只有在 SCL 为低电平期间,才允许 SDA 上的电平改变状态。
<5> 应答信号与非应答信号
I2C 总线上的所有数据都是以 8 位字节传送的,发送器(主机)每发送一个字节,就在第9个时钟脉冲期间释放数据线,由接收器(从机)反馈一个应答信号。应答信号为低电平时,规定为有效应答位(ACK简称应答位),表示接收器已经成功地接收了该字节;应答信号为高电平时,规定为非应答位(NACK),一般表示接收器接收该字节没有成功。对于反馈有效应答位 ACK 的要求是,接收器在第 9 个时钟脉冲之前的低电平期间将 SDA 线拉低,并且确保在该时钟的高电平期间为稳定的低电平。
有效应答位:
非应答位:
对非应答位(NACK)还要特别说明的是,还有以下四种情况IIC通信过程中会产生非应答位:
(1)接收器(从机)正在处理某些实时的操作无法与主机实现IIC通信的时候,接收器(从机)会给主机反馈一个非应答位(NACK)
(2)主机发送数据的过程中,从机无法解析发送的数据,接收器(从机)也会给主机反馈一个非应答位(NACK)
(3)主机发送数据的过程中,从机无法再继续接收数据,接收器(从机)也会给主机反馈一个非应答位(NACK)
(4)主机从从机中读取数据的过程中,主机不想再接收数据,主机会给从机反馈一个非应答位(NACK),注意,这种情况是主机给从机反馈一个非应答位(NACK)
(4)写过程:
<1>主机发送一个起始信号和从机的设备地址(7位)+ ‘0’(写)给从机,从机发送有效应答位‘0’
<2>主机会发送想要写入的寄存器地址,从机发送有效应答位‘0’
<3>主机发送数据给从机,从机发送有效应答位‘0’
<4>主机发送一个停止信号结束发送过程
(5)读过程:
<1>主机发送一个起始信号和从机的设备地址(7位)+ ‘0’(写)给从机,从机发送有效应答位‘0’
<2>主机会发送想要写入的寄存器地址,从机发送有效应答位‘0’
<3>主机会给从机再次发送一次起始信号,接着把IIC从机的7位设备地址后面添一个‘1’发送给从机,从机发送有效应答位‘0’
<4>从机继续占用SDA信号线给主机发送寄存器中的数据。
<5>发送完毕以后,主机再次占用SDA信号线发送一个非应答信号‘1’给从机,主机发送一个停止信号给从机结束整个读数据的过程。
2、UART(Universal Asynchronous Receiver and Transmitter,通用异步收/发器):全双工,异步串行总线
(1)传输速率:
<1> RS-232(全双工):3线,只允许一对一通讯。传输速率一般不超过20Kbps,速率低,抗干扰能力差,RS-232C能传输的最大距离不超过15m。
<2> RS-422(全双工):传输速率最高可到10Mbit/s,传输距离延长到4000英尺(速率低于100Kbit/s时),并允许在一条平衡总线上连接最多10个接收器。RS-422 有4根信号线:两根发送、两根接收。
<3> RS-485(半双工,差分信号):允许多个发送器连接到同一条总线上,最多32个接收器。增强了驱动能力和冲突保护特性,扩展了总线共模范围。最高传输速率10Mbps,抗干扰能力强,可以传距离1.5km。在很短的距离下才能获得最高速率传输。一般100米长双绞线最大传输速率仅为1Mbps。
(2)总线构成:
GND(地线),TXD(发送数据),RXD(接收数据);不需要时钟线
(3)协议格式:
空闲位:UART协议规定,当总线处于空闲状态时信号线的状态为‘1’即高电平
起始位:开始进行数据传输时发送方要先发出一个低电平’0’来表示传输字符的开始。因为空闲位一直是高电平所以开始第一次通讯时先发送一个明显区别于空闲状态的信号即为低电平。
数据位:起始位之后就是要传输的数据,数据可以是5,6,7,8,9位,构成一个字符,一般都是8位。先发送最低位最后发送最高位。
奇偶校验位:
数据位传送完成后,要进行奇偶校验,校验位其实是调整个数,串口校验分几种方式:
1.无校验(no parity)
2.奇校验(odd parity):如果数据位中’1’的数目是偶数,则校验位为’1’,如果’1’的数目是奇数,校验位为’0’。
3.偶校验(even parity):如果数据为中’1’的数目是偶数,则校验位为’0’,如果为奇数,校验位为’1’。
4.mark parity:校验位始终为1
5.space parity:校验位始终为0
停止位:数据结束标志,可以是1位,1.5位,2位的高电平。
波特率:数据传输速率使用波特率来表示,单位bps(bits per second),常见的波特率9600bps,115200bps等等,其他标准的波特率是1200,2400,4800,19200,38400,57600
3、SPI(Serial Peripheral Interface,串行外设接口):高速,全双工,同步串行总线
(1)传输速率:
SPI没有官方化,速率不统一,根据器件不同传输速率不一,有几M,十几M的,也有几十M的,比I2C速度快。
(2)总线构成:
SCLK(时钟信号), MOSI/SDO(主设备输出,从设备输入), MISO/SDI(主设备输入,从设备输出), CS/SS(片选信号)
(3)SPI四种工作模式:
四种模式是通过 “时钟极性 CPOL” 和 “时钟相位 CPHA” 的电平来实现和区分的。
- “时钟极性 CPOL” 决定总线空闲时SCLK的电平状态。
- “时钟相位 CPHA” 决定数据开始采样时刻。
SPI模式 | CPOL | CPHA | 空闲时SCLK时钟电平 | 采样时刻 |
0 | 0 | 0 | 低电平 | 奇数边沿(1、3、5……) |
1 | 0 | 1 | 低电平 | 偶数边沿(2、4、6……) |
2 | 1 | 0 | 高电平 | 奇数边沿(1、3、5……) |
3 | 1 | 1 | 高电平 | 偶数边沿(2、4、6……) |
(4)SPI通信协议:
- 起始信号:标号 ①,NSS 信号线由高变低。
- 停止信号:标号 ⑥,NSS 信号线由低变高。
- 数据有效性:标号② ③ ④ ⑤;MOSI 及 MISO 的数据在 SCK 的上升沿期间变化输出,在 SCK 的下降沿时被采样。在 SCK 的每个时钟周期传输一位数据,且数据输入输出是同时进行的。一般采用MSB先行模式。
参考资料:
1、https://blog.csdn.net/hezhanran/article/details/104791063/
2、https://blog.csdn.net/weixin_39900736/article/details/111115542
3、https://blog.csdn.net/Rocher_22/article/details/116586911
4、https://blog.csdn.net/sternlycore/article/details/85244515
5、https://blog.csdn.net/qq_38351824/article/details/104108162