本文目录
- 一、基础知识点
- 二、CAN协议
- 1. 数据帧
- 2. 遥控帧
- 3. 错误帧
- 4. 过载帧
- 5. 帧间隔

一、基础知识点
-
什么是CAN总线?
CAN (Controller Area Network) 是博世公司于 1986 年开发的一种串行通信协议,主要应用于汽车领域。CAN 协议的诞生是为了减少汽车中线束的数量,使得汽车中的电子控制单元(ECU)能够互相通信。ECU 是汽车中的最小控制模块,通过 CAN 总线,各个 ECU 模块可以在同一个局域网内实现高效的数据传输和通信。CAN 总线就像是汽车电子的“局域网”,让不同模块之间能够无缝协作。 -
CAN标准
ISO 11898(高速 CAN):该标准定义了 CAN 的通信速率范围为 125 kbps 到 1 Mbps,主要用于需要高速数据传输的应用场景,如动力总成和汽车的关键控制系统。
ISO 11519(低速 CAN):该标准定义了 CAN 的通信速率低于 125 kbps,适用于对传输速度要求不高、但对抗干扰和容错能力要求较高的应用场景,如车内的舒适性系统和传感器网络。 -
CAN收发器
CAN收发器主要功能是将CAN控制器的TTL信号转换成CAN总线的差分信号。
-
两台设备使用CAN总线的硬件连接
(1)CPU自带CAN控制器
(2)CPU不带CAN控制器
can 总线俩端 120欧姆为终端电阻,是为了消除总线上的信号反射。上图中当然可以一台设备的cpu带CAN控制器,一台设备不带CAN控制器也可以相互通信。 -
CAN的电气属性
使用差分信号,当 CANH(CAN 高线)和 CANL(CAN 低线)之间的电压相等(CANH = CANL = 2.5V),总线上处于隐形状态,这代表逻辑“1”。当 CANH 和 CANL 之间的电压相差 2V(CANH = 3.5V,CANL = 1.5V),总线进入显性状态,代表逻辑“0”。
由于 CAN 使用差分信号传输,这种设计能够很好地抵抗电磁干扰。物理层通常采用双绞线作为传输介质,进一步增强了抗干扰能力,确保数据传输的稳定性和可靠性。
二、CAN协议
CAN 通信通过以下 5 种类型的帧进行:
类型 | 作用 |
---|---|
数据帧 | 用于发送实际数据,包含要传输的消息内容。 |
遥控帧 | 用于请求数据帧,没有实际数据,只是请求其他节点发送某个数据帧。 |
错误帧 | 用于检测和报告传输过程中的错误,确保总线的通信完整性。 |
过载帧 | 用于向总线发出过载信号,以延迟数据传输。 |
帧间隔 | 用于区分相邻帧,提供帧之间的间隔。 |
另外,数据帧和遥控帧有标准格式和扩展格式两种格式。标准格式有 11个位的标识符(称 ID),扩展格式有 29个位的ID。
1. 数据帧
(1)概念:CAN 通信主要通过数据帧来发送数据,数据帧负责携带数据,从发送设备传输到接收设备。
(2)类型:标准数据帧(常用):使用 11 位的标识符。扩展数据帧:使用 29 位的标识符。
(3)标准数据帧格式: 标准数据帧格式包含 7 个不同的位场。
位场 | 作用 |
---|---|
帧起始 | 标识数据帧的开始。 |
仲裁字段 | 用于决定总线的优先级,包含 11 位标识符和远程请求位。 |
控制字段 | 用于表示数据长度(数据长度代码,DLC),决定数据字段的字节数。 |
数据字段 | 实际传输的数据内容,长度为 0-8 字节。 |
CRC 字段 | 用于传输过程中的错误检测,包含 CRC 校验值和 CRC 定界符。 |
ACK应答字段 | 接收节点发送确认信号,表示成功接收到数据。 |
帧结束 | 标识数据帧的结束,帧终止。 |
(4)帧格式分析
●帧起始和帧结束
帧起始:由1个显性位(逻辑“0”)组成,表示数据帧的开始。
帧结束:由7个连续的隐性位(逻辑“1”)组成,表示数据帧的结束。
●仲裁字段: 仲裁字段包括 11 位 ID 位,1位 RTR 位,共 12 位。
ID 位:仲裁字段包括 11 位的标识符(ID 位),用于区分不同功能的数据帧,也用于确定优先级。根据 CAN 总线的仲裁机制,ID 值越小,优先级越高。当多个节点同时发送时,ID 小的数据帧会优先传输。禁止设置高7位为隐性(禁止设定 ID = 1111111xxXX),因为这种情况下仲裁会受到影响。
RTR 位:远程传输请求(Remote Transmission Request,RTR)标志位,用于区分数据帧和遥控帧。数据帧的 RTR 位必须为显性 0(逻辑“0”)。遥控帧的 RTR 位必须为隐性 1(逻辑“1”)
在仲裁规则中,若数据帧和遥控帧具有相同的 ID,则数据帧的优先级大于遥控帧。
●控制字段:包含1 位 IDE 位、1 位 R0 保留位、4 位 DLC 位。
IDE 位:用于区分数据帧类型。标准数据帧的 IDE 位固定为显性 0(逻辑“0”),扩展数据帧的 IDE 位为隐性 1(逻辑“1”)。
R0 位:保留位,固定为显性 0(逻辑“0”),目前没有特定用途。
DLC 位:4 位数据长度代码(DLC),用于表示数据字段中包含的数据字节数,范围为 0 到 8 字节。
●数据字段:数据字段可以承载 0 到 64 位的数据,也就是 0 到 8 字节的数据。这是实际传输的数据内容。
●CRC 校验字段:由 15 位 CRC 校验位和 1 位 CRC 界定符组成。
前 15 位用于 CRC 校验,确保传输过程中的数据完整性。
CRC 界定符:必须为隐性 1(逻辑“1”),用来分隔 CRC 校验位和后续字段。
●ACK 字段:ACK 字段由 2 位组成:1 位确认槽位和 1 位确认界定符。
&emsp确认槽位:接收方在此位置发送显性位(逻辑“0”)来表示成功接收数据。
&emsp确认界定符:必须为隐性 1(逻辑“1”),用于确认信号的分隔。
2. 遥控帧
遥控帧与数据帧的主要区别在于没有数据字段,因此遥控帧可以看作是去掉数据字段的数据帧。有些资料中也称遥控帧为远程帧。和数据帧一样,遥控帧也分为两种格式:标准格式和扩展格式。两种格式的遥控帧都包含以下 6 个部分:帧起始、仲裁字段、控制字段、CRC字段、应答字段、帧结尾。
●遥控帧用于接收设备主动请求数据。具体流程如下:
(1)发送方的正常广播:发送设备通过 CAN 总线广播数据帧,其他设备通过 ID 来识别并接收自己需要的数据。
(2)接收方的请求:如果接收设备需要的数据还没有被发送方广播,它可以通过发送一个遥控帧来请求该数据。遥控帧与数据帧类似,但没有携带实际数据,而是用相同的 ID 表示请求的内容。
(3)发送方响应:当其他设备(通常是拥有该数据的发送设备)接收到这个遥控帧后,它会识别出这是一个数据请求,并根据 ID 确定需要发送的数据内容。
(4)广播数据:发送设备在响应遥控帧后,会通过 CAN 总线广播该请求的数据帧,所有接收设备(包括发送遥控帧的接收方)都可以接收并使用这条数据。
因此,遥控帧的作用是让接收设备在需要特定数据时,主动发出请求,触发发送设备广播该数据,确保接收方能够得到所需的数据。
3. 错误帧
错误帧是在 CAN 总线通信中用于检测和报告错误的特殊帧。当某个节点检测到数据传输过程中发生错误时,会立即发送错误帧,通知其他节点停止当前数据传输,并重发数据帧。通过错误帧,CAN 总线确保了通信的可靠性,并且在发生错误时可以进行快速恢复和数据重发。
●错误帧由两个部分组成:错误标志(主动、被动)、错误定界符。
主动错误标志:由 6 个连续的显性位(逻辑“0”)组成,用于主动报告错误。主动错误标志由检测到错误的节点发送。
被动错误标志:由 6 个隐性位(逻辑“1”)组成,用于被动报告错误,表示该节点已经进入了“被动错误状态”。
错误定界符:由 8 个隐性位(逻辑“1”)组成,用于标识错误帧的结束。
4. 过载帧
当接收节点准备好接收下一帧数据的时间不足时,它会发送过载帧(Overload Frame)来通知发送节点延迟下一次数据发送。这种机制确保了在接收节点负载较重时,数据传输能够得到有效管理,避免了数据丢失或通信冲突。
●过载帧格式:过载标志、过载界定符。
过载标志:由 6 个连续的显性位(逻辑“0”)组成,与主动错误标志的构成相同。该标志用来指示接收节点需要额外的时间来处理接收到的数据,或准备接收下一帧数据。
过载界定符:由 8 个隐性位(逻辑“1”)组成,与错误界定符的构成相同。该界定符标识过载帧的结束。
●过载帧的工作机制:
(1)当接收节点需要更多时间来准备接收下一帧数据时,它会立即发送一个过载帧。
(2)如果接收节点仍然无法准备好接收更多数据,它可以发送最多两条连续的过载帧来进一步延迟数据发送。
(3)发送节点在接收到过载帧后,会暂停当前的数据传输,并在接收到过载帧后的时间后重新尝试发送数据。