常用的通信协议

2024-06-10 22:04
文章标签 通信协议 常用

本文主要是介绍常用的通信协议,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近在做项目,用到了一些通信协议,这里详细整理一下相关的通信协议,方便以后查阅。

常用的通信协议

  • 单工 半双工 全双工
    • 单工通信(Simplex Communication)
    • 半双工(Half-duplex Communication)
    • 全双工(Full-duplex Communication)
    • 参考资料
  • 并行通信 VS 串行通信
    • 并行通信(Parallel Commmunication)
    • 串行通信(Serial Commmunication)
    • 参考资料
  • 同步串行通信 VS 异步串行通信
    • 同步串行通信(Synchronous Serial Communication)
    • 异步通信(Asynchronous Serial Communication)
    • 同步通信与异步通信区别
    • 参考资料
  • UART(Universal Asynchronous Receiver/Transmitter)
    • 简介
    • UART协议帧
      • 起始位
      • 数据帧
      • 奇偶校验
      • 停止位
    • UART传输步骤
    • UART的优缺点
      • 优点
      • 缺点
    • 参考资料
  • SPI(Serial Peripheral Interface)
    • 简介
    • SPI数据传输步骤
    • 时钟模式
      • 时钟速率
      • 时钟极性
      • 时钟相位
      • 四种模式
    • 多个从模块
      • 多片选
      • 菊花链
    • SPI的优缺点
      • 优点
      • 缺点
    • 参考资料
  • I²C(Inter-Integrated Circuit)
    • 简介
    • I²C是如何工作的
      • Start and Stop Condition & Logic Signal & Read/Write Bit & ACK/NACK Bit
      • 数据帧格式
    • I²C数据传输步骤
    • 多主或多从
      • 单个主设备连接多个从机
      • 多个主设备连接多个从机
    • I²C的优缺点
      • 优点
      • 缺点
    • 参考资料
  • TTL & RS232 &RS485 电平标准
    • TTL(Transistor Transistor Logic)
    • RS232(Recommended Standard 232)
      • 简介
      • RS232的逻辑电平
      • RS232存在的问题
    • RS485(Recommended Standard 485)
      • 简介
      • RS485的特点
      • 连接方式
      • RS485的逻辑电平
      • 抗干扰性能
      • 传输速度 VS 传输距离
      • TTL转485电路
        • 经典电路
        • 自动切换电路
    • TTL RS232 RS485的区别
    • 参考资料
  • CAN(Controller Area Network)
    • 简介
      • 传统CAN 简介
      • CAN FD 简介
        • CAN FD 的优势
    • CAN 协议
      • 物理层
        • 闭环总线网络
        • 开环总线网络
        • ISO11898 和11519-2 协议的不同点
        • 差分信号
        • CAN 协议中的差分信号
      • 协议层
    • 参考资料
  • RS232 & RS485 & CAN & IIC & SPI 的对比
  • CRC校验(循环冗余校验)
    • 简介
    • 基础概念
      • 模2除法
      • 多项式与二进制
    • CRC校验原理
      • CRC计算步骤
    • 常见CRC参数模型
    • 参考资料

单工 半双工 全双工

根据通信双方的分工和信号传输的方向可将通讯分为三种方式

在这里插入图片描述

单工通信(Simplex Communication)

只允许甲方向乙方传送信息,而乙方不能向甲方传送 。
在这里插入图片描述
常见的有:广播、电视、遥控器、VGA显示接口

半双工(Half-duplex Communication)

数据传输指数据可以在一个信号载体的两个方向上传输,但是不能同时传输。
在这里插入图片描述
常见的有:对讲机、I²C

全双工(Full-duplex Communication)

通信允许数据在两个方向上同时传输,它在能力上相当于两个单工通信方式的结合,全双工指可以同时进行信号的双向传输。
在这里插入图片描述
常见的有:手机、电话、网口、UART

参考资料

全双工,双工,单工的区别

单工,半双工,全双工有什么区别呢?

并行通信 VS 串行通信

嵌入式电子产品是一种互连电路(处理器或其他集成电路)以创建共生系统。
为了使这些单独的电路交换其信息,它们必须共享公共通信协议
已经定义了数百种通信协议来实现这种数据交换,根据通信过程中每次传输的位数,可将通信分为:并行通信串行通信

并行通信(Parallel Commmunication)

并行是指多比特数据同时通过并行线进行传送,这样数据传送速度大大提高。

并行接口同时传输多个位。它们通常需要数据总线(八、十六或更多线路),以1和0的波形传输数据。

如下图:使用9线的并行通信,由时钟控制的8位数据总线,每个时钟脉冲发送一个字节。
在这里插入图片描述
主要特点:

  1. 各数据位同时传输,传输速度快、效率高,多用在实时、快速的场合。

  2. 并行通信不能长距离通信,抗干扰能力差。

串行通信(Serial Commmunication)

简称串口(串行接口),指数据一位一位地顺序传送
在这里插入图片描述
常用总线; I²C、SPI、UART

主要特点:

  1. 按bit逐位传输,效率低
  2. 只需要一根数据线,设计简单

分类
串行通信根据发送时钟源和接收时钟源是否保持一致,又分为同步通信异步通信

参考资料

2.2 数据通信方式:单工通信、半双工通信和全双工通信,并行通信和串行通信,异步传输和同步传输。

通信教程01_什么是并行通信?什么是串行通信?

Parallel vs serial communication

四分钟搞定【同步通信-异步通信-全双工通信-串行通信-并行通信】

同步串行通信 VS 异步串行通信

同步串行通信(Synchronous Serial Communication)

信息发送设备与信息接收设备需要时钟同步信号,两者间除数据线连接还需要额外的时钟线连接

在这里插入图片描述

举例: I²C、SPI

异步通信(Asynchronous Serial Communication)

信息发送设备与信息接收设备之间无时钟连接,信息中包含特殊标志位Start/Stop,接收设备根据特殊标志利用本地时钟对数据采样。

在这里插入图片描述

举例:UART

同步通信与异步通信区别

  1. 同步通信要求接收端时钟频率和发送端时钟频率一致,发送端发送连续的比特流;异步通信时不要求接收端时钟和发送端时钟同步,发送端发送完一个字节后,可经过任意长的时间间隔再发送下一个字节。
  2. 同步通信效率高;异步通信效率较低。
  3. 同步通信较复杂,双方时钟的允许误差较小;异步通信简单,双方时钟可允许一定误差。
  4. 同步通信可用于点对多点;异步通信只适用于点对点

参考资料

四分钟搞定【同步通信-异步通信-全双工通信-串行通信-并行通信】

Difference between Synchronous and Asynchronous Transmission

浅析同步通信与异步通信

UART(Universal Asynchronous Receiver/Transmitter)

简介

UART(Universal Asynchronous Receiver/Transmitter,通用异步收发器)是一种双向串行异步的通信总线,仅用一根数据接收线和一根数据发送线就能实现全双工通信。

典型的串口通信使用3根线完成,分别是:发送线(TX)、接收线(RX)和地线(GND),通信时必须将双方的TX和RX交叉连接并且GND相连才可正常通信,如下图所示:

在这里插入图片描述

UART以异步方式传输数据,这意味着没有时钟信号来同步发送端UART输出的比特和接收端UART采样的比特。
代替时钟信号的是,发送 UART 为传输的数据包添加开始和停止位。这些比特定义了数据包的开始和结束,以便接收 UART 知道何时开始读取比特。

当接收端的UART检测到起始位时,它开始以特定频率(即波特率)读取传入的比特。波特率是数据传输速度的度量单位,以**每秒比特数(bps)**表示。两个UART必须以大致相同的波特率运行。在传输和接收的UART之间,波特率只能相差约10%,否则比特的时序将严重偏离。

在这里插入图片描述

UART协议帧

在UART中,传输模式为数据包形式。数据包由起始位数据帧奇偶校验位停止位组成。
在这里插入图片描述
在这里插入图片描述

起始位

当不传输数据时,UART数据传输线通常保持高电压电平。若要开始数据传输,发送UART会将传输线从高电平拉到低电平并保持1个时钟周期
当接收UART检测到高到低电压跃迁时,便开始以波特率对应的频率读取数据帧中的位。
在这里插入图片描述

数据帧

数据帧包含所传输的实际数据。
如果使用奇偶校验位,数据帧长度可以是5位到8位。如果不使用奇偶校验位,数据帧长度可以是9位。
在大多数情况下,数据以最低有效位优先方式发送。
在这里插入图片描述

奇偶校验

奇偶性描述数字是偶数还是奇数。通过奇偶校验位,接收UART判断传输期间是否有数据发生改变。电磁辐射、不一致的波特率或长距离数据传输都可能改变数据位。

接收UART读取数据帧后,将计数值为1的位计算总数,检查总数是偶数还是奇数。

  • 如果奇偶校验位为0(偶数奇偶校验),则数据帧中的1或逻辑高位总计应为偶数
  • 如果奇偶校验位为1(奇数奇偶校验),则数据帧中的1或逻辑高位总计应为奇数

当奇偶校验位与数据匹配时,UART认为传输未出错。但是,如果奇偶校验位为0,而总和为奇数,或者奇偶校验位为1,而总和为偶数,则UART认为数据帧中的位已改变。
在这里插入图片描述

在这里插入图片描述

停止位

为了表示数据包结束,发送UART将数据传输线从低电压驱动到高电压并保持1到2位时间
在这里插入图片描述

UART传输步骤

  1. 发送UART从数据总线并行接收数据。
    在这里插入图片描述

  2. 发送UART将起始位、奇偶校验位和停止位添加到数据帧。
    在这里插入图片描述

  3. 从起始位到结束位,整个数据包以串行方式从发送UART送至接收UART。接收UART以预配置的波特率对数据线进行采样。
    在这里插入图片描述

  4. 接收UART丢弃数据帧中的起始位、奇偶校验位和停止位。
    在这里插入图片描述

  5. 接收UART将串行数据转换回并行数据,并将其传输到接收端的数据总线。
    在这里插入图片描述

UART的优缺点

优点

  1. 仅使用两根导线
  2. 不需要时钟信号
  3. 具有奇偶校验位以进行错误检查
  4. 只要双方都设置为相同的数据包结构,数据包的结构可以更改
  5. 文档充分且广泛使用的方法

缺点

  1. 数据帧的大小限制在最多9位
  2. 不支持多从机或多主机系统
  3. 每个UART的波特率必须在彼此之间相差不超过10%

参考资料

一文搞懂UART通信协议

超简单的一种通信,2分钟搞懂,串口通讯的工作原理!

UART interface in IoT

BASICS OF UART COMMUNICATION

UART:了解通用异步接收器/发送器的硬件通信协议

【干货分享】2分钟快速了解电平通讯TTL、RS232、RS485

SPI(Serial Peripheral Interface)

简介

SPI是串行外设接口(Serial Peripheral Interface)的缩写,是美国摩托罗拉公司(Motorola)最先推出的一种同步串行传输规范,也是一种单片机外设芯片串行扩展接口,是一种高速、全双工同步通信总线,所以可以在同一时间发送和接收数据,SPI没有定义速度限制,通常能达到甚至超过10M/bps。

SPI有主、从两种模式,通常由一个主模块和一个或多个从模块组成(SPI不支持多主机),主模块选择一个从模块进行同步通信,从而完成数据的交换。提供时钟的为主设备(Master),接收时钟的设备为从设备(Slave),SPI接口的读写操作,都是由主设备发起,当存在多个从设备时,通过各自的片选信号进行管理。

SPI通信原理很简单,需要至少4根线,单向传输时3根线,它们是MISO(主设备数据输入)、MOSI(主设备数据输出)、SCLK(时钟)和CS/SS(片选):

在这里插入图片描述

  • MISO( Master Input Slave Output):主设备数据输入,从设备数据输出;
  • MOSI(Master Output Slave Input):主设备数据输出,从设备数据输入;
  • SCLK(Serial Clock):时钟信号,由主设备产生;
  • CS/SS(Chip Select/Slave Select):从设备使能信号,由主设备控制,一主多从时,CS/SS是从芯片是否被主芯片选中的控制信号,只有片选信号为预先规定的使能信号时(高电位或低电位),主芯片对此从芯片的操作才有效。

在这里插入图片描述

SPI数据传输步骤

  1. 主设备输出时钟信号:
    在这里插入图片描述

  2. 主设备将SS/CS引脚切换到低电压状态,激活从设备:
    在这里插入图片描述

  3. 主设备逐位通过MOSI线向从设备发送数据。从设备接收数据位时逐位读取:
    在这里插入图片描述

  4. 如果需要响应,从设备通过MISO线逐位向主设备返回数据。主设备在接收到数据位时逐位读取:
    在这里插入图片描述

例如,下图示例中简单模拟SPI通信流程,主机拉低NSS片选信号,启动通信,并且产生时钟信号,上升沿触发边沿信号,主机在MOSI线路一位一位发送数据0X53,在MISO线路一位一位接收数据0X46,如下图所示:

在这里插入图片描述

时钟模式

SPI时钟特点主要包括:时钟速率时钟极性时钟相位三方面。

时钟速率

SPI总线上的主设备必须在通信开始时候配置并生成相应的时钟信号。
从理论上讲,只要实际可行,时钟速率就可以是你想要的任何速率,当然这个速率受限于每个系统能提供多大的系统时钟频率,以及最大的SPI传输速率。

时钟极性

根据硬件制造商的命名规则不同,时钟极性通常写为CKPCPOL

  • CKP = 0:时钟空闲IDLE为低电平 0;
  • CKP = 1:时钟空闲IDLE为高电平1。

时钟相位

根据硬件制造商的不同,时钟相位通常写为CKECPHA

  • CKE = 0:在时钟信号SCK的第一个跳变沿采样;
  • CKE = 1:在时钟信号SCK的第二个跳变沿采样。

四种模式

根据SPI的时钟极性和时钟相位特性可以设置4种不同的SPI通信操作模式。

  • Mode0:CKP=0,CKE =0:当空闲态时,SCK处于低电平,数据采样是在第1个边沿,也就是SCK由低电平到高电平的跳变,所以数据采样是在上升沿。
  • Mode1:CKP=0,CKE=1:当空闲态时,SCK处于低电平,数据采样是在第2个边沿,也就是SCK由低高电平到低电平的跳变,所以数据采样是在下降沿。
  • Mode2:CKP=1,CKE=0:当空闲态时,SCK处于高电平,数据采样是在第1个边沿,也就是SCK由高电平到低电平的跳变,所以数据采集样是在下降沿。
  • Mode3:CKP=1,CKE=1:当空闲态时,SCK处于高电平,数据发送是在第2个边沿,也就是SCK由低电平到高电平的跳变,所以数据采集样是在上升沿。

在这里插入图片描述

多个从模块

有两种方法可以将多个从设备连接到主设备:多片选和菊花链。

多片选

通常,每个从机都需要一条单独的SS线。如果要和特定的从机进行通讯,可以将相应的NSS信号线拉低,并保持其他SS信号线的状态为高电平。

在这里插入图片描述

菊花链

串行连接最大缺点是一旦数据链路中的某设备发生故障的时候,它下面优先级较低的设备就不可能得到服务了。
另一方面,距离主机越远的从机,获得服务的优先级越低,所以需要安排好从机的优先级,并且设置总线检测器,如果某个从机超时,则对该从机进行短路,防止单个从机损坏造成整个链路崩溃的情况。

在这里插入图片描述

SPI的优缺点

优点

  1. 无起始位和停止位,因此数据位可以连续传输而不会被中断;
  2. 没有像I2C这样复杂的从设备寻址系统
  3. 数据传输速率比I2C更高(几乎快两倍);
  4. 分离的MISO和MOSI信号线,因此可以同时发送和接收数据
  5. 极其灵活的数据传输,不限于8位,它可以是任意大小的字;
  6. 非常简单的硬件结构。从站不需要唯一地址(与I2C不同)。从机使用主机时钟,不需要精密时钟振荡器/晶振(与UART不同)。不需要收发器(与CAN不同)。

缺点

  1. 使用四根信号线(I2C和UART使用两根信号线);
  2. 无法确认是否已成功接收数据(I2C拥有此功能);
  3. 没有任何形式的错误检查,如UART中的奇偶校验位;
  4. 只允许一个主设备
  5. 没有硬件从机应答信号(主机可能在不知情的情况下无处发送);
  6. 没有定义硬件级别的错误检查协议
  7. 与RS-232和CAN总线相比,只能支持非常短的距离

参考资料

一文搞懂SPI通信协议

SPI通讯协议的工作方式

深入理解SPi通讯协议,5分钟看懂!

I²C(Inter-Integrated Circuit)

简介

I²C(Inter-Integrated Circuit),中文应该叫集成电路总线,它是一种串行通信总线,使用多主从架构,是由飞利浦公司在1980年代初设计的,方便了主板、嵌入式系统或手机与周边设备组件之间的通讯。
由于其简单性,它被广泛用于微控制器与传感器阵列,显示器,IoT设备,EEPROM等之间的通信。

与 UART 通信一样,I2C 在设备之间只使用两根导线传输数据:

在这里插入图片描述

SDA (Serial Data) :主设备和从设备用于发送和接收数据的线路。
SCL (Serial Clock) :传输时钟信号的线路。

I2C 是一种串行通信协议,因此数据是沿着一条线(SDA 线)逐位传输的。

与 SPI 一样,I2C 也是同步的,因此bit的输出与bit的采样是通过主站和从站共享的时钟信号同步进行的。时钟信号始终由主站控制。

在这里插入图片描述

I²C是如何工作的

使用I2C,数据以消息的形式传输。消息被分成数据帧。每个消息包含一个地址帧,其中包含从设备的二进制地址,以及一个或多个包含正在传输的数据的数据帧。消息还包括每个数据帧之间的起始和停止条件、读/写位,以及ACK/NACK位:

在这里插入图片描述

Start and Stop Condition & Logic Signal & Read/Write Bit & ACK/NACK Bit

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

数据帧格式

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

I²C数据传输步骤

  1. 主设备通过将SDA线从高电压电平切换到低电压电平,然后将SCL线从高电平切换到低电平,向每个连接的从设备发送起始条件:
    在这里插入图片描述

  2. 主设备向每个从设备发送要进行通信的从设备的7位或10位地址,以及读/写位:
    在这里插入图片描述

  3. 每个从设备将主设备发送的地址与其自己的地址进行比较。如果地址匹配,从设备通过将SDA线拉低一个比特返回一个ACK位。如果主设备的地址与从设备的地址不匹配,从设备将保持SDA线高电平。
    在这里插入图片描述

  4. 主设备发送或接收数据帧:
    在这里插入图片描述

  5. 在每个数据帧传输后,接收设备向发送者返回另一个ACK位,以确认成功接收该帧:
    在这里插入图片描述

  6. 为了停止数据传输,主设备通过在将SCL置高之前将SDA置高,向从设备发送停止条件:
    在这里插入图片描述

多主或多从

单个主设备连接多个从机

I2C总线上的主设备使用7位地址对从设备进行寻址。可以挂接127个不同地址的I2C设备。常用IIC接口通用器件的器件地址是由种类型号寻址码组成的,共7位。如格式如下:

D7 D6 D5 D4 D3 D2 D1 D0

器件类型由:D7-D4 共4位决定的。这是由半导公司生产时就已固定此类型的了,也就是说这4位已是固定的。

用户自定义地址码:D3-D1共3位。这是由用户自己设置的,通常的作法如EEPROM这些器件是由外部IC的3个引脚所组合电平决定的(用常用的名字如A0,A1,A2),这也就是寻址码。这就是为什么同一IIC总线上同一型号的IC设备最多只能共挂8片的原因了

在这里插入图片描述

多个主设备连接多个从机

多个主设备可以连接到一个或多个从机。当两个主设备试图通过SDA线路同时发送或接收数据时,每个主设备都需要在发送消息之前检测SDA线是低电平还是高电平;如果SDA线为低电平,则意味着另一个主设备可以控制总线,并且主设备应等待发送消息。如果SDA线为高电平,则可以安全地发送消息。

在这里插入图片描述

I²C的优缺点

优点

  1. 只需两根电线
  2. 支持多个主站和多个从站
  3. ACK/NACK 位可确认每个帧是否传输成功
  4. 硬件没有 UART 那么复杂
  5. 众所周知且广泛使用的协议

缺点

  1. 数据传输速率比 SPI 慢
  2. 数据帧大小限于 8 位
  3. 需要比 SPI 更复杂的硬件来实现

参考资料

4分钟看懂!I2C通讯协议 最简单的总线通讯!

BASICS OF THE I2C COMMUNICATION PROTOCOL

TTL & RS232 &RS485 电平标准

TTL(Transistor Transistor Logic)

TTL(transistor transistor logic)即晶体管-晶体管逻辑电平。

TTL电平信号规定,+2.4V—+5V等价于逻辑“1”,0V—+0.4V等价于逻辑“0”(采用二进制来表示数据时)。

这样的数据通信及电平规定方式,被称做TTL(晶体管-晶体管逻辑电平)信号系统,这是计算机处理器控制的设备内部各部分之间通信的标准技术。

在这里插入图片描述

一般的电子设备用的多是TTL电平,但是它的驱动能力和抗干扰能力很差,不适合作为外部的通信标准,一些通信方式如RS232、RS485、USB等在传输线上使用的不是TTL电平,因此这些通信线上的信号在电子设备端要进行电平转换,才能够正常通信。

在这里插入图片描述

上面所说的串口就是使用的TTL电平标准进行通讯的

在这里插入图片描述

RS232(Recommended Standard 232)

简介

RS232是一种接口电气特性的标准,全称是数据终端设备( DTE)和数据通信设备(DCE)之间串行二进制数据交换接口技术标准,RS-232在1962年发布,命名为EIA-232-E(由于EIA提出的建议标准都是以“RS”作为前缀,所以在通讯工业领域,仍然习惯将上述标准以RS作前缀称谓,即RS232),作为工业标准,以保证不同厂家产品之间的兼容。

RS232通信时使用的DB9接口:
在这里插入图片描述

RS232的三线连接方式与TTL类似,有RX、TX和GND组成。5线则多出了RTS和CTS两个硬件流控管脚。

  • RTS(Request To Send):请求发送
  • CTS(Clear To Send):清除发送
    在这里插入图片描述

单片机输出的都是TTL电平,因此需要一个电平转换芯片,将单片机的TTL电平转换为RS232电平,这里使用的是MAX232转换芯片。
在这里插入图片描述

RS232的逻辑电平

如果单片机输出+2.4V~ +5V则MAX232输出-3V~-15V的电平
在这里插入图片描述
如果单片机输出+0V~ +0.8V则MAX232输出+3V~+15V的电平
在这里插入图片描述

在这里插入图片描述

正是由于RS232的逻辑电平范围比TTL增大了,使得RS232的抗干扰能力比TTL更强。

在这里插入图片描述

RS232存在的问题

RS232接口标准由于出现较早,所以其目前存在很多问题。

  1. 接口电平值较高,易损坏接口电路的芯片。又因为与TTL电平不兼容故需使用电平转换电路方能与TTL电路连接。
  2. 传输速率较低,大约为20Kbps;传输距离较短,大约为15米左右。
  3. 接口由三根线TX、RX、GND组成,没有构成差分线形式,容易产生共地共模干扰,抗干扰能力弱。

RS485(Recommended Standard 485)

简介

RS-485是一种工业控制环境中常用的通讯协议,它具有抗干扰能力强传输距离远的特点。RS-485通讯协议由RS-232协议改进而来,协议层不变,只是改进了物理层,因而保留了串口通讯协议应用简单的特点。

RS-485 属于电气标准,该标准定义了接口的物理层标准例如电压,阻抗等等,而不对软件协议,通信时序,通信数据给予定义。而是由用户或通用软件协议来定义。目前可以使用 RS-485 作为物理层的通用标准协议(纯软件协议)有工业 HART 总线,Modbus 协议和 Profibus DP 协议。

RS485的特点

  1. 支持多节点:一般最大支持 32 个节点。
  2. 传输距离远:最远通讯距离可达1200米。
  3. 抗干扰能力强:差分信号传输。
  4. 连接简单:只需要两根信号线(A+和B-)就可以进行正常的通信。

连接方式

在 RS485 通信网络中,通常会使用 485 收发器来转换 TTL 电平RS485 电平

节点中的串口控制器使用 RX 与 TX 信号线连接到 485 收发器上,而收发器通过差分线连接到网络总线

串口控制器与收发器之间一般使用 TTL 信号传输,收发器与总线则使用差分信号来传输。

发送数据时,串口控制器的 TX 信号经过收发器转换成差分信号传输到总线上。接收数据时,收发器把总线上的差分信号转化成 TTL 信号通过 RX 引脚传输到串口控制器中。

在总线的起止端分别加了一个 120 欧的匹配电阻。

在这里插入图片描述

使用MAX3485芯片实现TTL电平和RS485电平的转换:

在这里插入图片描述

RS485的逻辑电平

逻辑 1:两根信号线(A+和B-)的电压差在 +2V~+6V 之间。
在这里插入图片描述
逻辑 0:两根信号线(A+和B-)的电压差在 -2V~-6V 之间。
在这里插入图片描述

抗干扰性能

两个485设备之间通过两条双绞线进行连接,当信号在传输的过程中,受到干扰,由于两条线搅在一块,因此就会同时受到扰动,就会产生相同的偏差,但是RS485的逻辑电平是通过两条线的电压差判断的,因此受到的干扰并不会影响最终信号传输的效果,增强了信号传输过程中的抗干扰性能。
在这里插入图片描述

传输速度 VS 传输距离

RS485最大的传输距离为1200米,最高的传输速度为10Mbps,但是它的传输速度随着传输距离的增大而降低。
在这里插入图片描述

TTL转485电路

经典电路

在这里插入图片描述
注:RS485总线空闲状态时,电平不固定,增加A、B加上下拉电阻,提高通信稳定性。

接收数据:
默认没有数据时,TX为高电平,三极管导通,RE低电平使能,RO收数据有效,芯片max485为接收状态。

发送数据:
TX先下拉一个电平,表示开始发送数据,三极管截止,DE高电平发送使能,DI发数据有效,芯片max485为发送状态。

自动切换电路

在这里插入图片描述

注:TX、RX引脚均需上拉电阻

接收数据:
默认没有数据时,TX为高电平,三极管导通,RE低电平使能,RO收数据有效,芯片max485为接收状态。

发送数据:
发送数据引脚是 RS485_TX,应该 RS485_TX 发送1,AB发送1;RS485_TX 发送0,AB发送0。

  • 当 RS485_TX 发送1时:NPN三极管导通,RE和DE的引脚是低电平,发送禁止,接收使能,进入接收状态,MAX3485芯片的AB引脚进入高阻状态,因为R4把A拉高,R5把B拉低,所以,AB传输的是1。所以,当RS485_TX发送1时,AB引脚发送1。

  • 当 RS485_TX 发送0时:NPN三极管不导通,RE和DE的引脚是高电平,进入发送状态,SP3485芯片会把DI上的电平反应到AB引脚上输出,因为DI已经接地,所以AB引脚会传输0。所以,当RS485_TX发送0时,AB引脚发送0。

TTL RS232 RS485的区别

TTL、RS232和RS485都只是改变的物理层的信号传输的电平协议,并不关乎代码是如何实现的。

就比如我想用单片机的串口输出信息,那我可以直接接到另一个单片机的串口上,实现两个单片机的信息传输。我也可以在使用RS232电平协议进行传输数据,我只需要在两个单片机之前分别放一个MAX232转换芯片就可以,这样我就提高了两个单片机之间通信的抗干扰能力。进一步我也可以选择RS485电平协议进行通信,同样我只需要分别在两个单片机前面放一个SP3485芯片就可以,这样我就可以实现两个单片机之间的远距离通信,并且抗干扰能力也大大提高。

在这里插入图片描述

参考资料

【干货分享】2分钟快速了解电平通讯TTL、RS232、RS485

【干货分享】2分钟搞懂 RS232电平通讯,讲的太透了!什么时RS232标准?为什么有了RS232还要用RS485

【小元】两分钟告诉你!什么是RS485标准!为什么要把TTL电平转化成差分信号?

5分钟看懂!串口RS232 RS485最本质的区别!

什么是TTL?标准USB接口是TTL吗?RS232、RS422、RS485的区别?

RS485通信总线详解

电路基础知识——TTL转485电路

CAN(Controller Area Network)

简介

传统CAN 简介

CAN 是Controller Area Network(控制器局域网络)的缩写,是ISO 国际标准化的串行通信协议。为适应“减少线束的数量”、“通过多个LAN,进行大量数据的高速通信”的需要,1986 年德国电气商博世公司开发出面向汽车的CAN通信协议。

在这里插入图片描述
比如上图中,每个部分的多个器件都挂载在CAN总线上(一个CAN总线上的所有器件通讯速率必须相同),各个部分再汇集到网关,由网关分配实现各个不同速率的部分之间通讯,这样就很方便轻松实现了对汽车整体电控部分的检测与控制。

CAN FD 简介

因为每个CAN 数据帧只能包含8 个数据字节。此外,网络速度限制为1 Mbit/s,从而限制了数据生成功能的实现。CAN FD 解决了这些问题,使其具有前瞻性。

CAN FD (CAN with Flexible Data-Rate),字面意思上看,相较于CAN 多了FD (Flexible Data-Rate),
也就是“灵活数据速率”。

CAN FD 的优势

CAN FD 协议是由Bosch 以及行业专家预研开发的,并于2012 年发布。CAN FD 具有四个主要优点:

  1. 增加了数据的长度:CAN FD 每个数据帧最多支持64 个数据字节,而传统CAN 最多支持8个数据字节。这减少了协议开销,并提高了协议效率。
  2. 增加传输的速度:CAN FD 支持双比特率;与传统CAN 一样,标称(仲裁)比特率限制为1Mbit/s,而数据比特率则取决于网络拓扑/收发器。实际上,可以实现高达5 Mbit/s 的数据比特率(实际应用中可以达到8 Mbit/s,但没有标准)。
  3. 更好的可靠性:CAN FD 使用改进的循环冗余校验(CRC)和“受保护的填充位计数器”,从而降低了未被检测到的错误的风险。
  4. 平滑过渡:在一些特定的情况下CAN FD 能用在仅使用传统CAN 的ECU 上,这样就可以逐步引入CAN FD 节点,从而为OEM 简化程序和降低成本。

在这里插入图片描述

与传统CAN 相比,CAN FD 可以将网络带宽提高3 到8 倍,效率可从50% 提升到90%,从而为
数据的增长提供了一种简单的解决方案。

CAN 协议

物理层

与I2C、SPI 等具有时钟信号的同步通讯方式不同,CAN 通讯并不是以时钟信号来进行同步的,它是一种异步通讯,只具有CAN_High 和CAN_Low 两条信号线,共同构成一组差分信号线,以差分信号的形式进行通讯。

闭环总线网络

CAN 物理层的形式主要有两种,如下所示的图中的CAN 通讯网络是一种遵循ISO11898 标准的
高速、短距离“闭环网络”,它的总线最大长度为40m通信速度最高为1Mbps,总线的两端各
要求有一个“120 欧”的电阻。

在这里插入图片描述

开环总线网络

如下所示的图中的是遵循ISO11519-2 标准的低速、远距离“开环网络”,它的最大传输距离为
1km
最高通讯速率为125kbps,两根总线是独立的、不形成闭环,要求每根总线上各串联有一
个“2.2 千欧”的电阻。

在这里插入图片描述

ISO11898 和11519-2 协议的不同点

CAN 协议经ISO 标准化后有ISO11898 标准和ISO11519-2 标准两种。ISO11898 和ISO11519-2 标准对于数据链路层的定义相同,但物理层不同
ISO11898 是通信速度为125kbps-1Mbps 的CAN 高速通信标准。
ISO11519 是通信速度为125kbps 以下的CAN 低速通信标准。
在这里插入图片描述

差分信号

差分信号又称差模信号,与传统使用单根信号线电压表示逻辑的方式有区别,使用差分信号传输
时,需要两根信号线,这两个信号线的振幅相等,相位相反,通过两根信号线的电压差值来表示
逻辑0 和逻辑1。

在这里插入图片描述
相对于单信号线传输的方式,使用差分信号传输具有如下优点

  1. 抗干扰能力强,当外界存在噪声干扰时,几乎会同时耦合到两条信号线上,而接收端只关心两个信号的差值,所以外界的共模噪声可以被完全抵消。
  2. 能有效抑制它对外部的电磁干扰,同样的道理,由于两根信号的极性相反,他们对外辐射的电磁场可以相互抵消,耦合的越紧密,泄放到外界的电磁能量越少。
  3. 时序定位精确,由于差分信号的开关变化是位于两个信号的交点,而不像普通单端信号依靠高低两个阈值电压判断,因而受工艺、温度的影响小,能降低时序上的误差,同时也更适合于低幅度信号的电路。

在这里插入图片描述

由于差分信号线具有这些优点,所以在USB 协议485 协议以太网协议CAN 协议的物理层中,都使用了差分信号传输。

CAN 协议中的差分信号

CAN 协议中对它使用的CAN_High 及CAN_Low 表示的差分信号做了规定,以高速CAN 协议为例:

当表示逻辑1 时(隐性电平),CAN_High 和CAN_Low 线上的电压均为2.5v,即它们的电压差VH-VL=0V;
当表示逻辑0 时(显性电平),CAN_High 的电平为3.5V,CAN_Low 线的电平为1.5V,即它们的电压差为VH-VL=2V。

在这里插入图片描述
在CAN 总线中,必须使它处于隐性电平(逻辑1)显性电平(逻辑0) 中的其中一个状态。假如有两个CAN 通讯节点,在同一时间,一个输出隐性电平,另一个输出显性电平,类似I2C 总线的“线与”特性将使它处于显性电平状态,显性电平的名字就是这样来的,即可以认为显性具有优先的意味。

协议层

在这里插入图片描述

在这里插入图片描述

RTR:用来区分数据帧或者远程请求帧,如果是远程请求帧这一位是1,如果是数据帧这一位是0

控制码/控制段:IDE用来区分标准格式和拓展格式;DLC(Data Link Control)数据长度代码,它是二进制编码0-8
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

域段域段名位宽:bit描述
帧起始SOF(Start Of Frame)1数据帧起始标志,固定为1bit显性('b0)
仲裁段Identify(ID)11本数据帧的 ID 信息, ID 信息的作用:① 如果同时有多个节点发送数据时,作为优先级依据(仲裁机制);② 目标节点通过 ID 信息来接受数据(验收滤波技术)
RTRRemote Transmission Request BIT1RTR标识是否是远程帧(0,数据帧;1,远程帧),在数据帧里这一位为显性('b0)
IDEIdentifier Extension Bit1IDE用于区分标准格式与扩展格式,在标准格式中 IDE 位为显性(‘b0),在扩展格式里 IDE 位为隐性(’b1)
R0保留位11bit保留位,固定为1’b0
DLCdata length4由 4 位组成,MSB 先行(高位先行),它的二进制编码用于表示本报文中的数据段含有多少个字节,DLC 段表示的数字为0到8,若接收方接收到 9~15 的时候并不认为是错误
数据段data0~64据帧的核心内容,它由 0~8 个字节(0 ~ 64位)组成,MSB 先行
CRC段CRC15段用于检查帧传输错误,发送方以一定的方法计算包括:帧起始、仲裁段、控制段、数据段;接收方以同样的算法计算 CRC 值并进行比较,如果不同则会向发送端反馈出错信息,重新发送;计算和出错处理一般由 CAN 控制器硬件完成或由软件控制最大重发数。
CRC界定符1CRC 界定符(用于分隔的位),为隐性位(1’b1),主要作用是把CRC 校验码与后面的 ACK 段间隔起来
ACK 槽ACK slot1在 ACK 槽位中,发送端发送的为隐性位,而接收端则在这一位中发送显性位以示应答;发送 ACK/返回 ACK这个过程使用到回读机制,即发送方先在 ACK 槽发送隐性位后,回读到的总线上的电平为显性0,发送方才知道它发送成功了,不用重发
ACK界定符1在 ACK 槽和帧结束之间由 ACK 界定符间隔开,为隐性位
帧结束EOF7由发送端发送 7 个隐性位表示结束

参考资料

Logo[野火]瑞萨RA系列FSP库开发实战指南——基于野火启明开发板

CAN总线协议

趋近于完美的通讯 CAN总线!4分钟看懂!

RS232 & RS485 & CAN & IIC & SPI 的对比

在这里插入图片描述

CRC校验(循环冗余校验)

简介

CRC(Cyclic Redundancy Check)循环冗余检验,是一种用于检测数字数据错误的技术。其特征是信息字段和校验字段的长度可以任意选定。

基础概念

模2除法

也叫模2运算,就是结果除以2后取余数。模2除法每一位除的结果不影响其它位,即不向上一位借位,所以实际上就是异或。在CRC计算中有应用到模2除法。
在这里插入图片描述

多项式与二进制

二进制可表示成多项式的形式,比如二进制1101表示为: x3+x2+x0;1011表示为:x3+x1+x0。

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

CRC校验原理

CRC校验本质上是选取一个合适的除数,要进行校验的数据是被除数,然后做模2除法,得到的余数就是CRC校验值

下面用具体的例子做讲解:给定一组数据A:10110011(二进制),选取除数B:11001。

  1. 首先需要在被除数A后加4个比特位0(具体加几个0是根据除数B的位数决定的,比如这里B是5位,那么A后面加4个0;如果B选6位,则A后面加5个0,总之加的0的个数比除数B的个数少1位)。
  2. 进行模2除法运算。注意每次都是模2运算,即异或。
  3. 最后得到余数C就是CRC校验值。注意余数位数必须比除数少1位,如果不够前面加0补齐。运算如下图所示

在这里插入图片描述

CRC计算步骤

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

常见CRC参数模型

CRC算法名称多项式公式宽度多项式(16进制)初始值(16进制)结果异或值(16进制)输入值反转输出值反转
CRC-4/ITUx4 + x + 14030000truetrue
CRC-5/EPCx4 + x3 + 15090900falsefalse
CRC-5/ITUx5 + x4 + x2 + 15150000truetrue
CRC-5/USBx5 + x2 + 15051F1Ftruetrue
CRC-6/ITUx6 + x + 16030000truetrue
CRC-7/MMCx7 + x3 + 17090000falsefalse
CRC-8x8 + x2 + x + 18070000falsefalse
CRC-8/ITUx8 + x2 + x + 18070055falsefalse
CRC-8/ROHCx8 + x2 + x + 1807FF00truetrue
CRC-8/MAXIMx8 + x5 + x4 + 18310000truetrue
CRC-16/IBMx16 + x15 + x2 + 116800500000000truetrue
CRC-16/MAXIMx16 + x15 + x2 + 11680050000FFFFtruetrue
CRC-16/USBx16 + x15 + x2 + 1168005FFFFFFFFtruetrue
CRC-16/MODBUSx16 + x15 + x2 + 1168005FFFF0000truetrue
CRC-16/CCITTx16 + x12 + x5 + 116102100000000truetrue
CRC-16/CCITT-FALSEx16 + x12 + x5 + 1161021FFFF0000falsefalse
CRC-16/x5x16 + x12 + x5 + 1161021FFFFFFFFtruetrue
CRC-16/XMODEMx16 + x12 + x5 + 116102100000000falsefalse
CRC-16/DNPx16 + x13 + x12 + x11 + x10 + x8 + x6 + x5 + x2 + 1163D650000FFFFtruetrue
CRC-32x32 + x26 + x23 + x22 + x16 + x12 + x11 + x10 + x8 + x7 + x5 + x4 + x2 + x + 13204C11DB7FFFFFFFFFFFFFFFFtruetrue
CRC-32/MPEG-2x32 + x26 + x23 + x22 + x16 + x12 + x11 + x10 + x8 + x7 + x5 + x4 + x2 + x + 13204C11DB7FFFFFFFF00000000falsefalse

参考资料

CRC校验原理及步骤

【科普】CRC校验(一)什么是CRC校验?

一个视频看懂CRC校验

[CRC校验]手算与直观演示

CRC校验详解(附代码示例)

这篇关于常用的通信协议的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1049392

相关文章

React+TS前台项目实战(十七)-- 全局常用组件Dropdown封装

文章目录 前言Dropdown组件1. 功能分析2. 代码+详细注释3. 使用方式4. 效果展示 总结 前言 今天这篇主要讲全局Dropdown组件封装,可根据UI设计师要求自定义修改。 Dropdown组件 1. 功能分析 (1)通过position属性,可以控制下拉选项的位置 (2)通过传入width属性, 可以自定义下拉选项的宽度 (3)通过传入classN

帆软报表常用操作

欢迎来到我的博客,代码的世界里,每一行都是一个故事 🎏:你只管努力,剩下的交给时间 🏠 :小破站 帆软报表常用操作 多序号实现使用数据集作为参数空白页或者竖线页修改页面Title金额,或者保留两位小数等等设置日期格式显示图片使用公式 多序号实现 所用函数为SEQ(),如果一张报表中需要用到多个序号,那么就需要加入参数SEQ(1),SEQ(

常用MQ消息中间件Kafka、ZeroMQ和RabbitMQ对比及RabbitMQ详解

1、概述   在现代的分布式系统和实时数据处理领域,消息中间件扮演着关键的角色,用于解决应用程序之间的通信和数据传递的挑战。在众多的消息中间件解决方案中,Kafka、ZeroMQ和RabbitMQ 是备受关注和广泛应用的代表性系统。它们各自具有独特的特点和优势,适用于不同的应用场景和需求。   Kafka 是一个高性能、可扩展的分布式消息队列系统,被设计用于处理大规模的数据流和实时数据传输。它

XMG 常用的手势

// 创建点按手势     UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap:)];    tap.numberOfTabsRequired=2; //点击的次数

Avalonia 常用控件二 Menu相关

1、Menu 添加代码如下 <Button HorizontalAlignment="Center" Content="Menu/菜单"><Button.Flyout><MenuFlyout><MenuItem Header="打开"/><MenuItem Header="-"/><MenuItem Header="关闭"/></MenuFlyout></Button.Flyout></B

Git代码管理的常用操作

在VS022中,Git的管理要先建立本地或远程仓库,然后commit到本地,最后push到远程代码库。 或者不建立本地的情况,直接拉取已有的远程代码。 Git是一个分布式版本控制系统,用于跟踪和管理文件的变化。它可以记录文件的修改历史,并且可以轻松地回滚到任何历史版本。 Git的基本概念包括: 仓库(Repository):Git使用仓库来存储文件的版本历史。一个仓库可以包含多个文件

MyBatis-Plus常用注解详解与实战应用

MyBatis-Plus 是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。它提供了大量的常用注解,使得开发者能够更方便地进行数据库操作。 MyBatis-Plus 提供的注解可以帮我们解决一些数据库与实体之间相互映射的问题。 @TableName @TableName 用来指定表名 在使用 MyBatis-Plus 实现基本的 C

linux常用API接口

linux常用API接口 文章目录 linux常用API接口1.应用层内存映射mmap取消内存映射munmap终端打印可用方式1.puts 函数2.文件操作函数 fprintf3.字符输出函数 putchar4.fwrite 函数 2.内核层 1.应用层 内存映射mmap mmap 是一个用于内存映射的系统调用,它可以将一个文件或设备中的内容映射到进程的地址空间中,允许程

netty中常用概念的理解

目录   目录ChannelHandler ChannelHandler功能介绍通过ChannelHandlerAdapter自定义拦截器ChannelHandlerContext接口ChannelPipeline ChannelPipeline介绍ChannelPipeline工作原理ChannelHandler的执行顺序   在《Netty权威指南》(第二版)中,ChannelP

Android 常用正则工具

支持 手机号、座机号、身份证、微信号、密码、QQ、邮箱正则 import java.util.regex.Pattern;public class Validator {/*** 手机号正则*/public static String REGEX_PHONE = "^(13[0-9]|14[5-9]|15[0-3,5-9]|16[2,5,6,7]|17[0-8]|18[0-9]|19[1,3,5