一些通信协议科普

双绞线到TCP/UDP

双绞线就是利用差分信号(利用两根导线电压差)传输,提高了抗干扰能力,从而延长传输距离

网络传输五大层:

应用层

传输层

网络层

数据量链路层

物理层

TCP/IP层

应用层 首部(协议)和数据部分(用户数据) 服务于 用户与用户之间的通信

传输层 使用的是 TCP/UDP协议 ,TCP头部主要阶段是源端口号和目的端口号,服务于 进程与进程之间的通信

网际层 使用的是IP协议服务与主机与主机之间的通信

网络接口层 两个节点之间的通信

串口通信(全双工通信)

通常我们进行数据交互时,机器只能识别单个 0 和 1 ,如果发一串0和1 他可能就不知道在哪里是这套数据的开始,也不知道在哪是数据的结束,所以,波特率就此诞生!!!成功解决了连串数据发送的问题

但是一波未平一波又起,那如果我发送方不想发数据了,接收方又该如何知道呢?

那就是不想发数据了就直接一直拉高电平,等需要发送数据时先拉低电平,这个低电平这一段就叫做开始位,那么我们还需要规定数据位以及校验位

如果需要全双工通信 那么可以再加一根线,一根负责发送 一根负责接收

RS232/485

这个协议出现主要是为了解决在0-5V传输中的电磁干扰(将高电平变成低电平的情况)

RS232 (全双工通信)

所以将电平升高,将315V规定为逻辑0,将-3 -15V规定为逻辑1,这样就很好提升了抗干扰的能力,这个就是RS232标准

PS:RS232标准在进行数据传输时 发送时需要将TTL电平(普通串口电平)转换成RS232电平接收时要将RS232电平转换成 TTL电平

RS485(半双工通信)

但是上述避免不了更大的干扰对电平高低进行影响,所以差分传输应运而生!

也就是通过两根导线的电压差来进行传输数据比如现在有A和B两根导线,当A大于B时规定为逻辑1,反之则为逻辑0 当受到干扰的时候也是两根线同时收到干扰,但是他们的电压差不会变

PS:RS485标准在进行数据传输时 发送时需要将TTL电平(普通串口电平)转换成RS485电平,接收要将 RS485电平转换成 TTL电平

I2C协议

就两根线:SDA(数据线)和SCL(时钟线)

注意:所有I2C设备的 SDA、SCL都要配置成开漏输出,并且 在总线上添加上拉电阻,因为开漏输出上方的P-MOS 被硬件直接禁用了,只有N-MOS接通GPIO引脚,若N-MOS导通,引脚自然接入低电平;但是,当N-MOS断开时,引脚就变成悬空状态,也称为高阻态 ,所以开漏输出要像输出高电平,必须依靠外部接一个上拉电阻

标定方式:

如果(SDA)数据线的电平为高,(SCL)时钟线为高,那么就是1;如果(SDA)数据线的电平为低,(SCL)时钟线为高,那么就是0

起始和终止判断:

起始:时钟线(SCL)为高的时候,数据线发生一个下降沿

停止:时钟线(SCL)为高的时候,数据线发生一个上升沿

SPI协议

在SPI中,只有一个主机,剩下的都是从机,同时也是同步通信协议,用的是同一个时钟线

他有四根线------分别是MISO、MOSI、SCK、SS1

标定方式:

设备传输数据中会有内置的寄存器,把发送或接收的数据放到寄存器中

首先使能端片选,当主机的时钟信号发生在上升沿时,主机就把最高位的数据放到MOSI引脚上,其他数据往左移动一位;从机收到时钟信号的上升沿时,从机把最高位数据放到MISO引脚上;当主机的时钟信号发出下降沿时,主机就把MISO引脚(从机发的数据)上面的数据收编到主机寄存器的最低位;当从机收到时钟信号的下降沿时,会将MOSI(主机发的数据)收编到从机寄存器的最低位

CAN通信

CAN总线通信是差分通信,差分电平就是当两根线的电位差为2V时,代表逻辑0;当两根线的电位差是0V时,代表逻辑1

CAN的接线

CAN控制器有两条线,一条发送(TX),一条接收(RX) 但是,CAN控制器不能直接接在总线上,而是需要挂载一个CAN收发器,当然,CAN收发器也有两根线,也就是差分线,一个CAN_H,一个CAN_L 也需要在端添加120Ω的电阻

CAN数据帧格式

markdown 复制代码
1.数据帧(广播式) 有标准模式和扩展模式
2.遥控式(请求式)

位填充

发送方每发送5个相同的电平,会自动追加一个相反电平的填充位;接收方检测到填充位会自动移除,恢复原始数据

因为他是为了解决一长串的相同数据如何采样的问题

总线仲裁

所有的设备共用一个总线,所以在总线中两个设备不能同时发送数据

所以发送数据之前要检查总线是否繁忙,如果总线被占用,那么就暂停发送数据;如果总线空闲,就可以发送数据

但是如果两个控制器同时都发现总线空闲,同时发数据出去了呢?

那么在这里就得施行 线与 (线之间的逻辑"与",检查最终结果是什么,若与出来的结果是跟一条线相同另一条线相反,那么相反的那根线停止数据发送)和回读(每次往总线发送完一位数据,都检查一下总线中状态与自己发送的是否一致)

相关推荐
keep intensify2 小时前
网络延迟时间
网络·算法
Irissgwe2 小时前
网络基础概念
linux·网络·网络基础概念
我在人间贩卖青春2 小时前
Qt 网络编程
网络·qt
m0_738120722 小时前
渗透测试——Ripper靶机详细横向渗透过程(rips扫描文件,水平横向越权,Webmin直接获取root权限)
linux·网络·数据库·安全·web安全·php
弘毅 失败的 mian2 小时前
嵌入式系统观
数据库·经验分享·笔记·物联网·嵌入式
不知名。。。。。。。。3 小时前
网络层———IP
服务器·网络·tcp/ip
RTC老炮3 小时前
webrtc弱网-BBRv2算法原理
网络·算法·webrtc
RTC老炮3 小时前
webrtc弱网-BBRv1算法原理
网络·算法·webrtc
ivy159868377157 小时前
芯锦科技 HP9116 QC3+多协议USB快充接口芯片
网络·单片机·嵌入式硬件·5g·p2p