最近在做项目,用到了一些通信协议,这里详细整理一下相关的通信协议,方便以后查阅。
常用的通信协议
- 单工 半双工 全双工
- 单工通信(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位数据总线,每个时钟脉冲发送一个字节。
主要特点:
-
各数据位同时传输,传输速度快、效率高,多用在实时、快速的场合。
-
并行通信不能长距离通信,抗干扰能力差。
串行通信(Serial Commmunication)
简称串口(串行接口),指数据一位一位地顺序传送。
常用总线; I²C、SPI、UART
主要特点:
- 按bit逐位传输,效率低
- 只需要一根数据线,设计简单
分类:
串行通信根据发送时钟源和接收时钟源是否保持一致,又分为同步通信和异步通信。
参考资料
2.2 数据通信方式:单工通信、半双工通信和全双工通信,并行通信和串行通信,异步传输和同步传输。
通信教程01_什么是并行通信?什么是串行通信?
Parallel vs serial communication
四分钟搞定【同步通信-异步通信-全双工通信-串行通信-并行通信】
同步串行通信 VS 异步串行通信
同步串行通信(Synchronous Serial Communication)
信息发送设备与信息接收设备需要时钟同步信号,两者间除数据线连接还需要额外的时钟线连接。
举例: I²C、SPI
异步通信(Asynchronous Serial Communication)
信息发送设备与信息接收设备之间无时钟连接,信息中包含特殊标志位Start/Stop,接收设备根据特殊标志利用本地时钟对数据采样。
举例:UART
同步通信与异步通信区别
- 同步通信要求接收端时钟频率和发送端时钟频率一致,发送端发送连续的比特流;异步通信时不要求接收端时钟和发送端时钟同步,发送端发送完一个字节后,可经过任意长的时间间隔再发送下一个字节。
- 同步通信效率高;异步通信效率较低。
- 同步通信较复杂,双方时钟的允许误差较小;异步通信简单,双方时钟可允许一定误差。
- 同步通信可用于点对多点;异步通信只适用于点对点。
参考资料
四分钟搞定【同步通信-异步通信-全双工通信-串行通信-并行通信】
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传输步骤
-
发送UART从数据总线并行接收数据。
-
发送UART将起始位、奇偶校验位和停止位添加到数据帧。
-
从起始位到结束位,整个数据包以串行方式从发送UART送至接收UART。接收UART以预配置的波特率对数据线进行采样。
-
接收UART丢弃数据帧中的起始位、奇偶校验位和停止位。
-
接收UART将串行数据转换回并行数据,并将其传输到接收端的数据总线。
UART的优缺点
优点
- 仅使用两根导线
- 不需要时钟信号
- 具有奇偶校验位以进行错误检查
- 只要双方都设置为相同的数据包结构,数据包的结构可以更改
- 文档充分且广泛使用的方法
缺点
- 数据帧的大小限制在最多9位
- 不支持多从机或多主机系统
- 每个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数据传输步骤
-
主设备输出时钟信号:
-
主设备将SS/CS引脚切换到低电压状态,激活从设备:
-
主设备逐位通过MOSI线向从设备发送数据。从设备接收数据位时逐位读取:
-
如果需要响应,从设备通过MISO线逐位向主设备返回数据。主设备在接收到数据位时逐位读取:
例如,下图示例中简单模拟SPI通信流程,主机拉低NSS片选信号,启动通信,并且产生时钟信号,上升沿触发边沿信号,主机在MOSI线路一位一位发送数据0X53,在MISO线路一位一位接收数据0X46,如下图所示:
时钟模式
SPI时钟特点主要包括:时钟速率、时钟极性和时钟相位三方面。
时钟速率
SPI总线上的主设备必须在通信开始时候配置并生成相应的时钟信号。
从理论上讲,只要实际可行,时钟速率就可以是你想要的任何速率,当然这个速率受限于每个系统能提供多大的系统时钟频率,以及最大的SPI传输速率。
时钟极性
根据硬件制造商的命名规则不同,时钟极性通常写为CKP或CPOL。
- CKP = 0:时钟空闲IDLE为低电平 0;
- CKP = 1:时钟空闲IDLE为高电平1。
时钟相位
根据硬件制造商的不同,时钟相位通常写为CKE或CPHA。
- 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的优缺点
优点
- 无起始位和停止位,因此数据位可以连续传输而不会被中断;
- 没有像I2C这样复杂的从设备寻址系统;
- 数据传输速率比I2C更高(几乎快两倍);
- 分离的MISO和MOSI信号线,因此可以同时发送和接收数据;
- 极其灵活的数据传输,不限于8位,它可以是任意大小的字;
- 非常简单的硬件结构。从站不需要唯一地址(与I2C不同)。从机使用主机时钟,不需要精密时钟振荡器/晶振(与UART不同)。不需要收发器(与CAN不同)。
缺点
- 使用四根信号线(I2C和UART使用两根信号线);
- 无法确认是否已成功接收数据(I2C拥有此功能);
- 没有任何形式的错误检查,如UART中的奇偶校验位;
- 只允许一个主设备;
- 没有硬件从机应答信号(主机可能在不知情的情况下无处发送);
- 没有定义硬件级别的错误检查协议;
- 与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数据传输步骤
-
主设备通过将SDA线从高电压电平切换到低电压电平,然后将SCL线从高电平切换到低电平,向每个连接的从设备发送起始条件:
-
主设备向每个从设备发送要进行通信的从设备的7位或10位地址,以及读/写位:
-
每个从设备将主设备发送的地址与其自己的地址进行比较。如果地址匹配,从设备通过将SDA线拉低一个比特返回一个ACK位。如果主设备的地址与从设备的地址不匹配,从设备将保持SDA线高电平。
-
主设备发送或接收数据帧:
-
在每个数据帧传输后,接收设备向发送者返回另一个ACK位,以确认成功接收该帧:
-
为了停止数据传输,主设备通过在将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的优缺点
优点
- 只需两根电线
- 支持多个主站和多个从站
- ACK/NACK 位可确认每个帧是否传输成功
- 硬件没有 UART 那么复杂
- 众所周知且广泛使用的协议
缺点
- 数据传输速率比 SPI 慢
- 数据帧大小限于 8 位
- 需要比 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接口标准由于出现较早,所以其目前存在很多问题。
- 接口电平值较高,易损坏接口电路的芯片。又因为与TTL电平不兼容故需使用电平转换电路方能与TTL电路连接。
- 传输速率较低,大约为20Kbps;传输距离较短,大约为15米左右。
- 接口由三根线TX、RX、GND组成,没有构成差分线形式,容易产生共地共模干扰,抗干扰能力弱。
RS485(Recommended Standard 485)
简介
RS-485是一种工业控制环境中常用的通讯协议,它具有抗干扰能力强、传输距离远的特点。RS-485通讯协议由RS-232协议改进而来,协议层不变,只是改进了物理层,因而保留了串口通讯协议应用简单的特点。
RS-485 属于电气标准,该标准定义了接口的物理层标准例如电压,阻抗等等,而不对软件协议,通信时序,通信数据给予定义。而是由用户或通用软件协议来定义。目前可以使用 RS-485 作为物理层的通用标准协议(纯软件协议)有工业 HART 总线,Modbus 协议和 Profibus DP 协议。
RS485的特点
- 支持多节点:一般最大支持 32 个节点。
- 传输距离远:最远通讯距离可达1200米。
- 抗干扰能力强:差分信号传输。
- 连接简单:只需要两根信号线(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 具有四个主要优点:
- 增加了数据的长度:CAN FD 每个数据帧最多支持64 个数据字节,而传统CAN 最多支持8个数据字节。这减少了协议开销,并提高了协议效率。
- 增加传输的速度:CAN FD 支持双比特率;与传统CAN 一样,标称(仲裁)比特率限制为1Mbit/s,而数据比特率则取决于网络拓扑/收发器。实际上,可以实现高达5 Mbit/s 的数据比特率(实际应用中可以达到8 Mbit/s,但没有标准)。
- 更好的可靠性:CAN FD 使用改进的循环冗余校验(CRC)和“受保护的填充位计数器”,从而降低了未被检测到的错误的风险。
- 平滑过渡:在一些特定的情况下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。
相对于单信号线传输的方式,使用差分信号传输具有如下优点:
- 抗干扰能力强,当外界存在噪声干扰时,几乎会同时耦合到两条信号线上,而接收端只关心两个信号的差值,所以外界的共模噪声可以被完全抵消。
- 能有效抑制它对外部的电磁干扰,同样的道理,由于两根信号的极性相反,他们对外辐射的电磁场可以相互抵消,耦合的越紧密,泄放到外界的电磁能量越少。
- 时序定位精确,由于差分信号的开关变化是位于两个信号的交点,而不像普通单端信号依靠高低两个阈值电压判断,因而受工艺、温度的影响小,能降低时序上的误差,同时也更适合于低幅度信号的电路。
由于差分信号线具有这些优点,所以在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 信息来接受数据(验收滤波技术) |
RTR | Remote Transmission Request BIT | 1 | RTR标识是否是远程帧(0,数据帧;1,远程帧),在数据帧里这一位为显性('b0) |
IDE | Identifier Extension Bit | 1 | IDE用于区分标准格式与扩展格式,在标准格式中 IDE 位为显性(‘b0),在扩展格式里 IDE 位为隐性(’b1) |
R0 | 保留位 | 1 | 1bit保留位,固定为1’b0 |
DLC | data length | 4 | 由 4 位组成,MSB 先行(高位先行),它的二进制编码用于表示本报文中的数据段含有多少个字节,DLC 段表示的数字为0到8,若接收方接收到 9~15 的时候并不认为是错误 |
数据段 | data | 0~64 | 据帧的核心内容,它由 0~8 个字节(0 ~ 64位)组成,MSB 先行 |
CRC段 | CRC | 15 | 段用于检查帧传输错误,发送方以一定的方法计算包括:帧起始、仲裁段、控制段、数据段;接收方以同样的算法计算 CRC 值并进行比较,如果不同则会向发送端反馈出错信息,重新发送;计算和出错处理一般由 CAN 控制器硬件完成或由软件控制最大重发数。 |
CRC界定符 | 1 | CRC 界定符(用于分隔的位),为隐性位(1’b1),主要作用是把CRC 校验码与后面的 ACK 段间隔起来 | |
ACK 槽 | ACK slot | 1 | 在 ACK 槽位中,发送端发送的为隐性位,而接收端则在这一位中发送显性位以示应答;发送 ACK/返回 ACK这个过程使用到回读机制,即发送方先在 ACK 槽发送隐性位后,回读到的总线上的电平为显性0,发送方才知道它发送成功了,不用重发 |
ACK界定符 | 1 | 在 ACK 槽和帧结束之间由 ACK 界定符间隔开,为隐性位 | |
帧结束 | EOF | 7 | 由发送端发送 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。
- 首先需要在被除数A后加4个比特位0(具体加几个0是根据除数B的位数决定的,比如这里B是5位,那么A后面加4个0;如果B选6位,则A后面加5个0,总之加的0的个数比除数B的个数少1位)。
- 进行模2除法运算。注意每次都是模2运算,即异或。
- 最后得到余数C就是CRC校验值。注意余数位数必须比除数少1位,如果不够前面加0补齐。运算如下图所示
CRC计算步骤
常见CRC参数模型
CRC算法名称 | 多项式公式 | 宽度 | 多项式(16进制) | 初始值(16进制) | 结果异或值(16进制) | 输入值反转 | 输出值反转 |
---|---|---|---|---|---|---|---|
CRC-4/ITU | x4 + x + 1 | 4 | 03 | 00 | 00 | true | true |
CRC-5/EPC | x4 + x3 + 1 | 5 | 09 | 09 | 00 | false | false |
CRC-5/ITU | x5 + x4 + x2 + 1 | 5 | 15 | 00 | 00 | true | true |
CRC-5/USB | x5 + x2 + 1 | 5 | 05 | 1F | 1F | true | true |
CRC-6/ITU | x6 + x + 1 | 6 | 03 | 00 | 00 | true | true |
CRC-7/MMC | x7 + x3 + 1 | 7 | 09 | 00 | 00 | false | false |
CRC-8 | x8 + x2 + x + 1 | 8 | 07 | 00 | 00 | false | false |
CRC-8/ITU | x8 + x2 + x + 1 | 8 | 07 | 00 | 55 | false | false |
CRC-8/ROHC | x8 + x2 + x + 1 | 8 | 07 | FF | 00 | true | true |
CRC-8/MAXIM | x8 + x5 + x4 + 1 | 8 | 31 | 00 | 00 | true | true |
CRC-16/IBM | x16 + x15 + x2 + 1 | 16 | 8005 | 0000 | 0000 | true | true |
CRC-16/MAXIM | x16 + x15 + x2 + 1 | 16 | 8005 | 0000 | FFFF | true | true |
CRC-16/USB | x16 + x15 + x2 + 1 | 16 | 8005 | FFFF | FFFF | true | true |
CRC-16/MODBUS | x16 + x15 + x2 + 1 | 16 | 8005 | FFFF | 0000 | true | true |
CRC-16/CCITT | x16 + x12 + x5 + 1 | 16 | 1021 | 0000 | 0000 | true | true |
CRC-16/CCITT-FALSE | x16 + x12 + x5 + 1 | 16 | 1021 | FFFF | 0000 | false | false |
CRC-16/x5 | x16 + x12 + x5 + 1 | 16 | 1021 | FFFF | FFFF | true | true |
CRC-16/XMODEM | x16 + x12 + x5 + 1 | 16 | 1021 | 0000 | 0000 | false | false |
CRC-16/DNP | x16 + x13 + x12 + x11 + x10 + x8 + x6 + x5 + x2 + 1 | 16 | 3D65 | 0000 | FFFF | true | true |
CRC-32 | x32 + x26 + x23 + x22 + x16 + x12 + x11 + x10 + x8 + x7 + x5 + x4 + x2 + x + 1 | 32 | 04C11DB7 | FFFFFFFF | FFFFFFFF | true | true |
CRC-32/MPEG-2 | x32 + x26 + x23 + x22 + x16 + x12 + x11 + x10 + x8 + x7 + x5 + x4 + x2 + x + 1 | 32 | 04C11DB7 | FFFFFFFF | 00000000 | false | false |
参考资料
CRC校验原理及步骤
【科普】CRC校验(一)什么是CRC校验?
一个视频看懂CRC校验
[CRC校验]手算与直观演示
CRC校验详解(附代码示例)