车辆内部网络通信是指车辆内部各个电子控制单元(ECU)之间进行数据传输和通信的过程。现代汽车包含多个ECU,每个ECU负责特定的功能,例如整车控制VCU、发动机控制EMS、制动系统ESC、转向系统EPS、驾驶辅助系统、车身控制系统及空调系统、娱乐系统等。这些ECU之间的通信允许车辆的各个系统协同工作,提供各种功能和服务。
对于车内部通信网络有着特殊的要求,例如确保消息传递、无冲突消息、最短传递时间、低成本和电磁干扰韧性,以及冗余路由和其他特性等。这些协议包括控制器局域网(CAN)、局域网(LIN)、多媒体系统传输(MOST)、FlexRay及由于数据量大大增加,及IT技术的发展,最近几年兴起的汽车以太网通信Ethernet。
本文总结了这些车辆内部网络通信的关于CAN及CAN-FD一些关键概念和技术:
控制器局域网(Controller Area Network,简称CAN总线)是一种旨在允许微控制器和设备在无主机计算机的情况下相互通信的车辆总线标准。它是一种基于消息的协议,最初设计用于汽车内部的多路复用电气布线,以节省铜线,但也可以在许多其他上下文中使用。对于每个设备,帧中的数据以串行方式传输,但如果多个设备同时传输,最高优先级的设备可以继续传输,而其他设备则会暂时停止。所有设备,包括发送设备,都会接收到这些帧。
1. CAN历史
CAN总线由德国罗伯特·博世有限公司(Robert Bosch GmbH)开发于1983年。该协议于1986年在密歇根州底特律的美国汽车工程师学会(SAE)会议上首次公开正式发布。第一批CAN控制器芯片于1987年由Intel引入,随后不久由飞利浦公司(Philips)也推出了相似的产品。1991年,梅赛德斯-奔驰(Mercedes-Benz)的W140型车型成为首款采用基于CAN的多路复用布线系统的量产车辆。
博世公司发布了多个版本的CAN规范,其中最新的版本是1991年发布的CAN 2.0。该规范分为两部分:A部分适用于带有11位标识符的标准格式,而B部分适用于带有29位标识符的扩展格式。使用11位标识符的CAN设备通常被称为CAN 2.0A,而使用29位标识符的设备通常被称为CAN 2.0B。
1993年,国际标准化组织(ISO)发布了CAN标准ISO 11898,后来被重新分为两部分:ISO 11898-1覆盖数据链路层,而ISO 11898-2覆盖高速CAN的物理层。ISO 11898-3稍后发布,涵盖低速、容错CAN的物理层。物理层标准ISO 11898-2和ISO 11898-3不属于博世CAN 2.0规范。
2012年,博世发布了CAN FD 1.0,即具有灵活数据速率的CAN。该规范使用不同的帧格式,允许不同的数据长度,并在仲裁决定后选择性地切换到更快的位率。CAN FD与现有的CAN 2.0网络兼容,因此新的CAN FD设备可以与现有的CAN设备共存。截至2018年,博世正在积极推进CAN标准的拓展。
CAN总线是车辆诊断标准(OBD-II)中使用的五种协议之一。自1996年以来,OBD-II标准已经成为美国所有汽车和轻型卡车的强制性标准。欧洲联盟自2001年起对所有销售的汽油车辆实施了EOBD标准,并自2004年起对所有柴油车辆实施了该标准。
现在汽车可能具有多达几十个用于各种子系统的电子控制单元(ECU)。最重要的处理器是动力系统及底盘等相关控制器。其他ECU用于自动驾驶、高级驾驶辅助系统(ADAS)、变速器、气囊、防抱死制动/ABS、巡航控制、电动助力转向、音响系统、电动车窗、车门、镜子调节、混合动力/电动汽车的电池和充电系统等。其中一些形成独立的子系统,但其他之间的通信至关重要。某个子系统可能需要控制执行器或从传感器接收反馈。CAN标准就是为了满足这种需求而设计的。一个关键的优势是,不同车辆系统之间的互联可以通过软件实现广泛的安全、经济和便利功能,而如果这些功能使用传统的汽车电气硬线连接则会增加成本和复杂性。
2. CAN 基本原理:
CAN 是一种多主机、多节点、实时性好的串行通信协议。它使用差分信号传输数据,通过在两根线(CAN_H 和 CAN_L)之间的电压差来表示数字信息。CAN 使用非常强大的错误检测和恢复机制,例如循环冗余校验(CRC),以确保数据的可靠性。
3. CAN 架构:
CAN网络中的所有节点都通过传统的双线总线彼此连接。每个节点都需要一个微控制器、一个CAN控制器(通常集成在微控制器内部)和一个CAN收发器。任何传感器、执行器或其他控制设备都通过主处理器或节点的微控制器连接到CAN网络。节点可以与非常简单的数字逻辑设备进行通信,也可以与嵌入式计算机甚至网关进行通信。这个网关可以使得像笔记本电脑这样的通用计算机通过USB或以太网端口与CAN网络上的设备连接。CAN收发器处理来自CAN控制器的单端发送和接收信号(TXD和RXD),并将它们转换为差分信号(在总线上被称为CAN高(CAN-H)和CAN低(CAN-L)信号)。
CAN 架构基于主从结构,可以有多个节点(从节点)连接到一个总线上,由一个主节点控制通信。每个节点拥有唯一的标识符(Identifier),用于区分不同的消息。以下是 CAN 的关键组成部分:
a. 节点(Node):
每个车辆系统中的电子控制单元(ECU)都可以是一个 CAN 节点。这些节点可以是发动机控制单元、制动系统控制单元、空调系统控制单元等。
b. 总线(Bus):
CAN 总线是连接所有节点的物理通信媒介,通常是一对双绞线。CAN 总线通过差分信号传输数据,提供了良好的抗干扰性。
c. 消息(Message):
CAN 消息是在总线上传输的数据单元。每个消息包含一个标识符(Identifier)、数据字段(Data Field)和控制字段(Control Field)。标识符用于确定消息的优先级和内容。
d. 帧(Frame):
CAN 消息被封装为帧。CAN 定义了两种主要类型的帧:标准帧(Standard Frame)和扩展帧(Extended Frame)。标准帧使用 11 位标识符,而扩展帧使用 29 位标识符。
e. 主节点(Master):
主节点负责控制总线上的通信。它发送消息到总线上,并处理来自其他节点的响应。主节点通常是车辆中的主要控制单元,例如发动机控制单元。
f. 从节点(Slave):
从节点是被主节点控制的节点。它们接收从主节点发送的命令,并发送响应或数据到总线上。从节点可以是各种车辆子系统的控制单元。
一个CAN帧包含以下部分:
帧起始位(SOF):发送一个占主导地位的‘0’,告诉其他ECU消息即将到来。
仲裁标识符(Arbitration ID):用于识别消息以及确定其优先级。标准CAN(CAN 2.0A)帧有11位ID,而扩展CAN(CAN 2.0B)帧有29位ID。
远程传输请求位(RTR):允许ECU通过发送一个占优势地位的‘1’位请求其他ECU的消息。在数据帧的情况下,RTR是一个占主导地位的‘0’位。
IDE(标识符扩展位):指示这是基本格式帧(11位标识符)还是扩展格式帧(29位标识符)。
r0位:保留位,最近更为知名的是柔性数据格式(Flexible Data Format,FDF)位。指示帧是经典CAN还是CAN FD。
数据长度码(DLC):包含数据的字节长度(0-8字节)。
数据:包含实际的数据值,其长度由DLC字段决定。
循环冗余校验(CRC):用于检测数据完整性的错误检测码。
CRC分隔符位:必须是一个占主导地位的‘1’。
确认位(ACK)槽:确认CRC过程是否正常。
ACK分隔符位:必须是一个占主导地位的‘1’。
帧结束位(EOF):7位;帧的结束由一个占主导地位的‘1’表示。
4. CAN 通信过程:
CAN协议是基于消息的,这意味着总线上的所有节点都能够发送和接收消息,并且它们始终在等待广播消息。虽然所有节点都能够发送消息,但在任何给定的时刻,总线上只能有一条消息在传输。通常情况下,与每个节点关联的CAN控制器实现了一个过滤器,用于检查广播消息的仲裁标识符,并且在仲裁标识符在特定范围内时接受消息,或者在范围之外时忽略消息。
通信过程包含消息发送、消息传输和消息响应:
消息发送:当一个节点需要发送消息时,它将消息封装为 CAN 帧,包括标识符和数据。该帧被发送到总线上。
消息传输:所有节点都接收总线上的消息。接收到消息的节点会检查标识符,如果它的标识符匹配发送的消息,则该节点会处理该消息。
消息响应:从节点接收到主节点的消息后,它可以发送响应消息,实现双向通信。
例如,假设在CAN总线上有三个节点。节点1发送了一条带有车辆当前速度信息的消息,并使用ID 0x121标记了该消息。节点2接受仲裁标识符在0x100-0x1FF范围内的数据。该消息的ID在此范围内,所以节点2接受了该消息。节点3接受仲裁标识符在0x320-0x352范围内的数据。该消息的ID在此范围之外,所以节点3忽略了这条数据。
CAN bus 数据传输流
CAN 的这种通信方式允许车辆不同子系统之间的实时数据交换,实现了高度可靠和实时的汽车控制。
CAN协议使用所谓的无损位仲裁(lossless bitwise arbitration)来确定消息的优先级。虽然每个节点都能够发送和接收消息,但在任何给定的时刻,只能有一条消息占用总线。总线访问是事件驱动的,可能有多个节点在同一时刻开始传输。在这种情况下,具有更高优先级的消息会首先“拥有”对总线的访问权。消息的优先级是通过逐位(bitwise)查看仲裁标识符来确定的——二进制标识符越低,优先级越高(所以逻辑‘1’位是对逻辑‘0’位的占优地位)。拥有仲裁的节点可以继续进行消息传输,而不会受到其他节点的干扰,消息也不会被延迟、破坏或损坏。这就是所谓的无损仲裁。传输较低优先级消息的节点将在更高优先级消息传输时停止传输。一旦总线被释放,该节点将尝试重新发送其消息。
例如两个设备试图同时在CAN总线上传输,如下图所示。设备A的仲裁标识符是11001000111。设备B的仲裁标识符是11011111111。设备A会赢得对总线的访问权,因为它的仲裁标识符较低(第4位是‘0’)。设备A继续进行消息传输,而设备B则等待,在总线空闲时再次尝试传输。
CAN协议使用无损位仲裁来确定消息的优先级。虽然每个节点都能够发送和接收消息,但在任何给定的时刻,总线上只能有一条消息占用总线。总线访问是事件驱动的,可能有多个节点在同一时刻开始传输。在这种情况下,具有更高优先级的消息(仲裁标识符最低的消息)将首先获得总线访问权。较低优先级的节点必须等待总线空闲才能再次尝试传输。
5. 帧类型
在CAN网络上传输的消息也被称为帧。CAN帧分为四种类型:
数据帧(Data frame):这是最常见的帧类型,也是唯一包含实际数据的类型。数据帧包括仲裁标识符、数据字段、用于错误检测的循环冗余校验(CRC)字段和确认(ACK)字段。
远程帧(Remote frame):远程帧允许一个节点从另一个节点请求特定数据。远程帧和数据帧之间有两个主要区别。首先,仲裁字段中的占优地位的RTR位明确标记了远程帧。其次,远程帧内部没有数据。
错误帧(Error frame):如果一个节点检测到故障,它会向网络上的所有其他节点发送一个错误帧。接收到该消息的节点也会传输一个错误帧。在这一点上,CAN收发器内部实现的硬件错误计数器会阻止这些错误消息的循环使用,以避免总线洪泛。
过载帧(Overload frame):这种类型的帧在数据或远程帧之间注入一个延迟,基本上请求稍后重新传输该消息。随着控制器足够智能,不再需要这种类型的消息,这种帧类型基本上已经过时,从而节省了总线上的通信量。
6. 错误检测
在不容许丢失通信的应用场景中,可靠性至关重要,而CAN总线在这个领域的强大表现在很大程度上归因于其丰富的错误检测机制。CAN协议集成了五种错误检测方法:三种在消息级别上,两种在位级别上。如果消息在这些方法中的任何一种中失败,该消息将不被接受,并且接收节点会生成一个错误帧。此外,在消息级别上,CRC和ACK字段包含了一个校验和和定界符位,用于强制执行错误检测。第三,还有一种消息级别上的格式检查,它查找消息内部必须始终为占主导地位位的字段。这些字段包括SOF、EOF、ACK定界符和CRC定界符位。如果在这些字段中的任何一个中检测到占优地位位,就会生成一个错误。
在位级别上,发送器逐位地监控它们自己的消息。如果将一个数据位写入总线,而读取到的是其相反的位,就会生成一个错误。最后,CAN协议使用位填充规则进行错误检测。在连续五位具有相同逻辑电平的情况下,将插入一个相反电平的位。这样可以确保提供上升沿以保持网络同步。接收节点将去除填充帧。在帧的所有字段中,除了CRC定界符、ACK字段和EOF,位填充都会发生。在使用位填充的所有字段中,连续六位相同极性被视为错误,因为它违反了位填充规则。
6. CAN 优势
总结以上内容,CAN总线在汽车和工业应用中具有许多优势:
低成本:因为车辆中的每个ECU都能够通过单个CAN接口与网络的其余部分进行通信,而不是通过多条直接信号线,因此成本和架构复杂性显著降低。
广播消息:网络上的每个节点都可以发送和接收传输的消息,并且可以确定消息是否相关或应该被忽略。这种结构允许在几乎不影响网络的情况下对网络进行修改。
优先级:无损位仲裁使得CAN协议能够以避免由于冲突引起的延迟或消息损坏的方式确定消息的优先级。
错误检测:CAN规范内置了错误处理机制,每个节点都检查传输错误(请参阅上文的错误帧描述)。在可靠性至关重要的市场中,这一点尤为有利。
强大:CAN的高速总线对电气干扰具有高度抵抗力,而且一些CAN控制器和接收器具有工业/扩展温度范围,甚至还有适用于最苛刻环境的抗故障品种。
灵活:因为CAN是一种基于消息的协议,总线上的节点没有与其关联的识别信息。这意味着可以在不需要进行任何软件或硬件更新的情况下向系统中添加或删除节点。