本文在原创的基础上,添加了部分自己的理解,特此说明。
原文地址:
http://www.eeworld.com.cn/qrs/article_2016091830328.html
1 研究的背景和意义
从改革开放到现在,汽车产业对我国经济发展产生
巨大的
推动,对社会进步产生了深远的影响,逐渐成为了我国的支柱行业。近几年来,随着科技发展的日新月异,汽车上电子控制装置越来越多,汽车音响,电子仪表,空调控制器,电喷发动机,BCM,ABS等等ECU在车内形成了巨大的网络系统,按照传统的布线模式,电线的错综复杂对汽车的电气控制及系统实时网络通信带来重重困难,CAN总线网络的出现,大大简化了综合布线,很好的解决了系统间的信息交互与共享,在汽车电子技术的普及应用取得了重大进步。
Can-Bus总线技术是“控制器局域网总线技术(Controller Area Network-BUS)”的简称,它具有极强的抗干扰和纠错能力,最早被用于飞机、坦克等武器电子系统的通讯联络上。
虽然CAN总线有着非常高的稳定性,然而,一旦出现错误尤其是CAN总线关闭,对于汽车的整体功能甚至安全性都造成极大影响。为此,在汽车行业高速发展,电子与通信技术广泛应用的今天,如何检测汽车网络故障的发生,如何修复故障,使我们能够保证稳定和安全的应用CAN网络技术服务于汽车产业,形成了本文研究的背景和意义。
2
汽车CAN总线
网络技术的概述
2.1 CAN总线网络简介
在八十年代,CAN总线是由德国博世公司研究开发而成一种串行通信协议,而今形成了CAN技术规范2.0,包括支持11位地址标准帧的2.0A版本,和支持11位地址标准帧与29位地址扩展帧的2.0B版本。它的出现解决了汽车内部多个微控制器进行实时数据交互的问题。在物理层上,通信介质一般是双绞线,也可以使同轴电缆或光纤。CAN总线的技术有以下特点。
1)是多主系统。
2)最高波特率达到1 Mbit/sec。
3)是短帧结构(每条报文最多8字节数据)。
4)有错误检测与处理机制。
5)有数据校验,帧内应答。
6)是总线型拓扑结构。
7)是广播发送。
8)具有基于优先级的总线仲裁机制。
2.2 车内CAN总线网络拓扑示例图
车内CAN总线网络拓扑示例图见图1。
2.3 CAN(高速)总线通信物理电平信号
CAN总线采用CAN_H与CAN_L的
差分信号
进行通信,显性位为逻辑0,隐性位为逻辑1,并通过“线与”的机制决定总线电平。
2.4 CAN帧类型
CAN总线的帧类型包括:数据帧,远程帧,帧间空间,错误帧,超载帧。其中总线关闭的故障就是由错误帧引起的。
2.5 CAN总线可检测的错误类型
1)位错误:节点检测到的位与自身送出的位数值不同。在仲裁或ACK位期间送出“隐性”位,而检测到“显性”位不导致位错误。
2)填充错误:在使用位填充编码的帧场(帧起始至CRC序列)中,不允许出现六个连续相同的电平位。
3)CRC错误:节点计算的CRC序列与接收到的CRC序列不同。
4)格式错误:固定格式位场(如CRC界定符、ACK界定符、帧结束等)含有一个或更多非法位。
5)ACK错误:发送节点在ACK位期间未检测到“显性”位。
其中发送节点能检测到的错误有位错误、格式错误、ACK错误。而接收节点能检测到的错误有填充错误、格式错误、CRC错误。CAN控制器与收发器在检测到错误时,会发出错误帧,通报到总线上发送或接收报文错误。
由于CAN总线有着极高的稳定性,所以网络出现错误而又不被检测到的机会极低。假如一个高速CAN以500kbps的速率进行通信,总线的负载为25%,每年按照2000小时来算,那么至少要1000年才会漏检一个错误。
3 汽车CAN总线关闭问题的成因分析
3.1 CAN总线关闭
CAN控制器可以判断出错误的类型是总线上暂时的数据错误(如外部干扰等)还是持续的数据错误(如单元内部故障、驱动器故障、断线、短路等)。由此,当总线上发生持续数据错误时,CAN控制器内部的错误计数器累积到总线关闭的阀值,可将引起此故障单元从总线上隔离出去,不参与跟总线其他节点的网络通信。
3.2 CAN(高速)总线常见物理故障分析
对于CAN总线常见的物理故障,主要是CAN线路产生的。其中包括:
1)CAN_H开路。
2)CAN_L开路。
3)CAN_H对VBAT短路。
4)CAN_L对GND短路。
5)CAN_H对GND短路。
6)CAN_L对VBAT短路。
7)CAN_H对CAN_L短路。
8)CAN_H和CAN_L开路。
9)终端电阻开路。如图4。
但是根据ISO11898标准,CAN收发器具有一定的容错性能。因此,并不是每一种CAN线路的故障都会导致CAN总线关闭问题的发生。以上述高速CAN网络为例,除了4)CAN_L对GND短路和9)终端电阻开路是可以自身容错外,其他线路故障都会存在引发CAN总线关闭问题的可能性。 造成CAN总线关闭的物理层因素,除了CAN线路的故障,还有可能是CAN控制器或收发器等元器件出现了故障,导致该CAN节点无法通信。另外,也有可能因为CAN总线信号的干扰,使得CAN信号的收发不能正确,尤其是不能正常发送报文,容易导致CAN总线关闭。
3.3 CAN总线软件错误计数分析
CAN网络上每个节点都含有REC(接收错误计数器)和TEC(发送错误计数器)。当接收错误产生时,REC增加;正确接收到数据帧,REC减少;当发送错误产生时,TEC增加;正确发送一帧数据帧,TEC减少;REC、TEC的数值会引发节点状态改变。
CAN网络节点存在
三种状态
:
1)主动错误,能正常的进行总线通信,错误产生时,发送主动错误帧。
2)被动错误,能够进行总线通信,错误产生时,发送被动错误帧。
3)总线关闭,不能收发任何报文。
特殊案例:如果总线上只有一个节点,该节点发送数据帧后得不到应答,TEC最大只能计到128,即节点只会进入被动错误状态而不会进入总线关闭状态。
4 汽车CAN总线关闭的故障记录与恢复建议
4.1 CAN总线关闭的故障诊断与记录
诊断规范描述了一系列的诊断服务,定义ECU与诊断仪之间的请求响应规则、ECU对于请求报文的处理行为以及请求、响应报文信息含义。常用的诊断规范包括有UDS,KWP2000以及ISO15765等协议。其中记录和读取诊断故障码(DTC)就是诊断的一项重要工作,网络节点单元把曾经或现在
发生的
相关故障码都保存在非易失性
存储器
(NVM)中,随时方便于汽车工程师检查故障记录。
我们对于CAN总线
关闭故障
的诊断流程是,CAN控制器在错误中断里或者在周期性的查询里,检查BUS OFF
寄存器
的值,如果CAN控制器发生了BUS OFF,这个寄存器的值就会被赋真值。此时,CAN诊断模块会把BUS OFF的DTC状态中的Test Failed位给置上,表示当前检查CAN总线关闭故障是存在的,即CAN网络通信处在失效模式,同时把BUS OFF的记录次数加1。当BUS OFF的记录次数达到整车厂规定的阀值时,CAN诊断模块会DTC状态中的Confirmed位给置上,同时把CAN总线关闭的DTC记录到非易失性存储器中。
4.2 CAN总线关闭的恢复建议
我们的CAN诊断模块在错误中断或周期性查询中发现总线关闭故障时,应该立即对CAN控制器的驱动及相关寄存器进行
初始化
操作,这样,在初始化完成后,CAN总线关闭的故障能够立即被解除。但是,该CAN节点在解除总线关闭故障后,会继续对外发送报文,如果此时产生总线关闭的真正外部因素没有解除,该CAN节点仍有机会再次发生总线关闭的故障。
为了避免该节点在CAN网络中频繁发生总线关闭的问题,防止影响到网络资源的消耗和对其他节点的不必要干扰,我们建议在CAN初始化完成后,不要立即对外发送CAN报文,应该等待一定时间段后再尝试发送报文是否成功。
5 Linux内核(3.10.38)中flexcan.c关于CAN BUS-OFF的检测流程如下:
flexcan_probe()-->
...
flexcan_poll_state()--> //检测CAN BUS状态寄存器,看是否存在状态改变的情况
do_state()--> //出现由于ACTIVE/PASSIVE --> BUS OFF的状态变化
can_bus_off()
flexcan在open的时候需要手动设置一个bus off恢复时间的定时器,其中定时器的restart-ms(100ms)是通过手动添加,Linux内核默认是没有添加的,流程如下:
module_platform_driver(c_can_plat_driver)
c_can_plat_driver.c_can_plat_probe()
register_c_can_dev()
register_candev(dev)
net_device_ops.c_can_netdev_ops.c_can_open()
open_candev()
setup_timer(&priv->restart_timer, can_restart, (unsigned long)dev)
其中priv->restart_timer就是bus-off恢复定时器,定时时间需要手动设置restart-ms,定时时间到执行can_restart, 重启CAN设备
6 结论
汽车CAN总线关闭故障发生时,应分析物理层包括CAN线路、CAN控制器及收发器、CAN信号干扰等外在因素,同时分析CAN寄存器及软件处理,重新初始化CAN驱动和恢复正常后,定时尝试往外发送报文。CAN总线关闭严重影响到整车的功能与安全性,我们通过对故障的成因分析,提出合理的完善建议,希望能对汽车电子技术的健康发展起到一定的作用。
参考文献
[1]恒润科技,CAN规范2.0.2007.
[2]
国际标准化组织
,ISO14229.2006.
[3]国际标准化组织,ISO11898.2006.
关键字:
汽车CAN总线
关闭故障
诊断与恢复