0.什么是CAN总线
CAN总线(控制器区域网络Controller Area Network)是一个中央网络系统,连接不同的电子控制单元(ECU)以及车辆中的其他设备。现在的汽车可以有100个ECU,因此CAN总线通信变得非常重要。
1.CAN总线流行的背景
-
集中式:CAN总线系统允许对连接到网络的ECU进行集中控制,使控制ECU变得容易。
-
鲁棒性:CAN总线协议具有内置的故障检测机制,因此它具有较好的鲁棒性。当检测到错误时,网络中的所有节点(ECU)都被告知此错误,所有节点丢弃此消息,以保证数据的一致性。CAN总线系统还具有抗电磁干扰的鲁棒性。
-
低成本和高效率:CAN不需要复杂的布线,因为通信不是通过直接的模拟信号。相反,通过单个CAN接口进行通信,并且是一种非常有效的基于消息的协议。
-
灵活性:由于CAN使用基于消息的协议,总线上的ECU没有关联的id,因此很容易添加或删除ECU。
-
速度:数据的传输速度很重要。因此,根据电缆的长度,高速可以支持40 kbps到1 Mbps之间的数据传输速率。
2.CAN总线的历史
Robert Bosch GmbH于1983年开始开发CAN总线协议,但CAN总线协议于1986年在密歇根州底特律汽车工程师协会(SAE)会议上才予以正式发布。
1993年,国际标准化组织(ISO)发布了CAN标准ISO 11898,该标准后来被重组为两个部分:
-
ISO 11898-1应用于数据链路层
-
ISO 11898-2为CAN物理层,用于高速CAN
如上所示,从1983年开始至今,CAN发生了很多的发展变化。博世仍在致力于扩展CAN标准,并于2012年发布了CAN FD或CAN with Flexible Data-Rate。
3.CAN总线的应用
其最常见的应用是车载电子网络,因为CAN是为汽车使用而创建的。然而,多年来CAN已用于许多其他领域,如铁路,工业自动化,电梯,自动扶梯等。
说到汽车行业,由于现代汽车对安全性和舒适性的重视,大多数现代汽车都可以拥有100个电子控制单元(ECU)。ECU主要用于以下方面:
-
发动机控制
-
燃油喷射系统
-
安全气囊、传动系统
-
防抱死制动系统(ABS)
-
电子动力转向,音响系统
-
电动车窗、车门和座椅
-
电动、混合动力汽车的电池管理系统
-
其他领域
其中一些ECU与传感器和执行器交互以执行各种操作。下面是一些具体的例子。
- 燃油喷射系统:ECU计算油门踏板角度,并通过CAN发送信号,以便其他ECU可以在需要时使用它。控制燃油喷射的ECU读取信号,进行计算,并向执行器发送燃油喷射信号。因此CAN总线系统在其中起着重要的作用。
- 防抱死制动系统(ABS) ECU通过CAN与传感器、执行器和其他ECU相互作用,从而实现有效制动,防止车轮在制动过程中锁死。
4.CAN总线层
想知道CAN协议是如何工作的?作为第一步,首先需了解CAN层次结构。ISO/OS参考模型指定了以下七个层。
标准的CAN总线实现,忽略了数据链路层与应用层之间的连接。
CAN总线物理层
这一层定义了电平、CAN总线上的信号方案、电缆阻抗等。以下是物理层的主要特点:
-
双线平衡信令方案由CAN标准(ISO 11898部分)定义,又称高速CAN。
-
基于ISO标准的低总线速度的双线平衡信令方案11898-3又称低速CAN。
-
单线接地符合SAE J2411标准。
CAN总线拓扑
下面是一个示例CAN网络,其中节点由两条线连接,CAN High (CAN- h)和CAN Low (CAN- l)。CAN总线端接120欧姆电阻。总线两端的终端电阻是必要的,以消除总线上的任何电反射,并保证正确的直流电平。通常情况下,物理传输采用双绞线共地铜缆。
最大CAN总线速度
根据标准,最大CAN总线速度为1mbit /s,并通过CAN高速收发器实现。对于低速CAN,速度可达125 kbit/s。在标准模式下,单线最高可达50 kbit/s。
电缆长度
对于仲裁方案,信号的波前必须到达最远的节点并在采样之前返回,因此可以在1mbit /s的can速度下使用最大40m的长度。
5.CAN总线协议基础---CAN消息
由于CAN总线是一种广播类型的总线,因此CAN总线上的所有节点都可以获得所有的传输信息。因此,我们无法将特定消息发送到特定节点。
CAN使用短消息。具体来说,CAN有以下消息或报文帧类型:
-
数据帧:用于发送节点向接收节点传输数据,是使用最多的帧类型
-
远程帧:用于接收节点向某个发送节点请求数据
-
错误帧:用于当某个节点检测出错误时向其他节点通知错误的帧
-
过载帧:用于接收节点向发送节点通知自身接收能力的帧
-
帧间隔:将数据帧或远程帧与前面的帧分离的帧
CAN协议帧格式
数据帧
数据帧由以下部分组成:
标准CAN
扩展CAN
仲裁域
这决定了当两个节点争用总线时,哪个消息获得优先级。具体来说,
-
包含了11位标识符和1位远程传输(RTR)位,该位用于数据帧起主导作用,称为标准CAN。
-
29位标识符(包括两个隐性位:替代远程请求(SRR)和标识符扩展(IDE)以及RTR位),这被称为扩展CAN。
-
具有0到8字节数据的数据字段循环冗余校验(CRC)字段,它包含一个用于错误校验的15位校验和.
-
CRC 分隔符
-
ACK位
-
ACK 分隔符
-
End-of-frame (EOF)
远程帧
远程帧获取相应数据帧的传输信息,它没有任何数据字段。因此,对于请求-响应类型的总线通信,远程帧是有用的。
错误帧
错误帧消息就是不符合CAN消息格式规则的消息帧。当节点检测到错误时,发送错误帧。错误帧包括
-
ERROR标志(6位相同的值)
-
错误分隔符(8位隐性分隔符)
过载帧
顾名思义,当节点过于繁忙时传输过载信息。通常,不使用过载帧。
消息仲裁与优先级
仲裁是决定哪个控制器将使用总线的过程。当两个或多个控制器同时开始传输消息时,总线仲裁变得很重要。
如果发送隐性级别的节点找到了主导级别,那么它将停止仲裁并成为接收方。这个过程确保没有延迟到高优先级消息,发送较低优先级消息的节点将在主导消息结束后尝试重传6位时钟。
6.位时钟
CAN上的每个位至少分为4个quanta。quanta具体分为以下几种类型。
-
同步段------用于时钟同步,是一个quanta
-
传播段------ 补偿总线上的延迟
-
相位段1------缩短以保持时钟同步
-
相位段2------延长以保持时钟同步
时钟同步
CAN控制器可以通过一定的量程缩短或延长一个比特,从而调整片上总线时钟。这被称为同步跳跃宽度(SJW)。
7.错误处理
CAN协议有一个内置的错误处理机制,可以检测CAN消息中的错误,以便尽快检测到错误。
节点一旦检测到错误,就发送错误标志。其他节点一旦检测到错误标志就丢弃当前消息。
每个节点有两个错误计数器,具体而言,以下两种:
-
传输错误计数器(TEC)
-
接收错误计数器(REC)
通过这些错误计数器,CAN节点可以检测故障并限制错误。下面是CAN协议中提到的错误检测方法。
-
位监控(Bit Monitoring)
-
位填充(Bit Stuffing)
-
帧检查(Frame Check)
-
确认检查(Acknowledgment Check)
-
循环冗余校验 CRC(Cyclic Redundancy Check)
位监控
位监控确保传输数据的完整性。CAN总线上的每个发送器回读传输的数据,如果传输的数据和实际读取的数据存在差异,则会产生误码。
位填充
位填充是节点在接收到连续的5个相同极性的比特后插入相反极性的比特的过程。接收器移除插入的额外比特。当CAN总线上出现超过5个连续的极性位时,会引发填充错误。
帧检查
有些部分在CAN消息中有固定的格式。如果节点检测到CRC分隔符、ACK分隔符、帧结束、间隔中的无效值,则引发格式错误信号。
确认检查
当节点接收到消息时,期望在消息的确认槽中发送一个主导位。如果ACK槽中缺少主导位,则会引发确认错误。当节点检测到消息中的CRC与它自己计算的CRC不同时,会引发循环冗余校验和(CRC)错误。
8.CAN总线更高层协议
CAN标准定义了物理层(硬件)和数据链路层(基本通信层)。需要一个更高层的协议来管理系统中的通信。有许多高层协议,其中比较常用的几种:
-
CANopen
-
J1939
-
CAN Communication Protocol (CCP)
-
MilCAN
-
CanKingdom
-
ARINC
9.CAN 接口 与 CAN 分析仪
要知道如何读取can总线数据?读取CAN总线需要查看硬件信号。需要CAN接口和CAN分析仪。CAN接口是将CAN总线连接到笔记本电脑或PC进行分析的硬件。它将有一个CAN收发器。CAN分析需要使用CAN分析仪软件,通过CAN接口采集CAN数据。
10.结论
本文回顾了CAN总线的历史由来,介绍了其主要特点及应用场景。
11.参考资料
What is CAN bus? -- A Complete Guide (2023) -
Introduction to CAN (Controller Area Network) - Technical Articles
CAN Bus Uncovered: The Ultimate Guide for Automotive Enthusiasts
CAN Bus Uncovered: The Ultimate Guide for Automotive Enthusiasts