工业通信原理——CAN通信精讲
前言
CAN总线是一种用于在控制系统中进行通信的串行总线标准,常用于汽车、工业控制等领域。它允许多个设备在同一总线上进行通信,而不需要中央控制器,因此具有分布式、实时性强等特点。
CAN总线的报文格式通常分为两种:数据帧(Data Frame)和远程帧(Remote Frame)。
-
数据帧(Data Frame):
- 起始符(SOF):1位,指示数据帧的开始。
- 标识符(Identifier):11位或29位,用于标识数据帧的优先级和发送者。
- 控制字段(Control Field):6位或8位,包括数据长度、帧格式和远程传输请求等信息。
- 数据域(Data Field):0-64位,存放实际的数据。
- CRC(Cyclic Redundancy Check):15位或17位,用于检测数据帧的错误。
- 确认位(ACK):2位,用于确认数据帧的接收。
- 结束符(EOF):7位,指示数据帧的结束。
-
远程帧(Remote Frame):
- 起始符(SOF):1位。
- 标识符(Identifier):11位或29位。
- 控制字段(Control Field):6位或8位,包括帧格式和远程传输请求等信息。
- 结束符(EOF):7位。
CAN通信的发送过程如下:
-
发送准备:
发送节点首先检查总线是否空闲,然后选择一个合适的优先级,并将数据填充到数据域中,计算CRC,并准备发送数据帧或远程帧。 -
发送数据帧或远程帧:
- 对于数据帧,发送节点发送起始符、标识符、控制字段、数据域、CRC和结束符,并等待接收节点的确认。
- 对于远程帧,发送节点发送起始符、标识符、控制字段和结束符。
-
接收和确认:
- 接收节点接收到数据帧或远程帧后,进行CRC校验。
- 如果CRC校验通过,接收节点发送ACK确认信号,表示数据帧或远程帧接收成功。
- 如果CRC校验失败,接收节点不发送ACK,发送节点会认为数据帧或远程帧发送失败,并尝试重新发送。
-
冲突检测和处理:
- 如果多个节点同时发送数据,可能会发生冲突。
- CAN总线上的节点会检测到冲突,并进行冲突处理,通常是采用非破坏性的冲突检测和重发机制。
总的来说,CAN总线使用数据帧和远程帧进行通信,具有高效、可靠、实时性好等特点,适用于需要高速数据传输和实时响应的应用场景。
数据帧详解
当我们深入了解CAN总线的数据帧时,可以将其分解为以下几个部分,以便更详细地理解每个字段的作用和含义:
- 起始符(Start of Frame, SOF):数据帧的起始位,总是为逻辑0。它指示了数据帧的开始,帮助接收节点正确定时接收数据。
- 标识符&#x