目录
1. CAN 概述
2. 物理结构与传输机制
3. 消息格式与仲裁机制
4. 错误检测与总线状态
5. 工业用 CAN 接口
6. 本讲总结
1. CAN 概述
CAN(Controller Area Network)是由德国博世(Bosch)公司于 1983 年提出的串行通信协议,最初用于汽车内部多个电子控制单元(ECU)之间的数据通信。CAN 总线有以下特点:
-
多主结构:任意节点都可以在总线空闲时发起通信,支持分布式控制系统;
-
实时性高:通过优先级仲裁机制保证高优先级信息的快速响应;
-
通信可靠性强:内置多重错误检测机制;
-
抗干扰性强:差分信号传输 + 双绞线结构;
-
应用广泛:除汽车外,在工业自动化、电梯、轨道交通、医疗设备等领域被大量采用。
CAN 在工业发展中已经进行过多次的升级和演进。最初的 Classic CAN(标准 CAN)支持最大数据帧为 8 字节。Bosch 在 2012 年推出了 CAN FD(Flexible Data Rate),为标准 CAN 的增强型协议,支持高达 64 字节数据,速率提升到 5Mbps。CANopen 和 SAE J1939 是基于 CAN 的上层协议,提供数据组织和设备管理规范。
2. 物理结构与传输机制
CAN 在物理层采用差分信号传输,即 CAN_H(高线)与 CAN_L(低线)之间的电压差来表示逻辑状态,理论上用双绞线就可以实现,如下图所示:
差分电压信号分为显性与隐性信号两种,分别代表逻辑 0 和 1,如下表所示:
状态 | CAN_H | CAN_L | 差值 | 逻辑 |
---|---|---|---|---|
显性(Dominant) | ~3.5V | ~1.5V | ~2V | 逻辑 0 |
隐性(Recessive) | ~2.5V | ~2.5V | ~0V | 逻辑 1 |
CAN 将信号转换成一系列的电压差来进行传送。CAN 通常为 总线型结构,两端会接 120Ω 终端电阻,吸收信号反射,如下图所示:
CAN 总线的最大传输距离是和传输速率(波特率)有直接关系的,下表根据经验给出了一个大概的关系:
波特率 | 最大距离(理论) |
---|---|
1 Mbps | 40 米 |
500 kbps | 100 米 |
125 kbps | 500 米 |
实际应用中,传输距离受很多因素影响。但是我们可以看到速率越高,支持的距离会越短。
3. 消息格式与仲裁机制
CAN 采用 帧格式 来组织通信数据。每一帧都是广播的,所有节点都能接收,根据 ID 来决定是否处理。CAN 常用的帧类型有以下四种:
类型 | 用途 |
---|---|
数据帧 | 正常通信的数据负载传输 |
远程帧 | 请求其他节点发送某类数据 |
错误帧 | 报告帧错误(由接收/发送节点主动发送) |
过载帧 | 通知总线稍等片刻(如缓存溢出) |
这里我们重点介绍一下数据帧。数据帧的结构如下图所示:
这里进行一下简单的介绍:
-
标识符(ID):代表消息类型,也决定优先级(数值越小优先级越高);
-
RTR 位:区分数据帧和远程帧;
-
CRC(校验):检测传输错误;
-
ACK(响应):确认接收响应位。
-
Data(数据): 传输的数据,最高8字节。
CAN(Controller Area Network)总线的仲裁机制是一种非破坏性位仲裁方式。当多个节点几乎同时开始发送数据时,它们会在发送过程中监视总线电平。CAN 使用“优先级”机制:帧的标识符越小,优先级越高。发送过程中,如果某个节点发送的是显性位(0)而检测到的是隐性位(1),说明有更高优先级的消息正在传输,该节点会立即停止发送,从而实现无冲突的仲裁和总线访问控制。
4. 错误检测与总线状态
CAN 协议对错误处理十分严格,具备多级检测与恢复机制。CAN 有五种错误检测机制:
-
位错误(Bit Error):发送位与检测到的位不同;
-
填充错误(Stuff Error):违反“5 个相同位后自动插入反位”规则;
-
CRC 错误:校验字段不匹配;
-
格式错误(Form Error):帧结构字段异常;
-
ACK 错误:期望有节点应答却未收到 ACK。
如果发现错误,CAN 还有不同的错误处理机制,比如:
-
主动错误帧(Active Error Frame):节点发现错误并通知所有节点;
-
被动错误帧(Passive Error Frame):错误次数过多后被动报告,不再主动干扰总线;
-
总线关闭(Bus-Off):连续错误严重,节点完全断开,不再参与通信(例如失控 ECU);
CAN 的错误检测与总线状态是个很重要的话题,我们这里不做过多的介绍,之后会单独开一篇教程讲解不同的错误检测机制。
5. 工业用 CAN 接口
虽然 CAN 总线只需要两根信号线(CAN_H 和 CAN_L) 进行通信,但在实际设备或开发板上的CAN 接口会出现多个“插头”或“针脚”,额外的“头”不仅用于信号线,还包括供电、接地、终端电阻控制、备用信号或诊断功能等,见下表:
接口引脚 | 用途说明 |
---|---|
CAN_H | 差分信号:高线 |
CAN_L | 差分信号:低线 |
GND (接地) | 电源地线,用于参考和抗干扰 |
V+ / Vbat | 电源供电(如 12V/24V) |
STB / EN | 芯片工作/待机控制信号(控制 CAN 芯片开关) |
RS | 可调终端电阻设置(如 SN65HVD230 有此功能) |
NC | 预留 / 未接 |
在使用的时候,要根据具体情况具体分析,并仔细阅读使用手册和文档。
6. 本讲总结
在这篇博文中,我们简单的介绍了 CAN 的基本原理,网络结构,数据传输和仲裁机制,我们在之后的博文中,针对部分内容,进行更深入的解析。
参考文献:
1. can口9针定义_can口定义-CSDN博客
2. 常用通信接口电气特征(六):CAN_can接口-CSDN博客
3. 详解CAN总线:常用CAN连接器的使用方法_dsub9 can-CSDN博客