各种串口协议和物理条件(较长,多)(更新总结)

串口通信USART

Universal Asynchronous Receiver/Transmitter 通用异步串口接收/发送协议
参考:https://www.bilibili.com/video/BV1PD4y147ts/?spm_id_from=333.337.search-card.all.click&vd_source=00bd76f9d6dc090461cddd9f0deb2d51

物理硬件引脚

在这里插入图片描述

串口常见数据格式

一般包含起始,数据,校验,结束位
在这里插入图片描述

传输速率

参考:https://mar-sky.blog.csdn.net/article/details/128826937
一般使用波特率(baud)表示,有些情况下,这个波特率数值和比特率数值大小一样,但表示的含义不同。例如,8位表示一个字符信息,可以理解为一个baud,另一个名字码元。而**比特只是0和1的一个二级制位**。但在单片机信号传送中一般认为一位二级制代表的就是一个码元,这样的情况下,波特率和比特率的值刚好相同,而在计算机通信中,一般都是这么认为的,所以下面常见的波特率实际上数值就是和比特率一样,表示每秒传送的电平数量。
在这里插入图片描述

传输电压TTL

2.4-5V表示电平1,0-2.4v表示电平0
在这里插入图片描述
高低电平相差范围0.4-2.4v,范围很小,抗干扰能力差,如下图,很可能把传输的信号修改,所以传输距离短,1m之内
在这里插入图片描述

RS232通信

参考:https://zhuanlan.zhihu.com/p/96506127
注意通信协议和物理接口不一样,平常说的RS232接口只是习惯称DB9针的接口而已。可以看出RS232和串口通信需要的通信引脚一样,也是全双工的。
在这里插入图片描述

电平

下面的电平有错误,RS232电平的和TTL电平的极性相反,TTL低电平对应是RS232中-12–3v,也就是每位数据信号对应的电平值
在这里插入图片描述
电平范围:0:3-15v,1:-15–3v,发现数据的值和传输电压极性不同。但这样电平之间的电压差别范围增加,抗干扰能力强。可以在长距离传输信号前把信号转换使用RS232传输。传输波特率19200时也就是19200/8=2400≈20KB/s,距离15m内
在这里插入图片描述

RS485

在这里插入图片描述
通信线是两根,但是是使用差分信号,通过两个条线的电平相差的正负判断0或1.这种情况下把传送线使用双绞线,那么抗干扰能力更强,但这样不是全双工的信号了。
在这里插入图片描述
在这里插入图片描述
传送速率和RS232比较的优点:可多个通信,RS232只能点对点通信
在这里插入图片描述

在这里插入图片描述

RS422

参考:https://zhuanlan.zhihu.com/p/72235639
克服了RS485不能全双工通信的缺点:使用两根接收和两根发送线,

SPI

可以看出下面图像中SPI通信也是一主多从的分布
在这里插入图片描述

一个通过SPI通信的EEPROM读取和写入实例

参考:https://www.bilibili.com/video/BV1F54y1M7e7/?spm_id_from=333.999.0.0&vd_source=00bd76f9d6dc090461cddd9f0deb2d51
EEPROM的93C46:参数:1024位,128字节(B),一般是以某个字节开始写入,写入/读取数据和读取步骤如下

片选引脚选中要读写的EEPROM

注意这个片选信号是要根据被写入的EEPROM的动作电平,例如这个EEPROM给高电平,这个EEPROM则可以读写了
在这里插入图片描述

对EEROM的某个地址写入数据

在这里插入图片描述
例如对地址0x01,写入0x0F也就是(00001111)(实际对于不同的芯片也不是每次都只能写入一个字节数据),这里的7位地址码刚好是27=128字节, 由于SPI是串行同步通信,接收每一位数据都需要时钟线和数据输出线配合

EEPROM的数据写入

93C46的采样方式,就如下图中的数据,需要频繁的对时钟线拉高或拉低,每次EEPROM的时钟线上升沿才会对单片机的MOSI线和EEPROM连接的电平信号接收,下图就是对EEPROM的地址0x01,写入0x0F数据的命令
在这里插入图片描述
当然针对不同的EEPROM,会有不同的采样方式,有时候就算是同一个芯片,也可能因设置引脚电平不同而出现不同的采样方式
可以看出都是一个时钟周期采样一个数据位。下图中是空闲时钟是低电平,第二张图是空闲时钟为高电平。根据时钟空闲时电平采集方式可以把数据采集分为四种方式。
在这里插入图片描述
在这里插入图片描述

对EEPROM读取数据

例如读取地址0X01位置的数据,实际也是先对EEPROM发送指令,然后从EEPROM返回数据
在这里插入图片描述
单片机发送完读取命令后依然保持时钟正常,为了接收到返回数据
在这里插入图片描述

IIC总线

参考:https://www.bilibili.com/video/BV1dg4y1H773/?spm_id_from=333.999.0.0&vd_source=00bd76f9d6dc090461cddd9f0deb2d51

通过下面的图看出串口通信的弊端,串口通信只能一对一,对于多个设备的接线复杂,接口是一个很大的问题。为了解决这个问题,出现了总线通信
在这里插入图片描述

常见的总线通信

其他工业中使用的总线协议比较多,profi-bus,devicenet,controlnet,lonworks等,但在单片机中,这些基本不涉及
在这里插入图片描述

IIC读写传送

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

单片机写入从设备的帧

下面是对24c02写入一帧数据的整个命令,但需要注意是绿色和黄色(读1,写0)是主机发送,而白色应答位(正常收到返回0)是从机响应发送到主机的。
在这里插入图片描述

单片机读取帧的整个过程

在这里插入图片描述

CAN总线

参考:https://www.bilibili.com/video/BV14k4y187e6/?spm_id_from=333.999.0.0&vd_source=00bd76f9d6dc090461cddd9f0deb2d51
在这里插入图片描述

CAN数据通信电平

在这里插入图片描述

数据帧

下图是一个标准的数据帧,其他还有数据帧,遥控帧,错误帧,过载帧,间隔帧
可以参考:https://mar-sky.blog.csdn.net/article/details/128597600
在这里插入图片描述
每段部分的主要功能:
起始段:发送起始
识别码:1,识别设备,2,防止同时发出数据在总线比较,然后却那个优先
PRT:远程帧是1,数据帧是0;
控制码:第一位:IDE:标记扩展1,标准帧是0;第二位空闲位;后四位,表示后面传送的数据位是多少个字节,例如0010,表示2个字节
数据码:由前面的控制码确定传送多少字节
CRC:校验15位,为了判断数据是否传送错误
CRC界定符:结束CRC
ACK槽(ACK slot):发送位是1,接收返回0
ACK界定:只能是1
结束位:7位都是1

猜你喜欢

转载自blog.csdn.net/weixin_43794311/article/details/130005503