常用通讯协议随笔
这里主要对工作学习中常见常用的通信协议进行一个整理,在需要的时候可以进行回顾,内容主要根据创客学院,所做的学习笔记加上一些比较好理解的话语,内容如有错误还请各大佬批评指正。
通讯基础
并行通讯:数据线有8条,就代表总线传输数据时一次可传输8位数据;
串行通讯:数据线只有一条,需要一个一个位逐次传输;
UART
即通用异步收发器,是一种通用的串行,异步通讯总线;
总线有两天数据线,可以实现全双工的发送和接收;
在嵌入式系统中常用与主机与辅助设备之间的通信
波特率:用于描述UART通信时的通信速度,其单位为bps(bit per second)即每秒钟传送的bit的数量;
起始位(必须有):为低电平,代表一次数据传输开始;
数据位:协议规定,数据先发低位再发高位;
校验位(可有可无):使用奇偶校验位,偶数为1,奇数为0;
停止位(必须有):为高电平,代表一次数据传输结束;
UART存在的问题:
- 电气接口不统一
- UART只是对信号的时序进行了定义,而未定义接口的电气特性;
- UART通信时一般直接使用处理器使用的电平,即TTL电平,但不同的处理器使用的电平存在差异,所以不同的处理器使用UART通信时一般不能直接相连;
- UART没有规定不同器件连接时连接器的标准,所以不同器件之间通过UART通信时连接很不方便;
- 抗干扰能力差
- UART一般直接使用TTL信号来表示0和1,但TTL信号的抗干扰能力较差,数据在传输过程中很容易出错;
- 通讯距离极短
- 因为TTL信号的抗干扰能力较差,所以其通信距离也很短,一般只能用于一个电路板上的两个不芯片之间的通信;
RS232
RS232协议是在1970年由美国电子工业协会(EIA)联合贝尔系统、调制解调器厂家、计算机终端生产厂家共同制定的用于串行通讯的标准;
该标准规定采用一个标准的连接器,标准中对连接器的每个引脚的作用加以规定,还对信号的电平加以规定;
接口
-
该标准规定采用一个25引脚的DB-25连接器,标准中对连接器的每个引脚的信号内容加以规定,还对各种信号的电平加以规定;
-
IBM的PC机将RS232简化成了DB-9连接器,后来成为事实标准;
-
现在工业控制的RS-232接口一般只使用RXD、TXD、GND三条线;
信号
-
该标准规定逻辑1的电平为-5v到-15v,逻辑0的电平元5到+15v;
-
选用该电气标准的目的在于提高抗干扰能力,增大通信距其传送距离一般可达15米;
电平转换
虽然很多处理器中都会集成UART控制器,但处理器产生的信号一般都是TTL信号并不是符合RS232标准的信号,所以一般我们还需要在处理器外部去添加电路对信号的电平进行转换,转换成同一个信号才能进行通讯,也可通过外围元器件转换;
RS232存在的问题
-
接口的信号电平值较高,易损坏接口电路的芯片,又因为与TTL电平不兼容,所以需要使用电平转换芯片才能与TTL电路连接;
-
通信速度较低;
-
易产生共模干扰,抗噪声干扰性弱;
-
传输距离较短(15米);
注:RS232编写驱动代码时是和UART是没有什么区别的,只是在电气层面需要进行一些电平转换;
RS485
该标准由电信行业协会和电子工业联盟定义;
使用该标准的通信网络能在远距离条件下以及电子噪声大的环境下有效传输信号;
该标准允许连接多个收发器,即具有多站能力,这样可以利用单一的RS485接口方便地建立起一个设备网络(UATR和RS232只能进行点对点的通信);
信号
-
RS485标准规定采用差分信号进行数据传输;
-
两线间的电压差为+2v到+6v表示逻辑1,两线间的电压差为-2v到-6v表示逻辑0;
-
使用差分信号(H-L=正电压表示1,H-L=负电压表示0)能有效地减少噪声信号的干扰,延长通信距离,RS485的通信距离可以达到1500米;
-
RS485接口信号的电平比RS232降低了,所以不易损坏接口电路的芯片,且该电平与TTL电平兼容,可方便地与TTL电路连接;
接口
-
RS485采用两线制,这种接线方式为总线式拓扑结构,在同一总线上可以同时存在多个节点;
-
因为采用两线制,数据的发送和接收都要使用这对差分信号线,发送和接收不能同时进行,所以只能采用半双工的方式工作,编写驱动程序时也需要加以处理;
电平转换
虽然很多处理器中都会集成UART控制器,但处理器产生的信号一般都是TTL信号并不是符合RS485标准的信号,所以一般我们还需要在处理器外部去添加电路(IC)将TTL信号转换成差分信号;
RS485的优势
-
接口的信号电平值较低,不易损坏接口电路的芯片,且与TTL电平兼容,可方便地与TTL电路连接;
-
通信速度快;
-
抗噪声干扰性强;
-
传输距离远(1500米);
-
可实现多节点组网;
注:因RS485和IIC都是半双工通信、主从通信,所有RS485的通讯实现完全可以参照IIC来完成;
IIC
IIC总线是一种串行、半双工通讯总线;
总线主要用于近距离、低速的芯片之间的通信;IIC总线有两根双向的信号线一根数据线SDA用于收发数据,一根时钟线SCL用于通信双方时钟的同步;
IIC总线硬件结构简单,成本较低,因此在各个领域得到了广泛的应用;
IIC总线是一种多主机总线,连接在IIC总线上的器件分为主机和从机,主机有权发起和结束一次通信,而从机只能被主机呼叫;
当总线上有多个主机同时启用总线时,IIC也具备冲突检测和仲裁的功能来防止错误产生;
每个连接到IIC总线上的器件都有一个唯一的地址(7bit),且每个器件都可以作为主机也可以作为从机(同一时刻只能有一个主机),总线上的器件增加和删除不影响其他器件正常工作;
IIC总线在通信时总线上发送数据的器件为发送器,接收数据的器件为接收器;
IIC总线通讯过程
- 主机发送起始信号启用总线,开始一次数据传输开始;
- 主机发送一个字节数据用于指明从机地址和后续字节的传输方向(bit1-bit7:从机地址;bit8:传输方向,0为主机发送数据,1为主机接收数据);
- 被寻址的从机(需要和主机进行通信的从机)发送应答信号回应主机;
- 发送器(传输方向决定谁是发送器)发送一个字节的数据;
- 接收器(传输方向决定谁是接收器)发送应答信号回应发送器;
- 循环执行4、5步;
- 通讯完成后主机发送停止信号释放总线(这时可以让其他设备成为主机);
IIC总线寻址方式
-
IIC总线上传送的数据是广义的,既包括地址,又包括真正的数据;
-
主机在发送起始信号后必须先发送一个字节的数据,该数据的高7位为从机地址,最低位表示后续字节的传送方向,0表示主机发送数据,1表示主机接收数据;
-
总线上所有的从机接收到该字节数据后都将这7位地址与自己的地址进行比较,如果相同,则认为自己被主机寻址,然后再根据第8位将自己定为发送器或接收器;
起始信号和停止信号
-
SCL为高电平时,SDA由高变低表示起始信号;
-
SCL为高电平时,SDA由低变高表示停止信号;
-
起始信号和停止信号都是由主机发出,起始信号产生后总线处于占用状态,停止信号产生后总线处于空闲状态;
字节传输于应答
-
IIC总线通信时每个字节为8位长度(必须为8位);
-
数据传送时,先传送最高位,后传送低位,发送器发送完一个字节数据后接收器必须发送1位应答位来回应发送器即一帧共有9位;
同步信号
-
IIC总线在进行数据传送时,时钟线SCL为低电平期间发送器向数据线上发送一位数据,此期间数据线上的信号允许发生变化;
-
时钟线SCL为高电平期间接收器从数据线上读取一位数据,在此期间数据线上的信号不允许发生变化,必须保持稳定;
典型IIC时序
-
主机向从机发送数据
-
从机向主机发送数据
-
主机先向从机发送数据,然后从机再向主机发送数据
-
注:阴影部分表示数据由主机向从机传送;无阴影部分则表示数据由从机向主机传送;A表示应答,/A表示非应答,S表示起始信号,P表示终止信号;
MPU6050,OLED0.96屏为使用IIC协议通讯的模块,可在实际开发中学习。
SPI
SPI是串行外设接口的缩写,SPI是一种高速的、全双工、同步的串行通信总线;
SPI采用主从方式工作,一般有一个主设备和一个或多个从设备;
SPI需要至少4根线,分别是MISO(主设备输入从设备输出)、MOSI(主设备输出从设备输入)、SCLK(时钟)、OS(片选);
SPI使用引脚较少且布线方便,所以越来越多的芯片集成了这种通信协议;
SPI寻址方式
当主设备要和某个从设备进行通信时,主设备需要先向对应从设备的片选线上发送使能信号(高电平或者低电平,根据从机而定,CS上一杠表示低电平有效)表示选中该从设备;
SPI总线通讯过程
SPI总线在进行数据传送时,先传送高位,后传送低位;
一个字节传送完成后无需应答即可开始下一个字节的传送,自然也没有开始信号与结束信号;
SPI总线采用同步方式工作,时钟线在上升沿或下降沿时发送器向数据线上发送数据,在紧接着的下降沿或上升沿时接收器从数据线上读取数据,完成一位数据传送,八个时钟周期即可完成一个字节数据的传送;
MSB为最高位,LSB为最低位;
极性和相位
SPI总线有四种不同的工作模式,取决于极性(CPOL)和相位(CPHL)这两个因素;
CPOL表示SCLK空闲时的状态
-
CPOL=0,空闲时SCLK为低电平
-
CPOL=1,空闲时SCLK为高电平
CPHA表示采样时刻
-
CPHA=0,每个周期的第一个时钟沿采样
-
CPHA=1,每个周期的第二个时钟沿采样
注:
-
对于一个特定的从设备来说,一般在出厂时就会将其设计为某种特定的工作模式,所以我们需遵守厂家的工作模式;
-
在使用该设备时就必须保证主设备的工作模式和该从设备保持一致,否则是无法进行通信的;
-
一般只需要对主设备的CPOL和CPHA进行配置;
IIC和SPI的异同
相同点:
- 均采用串行同步为方式;
- 均采用TTL电平,传输距离不会太长,应用场景类似;
- 均采用主从方式工作;
不同点:
- IIC为半双工,SPI为全双工;
- IIC有应答机制,SPI无应答机制;
- IIC通过向总线广播从机地址来寻址,SPI通过向对应从机发送使能信号来寻址;
- IIC的时钟极性和时钟相位固定,SPI的时钟极性和时钟相位可调;