1. 概述
在汽车产业的发展过程中,出于人们对安全性、舒适性、易用性、娱乐性等多种需求的增加,各种各样的汽车电子系统相继被发明出来。一开始它们都是基于点对点的通信方式安装在汽车的各个部位上的,随着越来越多的电子系统不断地加进来,整辆汽车上的线束就越来越多,这就大大地增加了汽车的生产成本和维护成本。于是,一种新的现场总线应运而生。这就是当今汽车行业普遍采用的CAN总线。CAN总线是由德BOSCH公司开发的,并最终成为国际标准(ISO11519),是国际上应用最广泛的现场总线之一。CAN总线是一种多主控,基于广播的串行数据通信协议,具有高性能、高可靠性、实时性等优点。
点对点通信
总线通信
2. 总线协议标准
2.1 CAN总线拓朴图
CAN总线标准定义了物理层和链路层,由ISO11898定义,而应用层侧由用户自己定义。不同的CAN标准仅物理层不同。它的拓扑图如下:
主要由CAN总线、CAN收发器和设备节点组成。其中,用来传输CAN总线信号的媒介叫做CAN总线,由CAN_H和CAN_L两根线组成;连接CAN总线和设备节点,用来转换逻辑电平和物理信号的单元电路叫做CAN收发器;通过CAN收发器连接在总线上的设备叫做设备节点。CAN总线上传输的是对称的差分信号。
2.2 CAN物理层
2.2.1 CAN总线
CAN总线由CAN_H和CAN_L两根线组成,一般采用双绞线,线上传输对称的差分电平信号。CAN总线又分为高速总线和低速总线。高速CAN总线最高信号传输速率为1Mbps,低速CAN最高速度只有125Kbps。它们的接法如下:
2.2.2 CAN收发器
CAN收发器主要是用来把设备节点连接到CAN总线上的,实现逻辑电平与CAN总线物理电平之间的转换,并起到隔离作用,防止因设备节点出现问题而导致CAN总线无法工作的情况出现。收发器分为高速CAN收发器(1Mbps)和低速CAN收发器(125Kbps)。它的原理结构图如下:
2.2.3 CAN设备节点
CAN设备节点,即通过CAN收发器连接到CAN总线上,并按照CAN总线协议在CAN总线上收发报文,以实现数据的传输与接收的设备,例如拓朴图上的温度传感器等。它一般集成了一个CAN总线控制器来实现CAN总线协议。
CAN控制器
2.2.4 CAN总线信号
CAN总线采用差分信号传输数据,逻辑0和逻辑1是用两根差分信号线的电压差来表示。当处于逻辑1,CAN_H和CAN_L的电压差小于0.5V时,称为隐性电平(Recessive);当处于逻辑0,CAN_H和CAN_L的电压差大于0.9V,称为显性电平(Dominant)。
2.3 数据链路层
2.3.1 通信机制
从节点的角度看,CAN总线协议采用的是多主机模式,每个设备节点都可以在总线空闲的时候往总线上发送消息。因此,网络上各个节点在发送数据前都要检测总线上是否有数据传输:若网络上有数据,暂时不发送数据,等待网络空闲时再发;若网络上无数据,立即发送已经准备好的数据。从报文的角度看,CAN总线协议通过消息的标识符(Identifier)的优先级来区别消息和仲裁总线使用权。如果多个节点往总线上发送消息时,具备最高优先级的消息获得总线。通过ID仲裁,ID数值越小,报文优先级越高。发送低优先级报文的节点在检测到更高优先级的报文时退出总线竞争,等待下次总线空闲时自动重发报文。
2.3.2 报文种类及结构
在CAN总线上传输的数据以帧为单位,CAN总线定义了五种类型的帧,分别是数据帧、远程帧、错误帧、超载帧和帧间隔。其中,数据帧根据仲裁段长度不同分为标准帧(2.0A)和扩展帧(2.0B)。他们的用途如下:
- 数据帧
数据帧包括七个段:帧起始、仲裁段、控制段、数据段、CRC段、ACK段和帧结束段。如图:
帧起始:标识一个数据帧的开始,由一位显性位表示。
仲裁段:在标准帧中,仲裁场由11位标识符和RTR位组成;在扩展帧中,仲裁场由29位标识符、SRR位、IDE位和RTR位组成。其中,标示符(帧ID)越小,优先级越高;RTR(远程传送请求位),数据帧RTR位必须为显性电平(RTR=0),远程帧RTR位必须为隐性电平(RTR=1);IDE(标识符扩展位)在标准帧属于控制场,在扩展帧中属于仲裁场。在标准帧中IDE为显性电平(IDE=0),在扩展帧中IDE为隐性电平(IDE=1);SRR(远程代替请求位)在扩展帧中始终为隐性电平(SRR=1)。
控制段:标准帧的控制段由扩展帧标志位IDE、保留位r0和数据长度代码DLC组成;扩展帧控制段则由IDE、r1、r0和DLC组成。DLC由4位组成,DLC3−DLC0,用BCD码表示0-8的数值。
数据段:放置需要传输的数据,有0-8个字节长度,由DLC确定。
CRC段:由15位CRC码和1位CRC界定符组成。CRC界定符为隐性位,主要作用是把CRC校验码与后面的ACK段隔开。
ACK段:包含确认位(ACK)和界定符(DEL)。发送节点发出的报文中ACK及DEL均为隐性电平1,接收节点正确接收后会用显性电平0覆盖隐性电平,以表示正确接收。即ACK=0,DEL=1为正确接收;ACK=1,DEL=1为未正确接收。
帧结束:7个连续的隐性位,表示数据帧结束。节点在检测到11个连续的隐性位后认为总线空闲。
- 远程帧
用来向其他节点请求发送具有同一标识符的数据帧,远程帧没有数据场,且RTR位为隐性电平。远程帧分为6个段,也分为标准帧和扩展帧,且RTR位为1(隐性电平)。
- 错误帧
当节点监测到一个或多个由CAN标准所定义的错误时,就会产生一个错误帧。错误帧由错误标志和错误界定符两个部分组成。由于可能出现多个节点接连发出错误帧的情况,于是就有可能出现错误标识叠加的情况。
- 过载帧
当一个接收节点没有做好接收下一帧数据的准备时,将发送过载帧以通知发送节点;过载帧由过载标志和过载帧界定符组成。由于存在多个节点同时出现过载的情况,并且它们发送过载帧存在时间差,这时就会出现过载标志叠加的情况。
- 帧间隔
帧间隔用于将数据帧或远程帧和他们之前的帧分离开,但过载帧和错误帧前面不会插入帧间隔。
帧间隔过后,如果无节点发送帧,则总线进入空闲。
帧间隔过后,如果被动错误节点要发送帧,则先发送8个隐性电平的传输延迟,再发送帧。
2.4 状态与流程
2.4.1 错误处理机制
CAN总线协议定义了五种错误类型:CRC错误、格式错误、应答错误、位发送错误和位填充错误。它们表示的意义如下:
它们按照以下机制进行处理:
2.4.2 报文发送流程
CAN总线协议定义的报文发送流程如下图所示:
注:本文所有资料均来源于网络,经作者整理而成,如有侵权,请及时联系作者。