介绍
在汽车产业中,各种各样的ECU被开发出来,来提高汽车的安全性、舒适性、方便性,同时满足对低公害、低成本的要求。但各个电控系统对通信的数据类型、时效性、可靠性要求不尽相同。如果按照常规的点对点布线方式,那么有多条总线构成的情况很多,线束数量也随之增加。
点对点通信为了减少线束数量,通过多个LAN,进行大量数据的高速通信的需要,1986年德国电气商博世公司开发出面向汽车的CAN通信协议。并通过ISO11898 及ISO11519 进行了标准化。
总线通信现在,CAN 的高性能和可靠性已被认同,并被广泛地应用于工业自动化、船舶、医疗设备、工业设备等方面。被誉为自动化领域的计算机局域网。它的出现为分布式控制系统实现各节点之间实时、可靠的数据通信提供了强有力的技术支持。
CAN总线是一种多主控的总线系统,在网络空闲时,接入网络的单元节点都可以发送数据。当两个以上单元同时开始发送消息时,根据标识符(ID)决定优先级。
CAN网络的消息是广播式的,同一时刻网络上的所有单元节点读取到的数据是相同的,是一种基于消息广播的串行通信总线。
通信机制与特性
CAN总线标准中规定的硬件控制层面包括物理层和数据链路层,至于软件应用层需要用户自定义。
下面对核心的物理层和数据链路层进行介绍。
CAN物理层
不同的CAN总线标准只在物理层有所不同。
CAN总线上连接了不同的设备(单元节点),CAN网络的拓扑一般为线型。线束最常用的是非屏蔽双绞线,线上传输为对称的差分电平信号。
如上图,一个节点主要包括Host、控制器和收发器三部分。CAN收发器将控制器设备连接到总线上。在发送数据时,CAN控制器将要发送的二进制编码发送给CAN收发器,然后由收发器把这个普通的逻辑电平信号转化为差分信号,通过差分线CAN_High和CAN_Low输出到CAN总线网络上。接受数据时,正好相反,CAN控制器根据两根线上的电位差来判断总线电平。因此CAN总线物理传输媒介只需要两根线。
高速CAN总线最高信号传输速率为1Mbps,支持最长距离40m。ISO11898-2要求在高速CAN总线两段安装端接电阻RL(端接电阻一般为120Ω,因为电缆的特性阻抗为120 Ω,为了模拟无限远的传输线。)以消除反射。低速CAN最高速度只有125Kbps,所以ISO11898-3没有端接要求。
在传输距离方面,由于距离越远,信号时延也越大,为了确保信息的正确采样,总线上的信号速率也的下降。下图是推荐的信号速率与距离的关系。
CAN总线通过两个信号线进行差分信号传输。逻辑0和逻辑1通过两根线上的电压差来表示。而高速CAN和低速CAN总线在物理层信号电平上定义有所不同。
在高速CAN中,定义两根线电压下相同(2.5V)时为逻辑0(显性),当两电压相差为2V(CAN_High = 3.5V, CAN_Low = 1.5V)时为逻辑1(隐性)。
低速CAN中,定义电压差为5V(CAN_High = 0V, CAN_Low = 5V)时为逻辑1,电压差为1.5V(CAN_High = 3.6V, CAN_Low = 1.4V)时为逻辑0。
高速CAN信号电平 低速CAN信号电平总线电平分为显性电平和隐性电平,二者必居其一。CAN总线的信号电平具有线与特性,既显性电平(0)总是会掩盖隐性电平(1)。如果不同节点同时发送显性和隐性电平,总线上表现出显性电平(0),只有在总线上所有节点发送的都是隐性电平(1)时,总线才表现为隐性。
线与特性CAN数据链路层
只是用两条信号线的CAN,每次只能表达一个信号,简洁的物理层决定了CAN必然要配上一套较为复杂的协议。
通信机制
-
多主机
对安全敏感的应用(如汽车)对通信系统的可靠性要求很高。将整个总线的正常与否托付于单个节点是极其危险的。比较合理的方法是对总线的接入去中心化,是每个节点都有接入总线的能力。所以CAN总线采用多主控的线性拓扑结构。
在总线上,每个节点发送消息不必遵循任何预先设定的时序,通信是事件驱动的。只有当有新的信息传递时,CAN总线才处于忙碌状态。这使得节点接入总线速度非常快,对于异步事件反应迅速,基本上对于ms级别的实时应用没有任何问题。 -
寻址机制
不同其他类型的总线,CAN总线不设定节点的地址,而是通过消息的标识符(ID)来区别消息。虽然这在消息中增加了标识符,提高了复杂度。但这使得节点可以无需了解其他节点的状况,而相互独立工作。在总线上增加节点只需关注消息类型,不需要关心其他节点的状况,更加灵活。 -
CSMA/CD+AMP
CAN总线通信原理可以简单描述为多路载波侦听(CSMA)+仲裁机制(CD)和基于消息优先级的冲突检测(AMP)。
CSMA(CarrieSense Multiple Access)指的是所有节点必须都等到总线处于空闲状态时才能往总线上发送消息。由于所有节点接在同一根总线上,且以广播的形式发送消息。所以每个节点在发送数据前都要检测总线上是否已有数据传输。如果总线上有数据,则暂时不发送数据,等待网络空闲时再发。
CD+AMP(Collision Detection + Arbitration on Message Priority)指的是节点在发送数据时,要不停地检测发送的数据是否与其他节点数据发送冲突。当出现冲突时,通过ID仲裁,总线优先保证发送ID更小的消息。报文优先级低的节点退出仲裁后,在下次总线空闲时自动重新发送报文。
- 报文接收过滤
由于CAN总线以广播形式传播消息,所以CAN总线上的所有节点都可以接受到CAN上的消息。但各控制器会根据其ID过滤报文的功能,直接收需要的报文。
CAN报文种类及结构
CAN协议是通过以下5种类型的帧进行的:
帧类型 | 帧用途 |
---|---|
数据帧 | 用于发送单元向接收单元传送数据的帧 |
远程帧 | 用于接收单元向具有相同 ID 的发送单元请求数据的帧 |
错误帧 | 用于当检测出错误时向其它单元通知错误的帧 |
过载帧 | 用于接收单元通知其尚未做好接收准备的帧 |
间隔帧 | 用于将数据帧及遥控帧与前面的帧分离开来的帧 |
1、数据帧
数据帧是CAN通信中最主要,也是最复杂的。数据帧以一个显性位开始,以7个连续的隐性位结束。CAN总线的数据帧有标准格式和扩展格式的区分。
各字段定义及长度分别为:
SOF:表示数据帧开始;(1 bit)
Identifier:标准格式11 bit,扩展格式29 bit包括Base Identifier(11 bit)和Extended Identifier(18 bit),该区段标识数据帧的优先级,数值越小,优先级越高;
RTR:远程传输请求位,0时表示为数据帧,1表示为远程帧,也就是说RTR=1时,消息帧的Data Field为空;(1 bit)
IDE: 标识符扩展位,0时表示为标准格式,1表示为扩展格式;(1 bit)
DLC:数据长度代码,08表示数据长度为08 Byte;(4 bit)
Data Field:数据域;(0~8 Byte)
CRC Sequence:校验域,校验算法G(x) = x15 + x14 + x10 + x8 + x7 + x4 + x3 + 1;(15 bit)
DEL:校验域和应答域的隐性界定符;(1 bit)
ACK:应答,确认数据是否正常接收,所谓正常接收是指不含填充错误、格式错误、 CRC 错误。发送节点将此位为1,接收节点正常接收数据后将此位置为0;(1 bit)
SRR:替代远程请求位,在扩展格式中占位用,必须为1;(1 bit)
EOF:连续7个隐性位(1)表示帧结束;(7 bit)
ITM:帧间空间,Intermission (ITM),又称Interframe Space (IFS),连续3个隐性位,但它不属于数据帧。帧间空间是用于将数据帧和远程帧与前面的帧分离开来的帧。数据帧和远程帧可通过插入帧间空间将本帧与前面的任何帧(数据帧、遥控帧、错误帧、过载帧)分开。过载帧和错误帧前不能插入帧间空间。
2、远程帧
一般地,数据是由发送单元主动向总线上发送的。而远程帧的用于接收单元主动向发送单元请求数据。
远程帧没有数据块Data Field。远程帧的 DLC 块表示请求发送单元发送的数据长度(Byte)。
远程帧的RTR值为1。当总线上具有相同标识符的数据帧和远程帧同时发送时,由于数据帧的 RTR 位是显性的,数据帧将在仲裁中赢得总线控制权。
3、错误帧
当接受和发送消息的节点检测出错误时,就发送错误帧通知错误。由错误标志和错误界定符构成。错误帧的帧结构如下图:
其中错误标志为6-12个显性/隐性重叠位。处于主动报错状态的单元检测出错误时输出主动错误标志(6个显性位);处于被动认错状态的单元检测出错误时输出被动错误标志(6个隐性位)。
错误界定符由8个“隐性”位构成。
CAN总线的错误类型包括以下五种:
- CRC错误——校验错误,接受单元重新计算CRC,与发送单元的CRC不一致。
- ACK错误——应答错误,发送单元在ACK为中检测到隐性电平。
- FORM错误——格式错误,检测出传输的数据帧格式与合法格式不符。
- 位错误——发送节点在发送电平时发现总线电平与发送电平不一致的错误。
- 填充错误——在需要未填充的段内,连续检测到6为相同的电平。(位填充的介绍见后文)
对错误的处理,可参考这里。
此外为防止自身由于某些原因导致无法正常接收的节点一直发送错误帧,干扰其他节点通信。CAN总线提供了复位重启等处理机制。
4、过载帧
当某个接收节点没有做好接收下一帧数据的准备时,将发送过载帧以通知发送节点。在两种情况下,节点会发送过载帧:
- 接收单元条件的制约,要求发送节点延缓下一个数据帧或远程帧的传输;
- 帧间空间(Intermission)的 3 bit 内检测到显性位
过载帧由过载标志(6个显性位)和过载帧界定符(8个隐性位)组成。由于存在多个节点同时过载且过载帧发送有时间差问题,可能出现过载标志叠加后超过6个位的现象。
位填充
CAN总线使用到的是非归零编码(NRZ),NRZ编码的优点是效率高,但却不易区分哪里是bit开始,哪里是bit结束。因此为确保在同步通信过程中有足够的电平跳变,规范中应用到位填充机制,即在每连续 5 个相同电平后插入 1个反相电平,接收节点在收到消息后自动将填充位删除。
在帧内除了CRC界定符、ACK域和EOF外,其余部分均应用到位填充机制。在应用到位填充的域,检测到连续 6 个显性位或隐性位均视为报错。
DBC
CAN协议定义了物理层及数据链路层规范,通过CAN总线,ECU之间可以进行数据通信。但建立更加完善的系统,还需要在CAN的基础上选择合适的应用层,如CANopen、J1939等。其中J1939即为DBC文件。
DBC(data base CAN)是汽车ECU见进行CAN通信的报文内容。规定了各种CAN信号的具体含义。DBC是一个ASCII格式的文本文件,一般用CANdb++带来,方面查看和编辑。DBC解析过程就是将汽车CAN网络传输的十六进制数据转换成我们所熟悉的物理量,如车速、发动机转速、燃油量等。有了DBC,ECU之间才能互相听懂,实现控制。根据DBC文件中规定的信息,也可以对CAN网络进行监控,掌握整车状态。
但DBC只涉及CAN网络中的通信,不涉及连接在CAN总线上的控制器设备内部的功能逻辑。
——————————————————————
参考:
汽车CAN总线详解
一口气从零读懂CAN总线
CAN总线_百度百科
CAN总线深入分析教程
网友评论