本文在原创的基础上,添加了部分自己的理解,特此说明。
原文地址: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总线  关闭故障  诊断与恢复

汽车CAN总线关闭故障的诊断与恢复相关推荐

  1. can总线报文是固定的吗_新能源汽车CAN总线Bus Off处理流程

    CAN总线由其高可靠和实时性被广泛应用于新能源汽车.轨道交通.医疗.工程机械等行业,本文介绍CAN总线关闭对新能源汽车的功能和安全性能产生的影响,并针对工程师关注的问题,提供有效的解决方案. 2020 ...

  2. CAN控制器总线错误分析之CAN节点BusOff恢复过程分析与测试

    总线关闭(bus off)是CAN节点比较重要的错误处理机制.那么,在总线关闭状态下,CAN节点的恢复流程是怎样的?又该如何理解节点恢复流程的"快恢复"和"慢恢复&quo ...

  3. 计算机设计类自我诊断意见,汽车故障自我诊断.doc

    汽车故障自我诊断 自我诊断接头的认识 自我诊断接头功能与应用 引擎系统自我诊断应用 凯迪拉克引擎与车身电脑自诊 别克与奥斯摩比而的自诊系统 一.自我诊断接头的认识 自我诊断接头,称为ALCL(Asse ...

  4. can硬件结构和工作原理_汽车CAN总线工作原理及测量方法详解

    点滴分享 ALtium designer 快捷键分享 ctrl+r                      复制并重复黏贴 ctrl+shift+v             只能黏贴 shift+c ...

  5. A²B汽车音频总线介绍

    A²B使远程I²S/TDM成为可能 I²S是飞利浦公司为数字音频设备之间的音频数据传输而制定的一种总线标准,该总线专责于设备之间的数据传输,广泛应用于各种多媒体系统.I²C是两线式串行总线,用于连接微 ...

  6. can总线rollingcounter_汽车CAN总线详解

    概述 CAN(Controller Area Network)总线协议是由 BOSCH 发明的一种基于消息广播模式的串行通信总线,它起初用于实现汽车内ECU之间可靠的通信,后因其简单实用可靠等特点,而 ...

  7. FlexRay汽车通信总线介绍及测试环境

    FlexRay汽车通信总线介绍及测试环境 原文链接:http://www.ulantec.cn/a/xinwen/xingyezixun/8.html 综述 FlexRay通信总线是由多个汽车制造商和 ...

  8. 关于汽车CAN总线的介绍

    汽车CAN总线 是一种用于车辆电子控制系统的通信协议,它的全称为控制器局域网(Controller Area Network),是由Bosch公司在1986年研发的.CAN总线最初被用于汽车电子控制系 ...

  9. 鉴源论坛 · 观辙丨汽车CAN总线渗透测试

    作者 | 肖博阳 上海控安可信软件创新研究院研发工程师 来源 | 鉴源实验室 01  CAN总线 1.1 CAN总线是什么? CAN是控制器局域网络(Controller Area Network, ...

  10. c++ 转bcd码_还不会看汽车自诊断系统的故障码?三分钟教你怎么解决

    自从我国2010年实行国四标准以来,所有的汽车都会被要求安装OBD系统,也就是车载自动诊断系统.这个系统的好处就在于可以对汽车的各项配置进行监测,出现问题时会进行报警,会通过故障码告诉你汽车的故障部位 ...

最新文章

  1. 说明:最新谷歌AI智商不超过6岁研究来自中国科学院而非美国康内尔大学
  2. css加载会造成阻塞吗
  3. 系统优化怎么做-数据库优化
  4. java–Servlet基础
  5. C#调用WebService实例和开发(转)
  6. onenote 思维导图_学生党做笔记,我为什么更推荐OneNote?看后你就明白了
  7. aspen和python一起使用_python-将$cond语句与$project一起使用并在PyMongo中聚合
  8. [JBoss] JNDI与JBossNS
  9. 多媒体计算机与一般计算机,计算机和多媒体计算机的区别
  10. MySQL3_外键及查询
  11. (五)RewriteBase 与RewriteCond 语法说明
  12. linux认证加k8s认证,如何快速验证您的Kubernetes配置文件?
  13. spin_lock到spin_lock_irqsave的使用
  14. 网络应用程序设计模式:浅谈CS架构与BS架构
  15. 【拼多多笔试题】小熊战斗力
  16. css3 制作圆柱体
  17. 使用你们的AirDisk产品会不会泄露文件给你们,会不会将文件数据传送到你们服务器?
  18. 图像标注-自动标注图像
  19. Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=7arch=x86_64repo=osinfra=stoc
  20. Mac检查固态硬盘状态————附带自己更换ssd

热门文章

  1. 无线路由器网络测试软件,简单快速测试家里无线路由器的网速和性能
  2. 官网链接下载QT5 Creator
  3. 离散数学大作业代码及感想
  4. linux键盘修改工具,Linux 键盘映射的修改(Console)
  5. 分享几篇有关DO-178和GJB5000对比的论文
  6. Python爬虫教程:网易云音乐歌词
  7. 利用ABBYY Screenshot Reader快速截取网页并识别文本
  8. WMS软件国内主要供应商分析
  9. linux 打包排除文件类型,Linuxtar或zip命令打包排除后缀文件
  10. axure手机页面设计说明_Axure中移动端原型设计方法