目录
1. 一线制协议
1.1 什么是一线制协议?
一线协议是串行半双工异步电平信号通信协议。
定义:主机和从机通过一根数据线进行通信,在一条总线上可以挂多个器件。
特点:
- 没有相应的时钟线,所以是异步通信。
- 只有一根总线,所以是串行传输数据。
- 这根总线既可以传输时钟又可以传输数据,可以双向传输,但是要分时,所以是半双工通信。
- 有参考电平线(GND),所以是电平信号。
- 单总线上所有的命令或数据的发送都是遵循低位先发送的原则(LSB小端序)
1.2 通信过程
1)初始化
初始化过程由主机发送复位脉冲和从机发送应答脉冲组成。
主机拉低总线480-960ns产生复位脉冲,然后释放总线,进入接收模式。主机释放总线时,产生上升沿,从机再检测到上升沿之后,保持高电平15-60ns,然后再拉低总线60~240us产生应答脉冲。主机接收从机的应答脉冲表示从机准备完毕,开始通信。
如下图:(引用网络图片)
2)写间隙(写0间隙和写1间隙)
所有的写间隙至少需要60us,并且两次独立的写间隙至少需要1us的恢复时间,两种写间隙始于主机拉低总线。在写间隙开始的15~60us期间,单总线器件(从机)采样总线电平状态。如果为高电平,则写入1,如果为低电平,则写入0。
写1时,主机要先将数据线拉低,然后在写间隙开始后的15us内将数据线拉高直至时间结束
写0时,主机必须要将数据线拉低并保持至少60us
如下图:(引用网络图片)
3)读间隙
从机在主机发出读间隙的时候,才向主机传输数据,所以当主机发出读数据命令后,必须马上产生读间隙,以便能够顺利读到数据。所有读间隙至少60us,且两次读间隙之间至少需要1us的恢复时间。
当主机拉低总线至少1us发起读间隙,此时从机才开始发送数据。从机发送1,则为高电平,从机发送0,则为低电平。
当从机发送0时,在该读间隙结束后释放总线,总线由上拉电阻拉至高电平。从机发出数据保持有效时间15us。所以主机在读间隙期间要释放总线(此时由从机控制),并且在读间隙起始的15us内采样总线状态,获取数据。
如下图:(引用网络图片)
2. 串口通信(UART协议)
2.1 什么是UART协议?
UART协议是一种通用的串行、异步通信协议,它是通过串口线进行有线通信,在通信时最少需要两根线(GND和信号线),所以可以是单工通信,GPS模块就是典型的串口单工通信实例,此外大部分的串口通信都是使用3根线(TXD、RXD、GND)来实现全双工通信。(电平信号)
2.2 通信时序
串口通信时,收发是一个周期一个周期进行的,每个周期传输n个二进制位,这个周期就叫做一个通信单元,一个通信单元包含:起始位+数据位+奇偶校验位+停止位组成的。
数据位先发低位再发高位(小端序)
2.2.1 波特率
波特率用于描述UART通信时的通信速度,其单位为bps(bit per second)即每秒钟传送多少个位(bit)的数据。
因为串口通信是一种异步通信方式,收发双方并没有同步时钟信号来规约发送一个bit的数据电平维持多长时间,这样可能发生错乱,比如你发了00(两个低电平),但是接收器却认为只发了一个0(低电平),导致数据接收错误,所以需要波特率来规约收发双方的速率来同步收发数据,以确定一个位的数据发送电平维持多长时间。
2.2.2 起始位
起始位为低电平,它表示发送方要开始发送一个通信单元,因为对于串口通信总线没有数据传输空闲时维持高电平,一旦产生一个下降沿变成低电平则表示起始信号。
2.2.3 数据位
起始位之后就是要传输的数据,数据可以是5,6,7,8,9位,但是一般都是选择8位数据位,因为一般通过串口发送的数据都是字节为单位的ASCLL码编码,而ASCLL码中一个字符刚好编码为8位。
2.2.4 校验位
它是用来校验数据位,以防止数据位出错的。这里有两种校验方式,即奇校验和偶校验。其中:
- 奇校验保证传输过程中1的个数为奇数,如8位数据传输中1的个数为偶数,则校验位为1;
- 偶校验保证传输过程中1的个数为偶数,如8位数据传输中1的个数为偶数,则校验位为0;
2.2.5 停止位
停止位为高电平,它是发送方用来表示本通信单元结束的标志,可以是1位,1.5位,2位的高电平,一般使用的是1位停止位。