汽车电子技术——CAN总线系统

1. CAN总线基本概念

1.1 汽车常用总线网络分布

CAN 全称是 Controller Area Network,是目前应用最广泛的总线之一。20 世纪 80 年代,德国博世公司提出了应用于汽车上的串行通信网络,即 CAN 总线,它可以有效的支持分布式控制系统或者实时控制系统。CAN 总线通信技术应用于在车载个电控单元之间进行数据信息交换,如发动机管理系统、车身舒适性系统等,形成一个汽车电子控制网络。目前,CAN 总线已经被国际标准组织 ISO 制定成国际标准(ISO-11898),且由于 CAN 总线具有可靠性高、实时性好等诸多优点,其已成为国际上各主机厂使用的标准协议,是现在各大车企应用最多的通讯协议之一,同样也广泛应用于各种其他工业领域,如航空、自动化设备、工业控制等。
其实除了CAN总线外,LIN、MOST 和 Flex Ray 等其他总线网络也是当今车载网络的代表,不过这四种总线之间存在巨大的差异,他们分别在车载总线网络中分担着不同的角色,并保持着在各自相应的领域的优势。首先CAN 总线是目前活跃在汽车总线网络上应用最为广泛,CAN 总线在汽车控制系统总线中的主导作用仍将持续相当长的一段时间。LIN 总线以其低廉的价格和易于实施,在低速总线上取得了成功。MOST 和 Flex Ray 分别在车载媒体系统、安全类线控系统中占据一席,但这两种网络在车载总线网络中并没有被广泛应用。MOST 和 Flex Ray 总线虽然在各自的应用系统中表现出众,但它们还无法成为一个像CAN 总线那样的通用车载网络标准。一般来说各大主机厂都有各自相关的CAN 总线通讯规范论述及要求,基本上都大同小异,本博文也将主要论述CAN总线的相关知识。
CAN总线本身是一种串行数据通信总线,其通信速率最高可达1Mb/s,CAN系统内任意节点之间最大传输距离与其位速率有关,以下为最大传输距离与其位速率的关系:

数据传输速率总线长度(m)
1Mbps40
500Kbps130
250 Kbps270
50 Kbps1300
10 Kbps6700

由于整车控制系统对数据传输量及实时性等要求的不同,CAN总线按照速率的不同一般分为两种:一种是高速CAN网络——驱动系统总线,传输速率为125kbps至1Mbps 之间,它主要应用于对实时性要求较高、通信数据量大的动力控制系统和与安全有关的系统;另一种是低速CAN网络——舒适系统总线,传输速率为40kbps至125kbps之间,主要应用于车身电子系统之间的通信,低速CAN总线可以增加总线的传输距离,提高总线的抗干扰能力,降低开发成本。不同的网络系统间可以通过网关实现不同通信协议之间的数据转换,从而实现不同电控系统之间的数据信息共享及交互。

在这里插入图片描述

高速CAN总线和低速CAN总线,两条总线是彼此独立的两个总线系统,通过网关将两条总线网络连接起来,从而实现不同总线间的数据传输与共享。两条总线彼此独立运行,只有在两条总线之间需要进行数据交换时,才会启用网关进行协议转换并传输数据。这种总线架构及其传输方式可以将不同类型、不同速率的数据信息分开处理,从而可以减轻每个总线网络的负担,提高数据传输的实时性及可靠性。
从上图中也可以看出,CAN总线包括CAN_H (代表CAN high)和 CAN_L (代表CAN low)两根线。节点通过CAN控制器和CAN收发器(Transceiver,是Transmitter/Receiver的合成词)连接到CAN总线上。

1.2 分层结构

国际标准化组织(ISO)的开放系统互联(OSI)参考模型共分七层,CAN总线协议遵循了开放系统互联参考模型,并在该标准化模型的基础之上建立的。CAN总线模型包括三层协议,分别为:物理层、数据链路层与应用层。CAN总线协议定义了部分物理层与数据链路层,同时应用层则根据不同的应用领域由用户来定义。CAN总线层次参考模型结构框图如下图所示:

在这里插入图片描述

ISO11898是高速CAN的标准,ISO11519是低速CAN的标准。在最初发布时,高速CAN的数据链路层和物理层都在标准ISO11898中规定;在后面的更新中,将标准拆分为ISO11898-1——数据链路层和ISO11898-2——物理层。其中标准ISO 11519-2-1994已经在2006年被ISO 11898-3-2006代替,也就是说符合标准ISO 11898-3的产品也是支持符合ISO 11519-2标准的产品,ISO 11898-3已经兼容涵盖了ISO 11519-2。以下是ISO11898的各个相关标准:

Road vehicles – Controller area network (CAN)
ISO 11898-1:2003 Part 1: Data link layer and physical signalling
ISO 11898-2:2003 Part 2: High-speed medium access unit
ISO 11898-3:2006 Part 3: Low-speed, fault-tolerant, medium-dependent interface
ISO 11898-4:2004 Part 4: Time-triggered communication
ISO 11898-5:2007 Part 5: High-speed medium access unit with low-power mode

以下为高速CAN和低速CAN的一般拓扑结构:

在这里插入图片描述

1.3 电压及逻辑数值

CAN总线使用两根信号线上的差分电压传递信号,前述已给出两根信号线分别被称为CAN_H 和 CAN_L,以下图中的高速CAN为例,在静态时两信号线上的电压均为2.5V,表示逻辑“1”,称为隐性位或者隐性电平。传递逻辑“0”时,则成为显性位或显性电平,这需要CAN_H上的电压比CAN_L电压高总线上形成电压差2V,此时CAN_H信号线上电压为3.5V,CAN_L上电压为1.5V。只有总线上全部发送节点均为隐性电平时,总线才会传递隐性位。当两个节点同时分别向总线发送隐形电平和显性电平时,总线将为显性电平,即显性电平可以覆盖隐形电平。
在这里插入图片描述

2. CAN总线的通信机制

2.1 帧类型

根据用途的不同,CAN 消息帧分为四种不同类型:数据帧,主要用于数据传输;远程帧,主要用于向总线上的其他节点请求数据;错误帧,主要用于标识总线上的错误;超载帧,主要用于延迟下一个帧的发送。
下面主要围绕数据帧来展开论述。数据帧由 7 个场组成,主要包括帧起始(Start of Frame)、仲裁场(Arbitration Field)、控制场(Control Field)、数据场(Data Field)、CRC(循环冗余码)场(CRC Field)、应答场(ACK Field)、帧结尾(End of Frame)。
在这里插入图片描述

帧起始:一个显性位组成,它标识了数据帧或远程帧的开始,在总线空闲时开始发送。
仲裁场:根据帧格式的不同,分为两种:标准帧格式的仲裁场包含 11 位标识符和 RTR 位(远程帧请求位),扩展帧格式的仲裁场包含 29 位标识符、RTR 位、SRR 位(替代传输请求位)及 IDE 位(标识符扩展位)。具体展开如下:
RTR位用于区分数据帧和远程帧:数据帧,RTR=0;远程帧,RTR=1;所以数据帧优先级高于远程帧。
SRR位表明在该位代替了标准帧中的RTR,该位无实际意义,SRR永远置1
IDE位用于区分标准帧和扩展帧:标准帧,IDE=0(11位ID;扩展帧,IDE=1(29位ID) 所以标准帧优先级高于扩展帧。
控制场:由6个数据位组成,包含两个保留位及数据长度码(DLC)。保留位用于以后扩展,发送显示电平,DLC 由4位组成,标识了数据场的数据长度。
数据场:其中是数据帧要被发送的消息,其长度不超过8个字节。
CRC场:包含两个部分,由15个数据位组成的CRC序列和 1 个数据组成的CRC 界定符。
在这里插入图片描述

应答场:包含两个部分,应答间隙(1 位)和应答界定符(1 位),发送节点发送的应答间隙是隐性电平,当接收节点成功接收到报文后,将应答间隙改为显性电平发送, 应答界定符是隐性位,位于应答间隙后面。
在这里插入图片描述

帧结束:由7个隐性位组成,用来标识一个数据帧或远程帧的结束。
间歇场(Intermission—ITM),间歇场禁止任何节点在间歇期间传送数据帧或远程帧,间歇场只有一个任务就是标识过载情况的出现,这是间歇场的作用。间歇场的长度是3个“隐性”位。
在这里插入图片描述

2.2 通信机制

首先要明确总线空闲状态:当总线上的上出现连续的11位隐性电平,那么总线就处于空闲状态。也就是说对于任意一个节点而言,只要它监听到总线上连续出现了11位隐性电平,那么该节点就会认为总线当前处于空闲状态,它就会立即向总线上发送自己的报文。
总线上的信息发送都是有先后顺序的,需要判断优先级的情况分为以下几种:
(1)当总线上没消息传递时,优先权归第一个开始发送消息的单元。
(2)若出现多个单元同时开始发送消息的情况时,优先权的归属需要根据起始于第一位仲裁的结果判断,优先权归能够持续输出“显性”最多的节点。数据帧和远程帧ID相同时,优先权归属于仲裁段的 RTR 为显性的数据帧。
(3)标准格式 ID 与具有相同 ID 的远程帧或者扩展格式的数据帧在总线上竞争时,优先权归属于标准格式的 RTR 位为显性位的帧
以下图为例,假设节点A、B、C要发送报文,则首先要检测总线状态,此时检测到总线处于空闲,三个节点同时发送报文。由前述可知,当两个节点同时分别向总线发送隐形电平(逻辑“1”)和显性电平(逻辑“0”)时,总线将为显性电平,即显性电平可以覆盖隐形电平。每个节点在在发送报文过程中都会进行“回读”,判断送出的位与回读的位是否一致,若不一致则节点退出仲裁,进入“只听”状态。所以在仲裁场中,本例中节点A在标识符为5时候回读的数据与发出数据位不一致,则退出仲裁进入“只听”状态;后续在RTR位中,节点B仲裁失败,进入“只听”状态;最终节点C的报文数据成功发送。由前述可知,其实节点C是数据帧,RTR=0,节点B是远程帧,RTR=1,数据帧优先级高于远程帧。
这是一种非破坏的仲裁机制,既不会造成已发送数据的延迟,也不会破坏已经发送的数据。
在这里插入图片描述

如上例中,节点C仲裁成功,在CAN总线上将报文成功发送,但是对于仲裁失败的其他节点A和B呢?当然这次没仲裁失败没有能发送成功,但他们依然监听着总线的状态,一旦在总线空闲时则进行报文重发。重新进行发送和新一轮的仲裁,下图给出了上例的各节点的报文发送情况。
在这里插入图片描述

总线协议规定了“位填充”规则。当各节点在发送报文中有连续5个相同极性位后必须插入一个极性相反的位使总线上接收节点有足够多的边沿进行同步。接收节点在接收到报文后,删除插入位后再进行报文处理。

在这里插入图片描述

3. CAN总线错误处理机制

3.1 错误检测的类型

CAN 总线协议共有五种互不干涉的错误类型,分别是:位错误、填充错误、CRC错误、形式错误、应答错误。下图是错误检测的示图:
在这里插入图片描述

对于该部分的知识理解,可结合联系前面帧类型的知识,下面给出五种错误产生的条件如下:
(1)位错误 :检测到位错误的出现要在发送的位值和所监视到的位值不同时,由于总线上每个单元对总线进行监视,所以一旦出现不同时,就会检测到一个位错误。有两种情况下即使节点发现了总线上的“显性”位出现了也不会判断出现位错误,这两种情况就是在ACK间隙或仲裁场的填充位流期间发送“隐性”位的情况,也就是说此时即使发现总线上一“显性”位,也不作为位错误处理。
(2)填充错误 :CAN 总线协议中的填充错误伴随着以位填充的方法对信息编码时,填充错误的出现一定伴随着连续的6个相同的位电平。
(3)CRC错误 :CAN总线协议的循环冗余检查可以帮助系统提高准确性,CRC错误出现在发送器的CRC计算结果与接收到的CRC结果顺序不同时,这两端的CRC的计算方法是一致的(接收器和发送器之间)。
(4)形式错误 :形式错误的出现是由于总线上检测到一个固定形式的位场含有不少于一个的不合法位而引起的。
(5)应答错误 :应答错误出现在应答间隙(ACK SLOT)所检测到的位是“隐性”位时。

3.2 错误状态

CAN 总线上的节点的 3 种状态:主动错误状态、被动错误状、总线关闭状态。根据不同的状态可以了解总线的工作情况。
(1)主动错误状态 :主动错误状态也叫错误激活状态,是正常参加总线通信的状态。该状态下的单元只是具有输出主动错误的标志的能力,不影响它的参加通信的状态。
(2)被动错误状态:被动错误状态虽然是可以参加总线通信的状态,但是为了不影响其他单元接收发送报文,在发送错误通知给总线时就不能做到非常积极。它的这种兼容性会出现这样的情况:单元检测出错误时,还需要满足其它处于主动错误状态的单元也发现错误才能定义总线上产生了错误。当处于被动错误状态的单元需要再一次发送数据时加上“延迟”作用,这几个隐性位才能保证处于被动错误状态单元可以重新发送总线报文。
(3)总线关闭状态:总线关闭状态禁止任何信息的接收和发送,处于该状态下的单元不能参与总线通信。三种状态下的发送错误计数值(TEC)和接收错误计数值(REC)的不同,根据 TEC和 REC 来确定总线单元究竟处于三种状态中的哪一个。
下图表明了三种总线状态之间的关系。
在这里插入图片描述

4. 位定时与同步

在CAN的数据流中不包含时钟,CAN总线规范中定义的同步保证报文可以不管节点间积累的相位误差正确地译码。CAN规范定义了两种类型的同步:硬同步和重新同步。由协议控制器完成通过硬同步或重新同步来适配位定时参数。一个系统的波特率是一定的,同步涉及到了位时间(位时间是标称位速率的倒数),下图所示位时间可划分几个时间片段。同步段中有一个跳沿,传播段补偿物理延时,相位缓冲段1,2补偿相位误差。采样点出现在相位缓冲段1和2之间,在重同步期间被移动整数时间份额,时间份额是预期比例因子和最小时间份额的乘积。移动的时间宽度就是重新同步跳转宽度(RJW),长度为1到4。

在这里插入图片描述

4.1 同步类型

1.硬同步(Hard Syhchronization):CAN总线协议规定硬同步的结果就是使内部的位时间从同步段重新开始。一般硬同步都位于帧的起始,也就是说总线上有个报文的帧起始决定了各个节点的内部位时间何时开始。
2.重新同步(Resyhchronization):节点参照沿相位误差的情况来调整其内部位时间,目的是把节点内部位时间与来自总线的报文位流的位时间调整到接近或相等。总线上的各个节点振荡器频率是不同的,这种情况需要重新同步做以调节。总线进行重新同步后,相位缓冲段 1和缓冲段2的长度改变,从而使节点能够正确地接收报文。

4.2 同步原则

影响 CAN 总线同步设置的因素包括:总线传输最大距离和受最大距离影响的振荡器时钟频率、波特率等。所以考虑到系统性能最优化的需求,在调整同步的时候首先要计划好采样点的位置和采样次数,振荡器时钟频率、总线传输距离对同步的影响,因此,系统要求设计者合理设置同步参数。无论是硬件同步还是重新同步都遵从如下规则:
(1)一个位时间里只允许一个同步。仅当采集点之前探测到的值不等于紧跟沿之后的总线值时,开始同步该边沿。
(2)总线空闲期间,只要出现隐性向显性跳变的沿,都会引起硬同步。
(3)符合规则(1)的所有从隐性跳变到显性的沿都可以用做重新同步。有一例外情况,即当发送一显性位的节点不执行重新同步而导致一隐性转化为显性沿,此沿具有正的相位误差,不能用做重新同步。

5. 参考学习的书籍

《汽车CAN总线系统 原理、设计与应用》罗峰等 著
《汽车电子技术—硬件、软件、系统集成和项目管理》Kai Borgeest 著 武震宇 译

=文档信息=
本学习笔记由博主整理编辑,仅供非商用学习交流使用
由于水平有限,错误和纰漏之处在所难免,欢迎大家交流指正
如本文涉及侵权,请随时留言博主,必妥善处置
版权声明:非商用自由转载-保持署名-注明出处
署名(BY) :zhudj
文章出处:https://zhudj.blog.csdn.net/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值