CAN 总线中主动错误和被动错误的通俗解释(很容易理解)
- 格式:doc
- 大小:76.50 KB
- 文档页数:4
汽车CAN总线系统技术及故障诊断发布时间:2021-12-21T03:04:59.846Z 来源:《中国科技人才》2021年第26期作者:王刚陈志强王晋星[导读] 随着汽车技术的不断发展,汽车电子控制系统的应用已经越来越广泛,电控元件之间的信息传递的可靠性也变得尤为重要,这给汽车维修人员带来了一定的考验。
现代汽车CAN总线系统是基于现代信息传输技术来使用的,其组成部分、结构和原理对其性能都具备很大联系。
通过对现代汽车CAN总线系统的掌握,分析故障的诊断对策,保证能进一步为现代汽车CAN总线系统的诊断工作提供保障,促进汽车行业的进步与发展。
鉴于此,文章对汽车CAN总线系统的技术原理和故障诊断措施进行了研究,以供参考。
北方自动控制技术研究所山西太原 030006摘要:随着汽车技术的不断发展,汽车电子控制系统的应用已经越来越广泛,电控元件之间的信息传递的可靠性也变得尤为重要,这给汽车维修人员带来了一定的考验。
现代汽车CAN总线系统是基于现代信息传输技术来使用的,其组成部分、结构和原理对其性能都具备很大联系。
通过对现代汽车CAN总线系统的掌握,分析故障的诊断对策,保证能进一步为现代汽车CAN总线系统的诊断工作提供保障,促进汽车行业的进步与发展。
鉴于此,文章对汽车CAN总线系统的技术原理和故障诊断措施进行了研究,以供参考。
关键词:汽车CAN;故障分析;诊断技术1 CAN总线系统概述CAN(ControllerAreaNetwork)即控制器局域网,是将汽车上所有控制系统中的电子控制单元连接在一起的网络,以便于实现电控单元之间的信息传递。
根据系统对于传输速率的要求,将CAN总线系统分为三类,即驱动CAN总线系统、舒适CAN总线系统和信息娱乐CAN总线系统。
CAN总线系统由各电子控制单元、数据传输导线以及数据传输终端组成。
其中数据传输线用的是双绞线,应用系统不同导线的颜色也不同。
驱动系统CAN-H为橙黑色,CAN-L为橙棕色;舒适系统CAN-H为橙绿色,CAN-L为橙棕色;信息娱乐系统CAN-H为橙紫色,CAN-L为橙棕色。
SJA1000的错误中断处理推荐SJA1000的错误处理好似还是比较复杂的的啦,下面是我自己的一些理解,有不对之处还请各位大虾多多指点啊!SJA1000的错误有:仲裁丢失;数据溢出;总线错误;错误状态有:错误主动(Error Active)错误被动(Error Passive)总线关闭;错误中断:总线错误中断;仲裁丢失中断;错误消极中断;数据溢出中断;错误报警中断;涉及到的寄存器:状态寄存器(SR);中断寄存器(IR);中断使能寄存器(EIR);仲裁丢失捕捉寄存器(ALC);错误代码捕捉寄存器(ECC);错误报警限制寄存器(EWLR);TX错误计数寄存器(TXERR);RX错误计数寄存器(RXERR);处理中断当然是从中断寄存器说起了;中断寄存器:只说和错误有关的位啦;IR.7:BEI总线错误中断;当CAN控制器检测到总线错误且中断使能寄存器(EIR)中的BEIE被置位时此位被置位当前的错误代码可以通过错误代码捕捉寄存器(ECC)获得;其中可以分为:位错误;格式错误;填充错误;其它错误;IR.6:ALI仲裁丢失中断;当CAN控制器丢失仲裁,变为接收器和中断使能寄存器的ALIE为被置位时,此位被置位当前仲裁丢失的位置可以通过读仲裁丢失捕捉寄存器(ALC)获得;IR.5:EPI 错误消极中断;当CAN控制器到达错误消极状态(Error Passive)(至少一个错误计数器超过协议规定的值127)或从错误消极状态(Error Passive)又进入错误活动状态(Error Active)以及中断寄存器的EPIE位被置位时此位被置1IR.3:DOI 数据溢出中断;数据溢出状态位(状态寄存器的SR.1位 DOS)有0-1 跳变且中断寄存器的DOIE位被置位时此位被置1IR.2 EI 错误报警中断;错误状态位(状态寄存器的SR.6位 ES)和总线状态位(状态寄存器的SR.7位 BS)的改变和中断寄存器的EIE位被置位时此位被置1影响错误状态位的有:1,错误计数器至少有一个错误计数器满2,超过错误报警限制寄存器(EWLR)设置的值时错误状态位被置位;报警中断。
一文读懂CAN通讯错误帧当前CAN总线通讯技术已经运用于各行各业之中,基本是每个总线设计工程师必学的一个通讯网络。
但什么是CAN通讯中的错误帧,很多人还是处于只知其名,不知其所以然的状态,也因此造成许多工程师在明知总线通讯出现问题却束手无策的困扰。
1.1.1 错误标定检测到错误条件的站通过发送错误标志指示错误。
对于“错误主动”的节点,错误信息为“主动错误标志”,对于“错误被动”的节点,错误信息为“被动错误标志”。
站检测到无论是位错误、填充错误、形式错误,还是应答错误,这个站会在下一位时发出错误标志信息。
只要检测到的错误的条件是CRC错误,错误标志的发送开始于ACK界定符之后的位(其他的错误条件除外)。
1.2 故障界定至于故障界定,单元的状态可能为以下三种之一:●‘错误主动’●‘错误被动’●‘总线关闭’“错误主动”的单元可以正常地参与总线通讯并在错误被检测到时发出主动错误标志。
“错误被动”的单元不允许发送主动错误标志。
“错误被动”的单元参与总线通讯,在错误被检测到时只发出被动错误标志。
而且,发送以后,“错误被动”单元将在初始化下一个发送之前处于等待状态。
(见“挂起发送”)“总线关闭”的单元不允许在总线上有任何的影响(比如,关闭输出驱动器)。
在每一总线单元里使用两种计数以便故障界定:●发送错误计数●接收错误计数这些计数按以下规则改变(注意,在给定的报文发送期间,可能要用到的规则不只一个):●当接收器检测到一个错误,接收错误计数就加1。
在发送主动错误标志或过载标志期间所检测到的错误为位错误时,接收错误计数器值不加1。
●当错误标志发送以后,接收器检测到的第一个位为“显性”时,接收错误计数值加8。
●当发送器发送一错误标志时,发送错误计数器值加8⏹例外情况1:发送器为“错误被动”,并检测到一应答错误(注:此应答错误由检测不到一“显性”ACK 以及当发送被动错误标志时检测不到一“显性”位而引起)。
⏹例外情况2:发送器因为填充错误而发送错误标志(注:此填充错误发生于仲裁期间。
CAN总线错误处理CAN怎样处理错误错误处理内建在CAN协议中,对CAN系统的运行十分重要。
错误处理的目标是检测CAN总线上出现的报文中的错误,从而传送器可以重传出错的报文。
总线上的每个CAN控制器都会尝试检测报文中的错误。
如果发现错误,发现节点将传送一个错误标志,从而中断总线通信。
其它节点将检测错误标志导致的错误(如果它们尚未检测到初始错误)并采取合适的措施(例如丢弃当前报文)。
每个节点维护两个错误计数器:传送错误计数器和接收错误计数器。
有几个规则规定这些计数器怎样增加和/或减少计数。
总的来讲,检测到故障的传送器增加其传送错误计数器比侦听节点增加其接收错误计数器要快。
这是因为,很有可能是传送器发生了故障!当任何错误计数器增加到超过某个值时,节点将首先进入“错误被动”,也就是说,它在检测到错误时不会积极地阻止总线通信,然后“离开总线”,这意味着节点根本不参与总线通信。
使用错误计数器,CAN节点不但可以检测故障,而且可以执行错误限制。
错误检测机制CAN协议定义了五种以上不同的方法来检测错误。
其中两种工作在位层次,另外三种工作在报文层次。
位监视位填充帧检查应答检查循环冗余检查1. 位监视CAN总线上的每个传送器都会监视(也就是回读)传送的信号电平。
如果真正读到的位电平与传送的位电平不同,会发出信号指示位错误(仲裁过程中不会发出位错误)。
2. 位填充节点连续发送五个具有相同电平的位后,将在发送出去的位流中加上第六个相反电平的位。
接收方将删除这个额外的位。
这样做是为了避免总线上出现过度的直流电成分,但它同时也给予了接收方检测错误的额外机会:如果总线上出现五个以上相同电平的连续位,会发出信号指示填充错误。
3. 帧检查CAN报文的一些部分具有固定的格式,也就是说,标准明确定义了何种电平和何时出现这种电平(CRC定界符、ACK定界符、帧结束以及间歇,但是间歇还有一些另外的特殊错误检查规则)。
如果一个CAN控制器在这些固定字段中的一个中检测到无效值,将发出组成错误。
C A N总线呕心沥血教程-CAL-FENGHAI.-(YICAI)-Company One1哥很郁闷,为了CAN研究了不少,看了不少资料,现在我给大家总结一下先看看工作原理当CAN总线上的一个节点(站)发送数据时,它以报文的形式广播给网络中所有节点,对每个节点来说,无论数据是否是发给自己的,都对其接收。
每组报文开头的11位字符为标识符,定义了报文的优先级,这种报文格式成为面向内容的编制方案。
同一系统中标识符是唯一的,不可能有两个站发送具有相同标识符的报文,当几个站同时竞争总线读取时,这种配置十分重要。
大体的工作原理我们搞清了,但是根本的协议我们还要花一番功夫。
下面介绍一个重要的名词,“显性“和”隐性“在我看到的很多文章里,有很多显性和隐性的地方,为此我头痛不已,最终我把它们彻底弄明白了。
首先CAN数据总线有两条导线,一条是黄色的,一条是绿色的。
分别是CAN_High线和CAN_Low线当静止状态时,这两条导线上的电平一样。
这个电平称为静电平。
大约为伏。
这个静电平状态就是隐形状态,也称隐性电平。
也就是没有任何干扰的时候的状态称为隐性状态.当有信号修改时,CAN_High线上的电压值变高了,一般来说会升高至少1V,而CAN_Low线上的电压值会降低一个同样值,也是1v,那么这时候。
CAN_High就是+1v=,它就处于激活状态了。
而CAN_Low降为=。
可以看看这个图由此我们得到在隐性状态下,CAN_High线与CAN_Low没有电压差,这样我们看到没有任何变化也就检测不到信号。
但是在显性状态时,电压差最低为2V,我们就可以利用这种变化才传输数据了。
所以出现了那些帧,那些帧中的场,那些场中的位,云云~~~~~~~~~~~在总线上通常逻辑1表示隐性。
而0表示显性。
这些1啊,0啊,就可以利用起来为我们传数据了。
利用这种电压差,我们可以接收信号。
一般来说,控制单元通过收发器连接到CAN驱动总线上,这个收发器(顾名思义,可发送,可接收)内有一个接收器,该接收器是安装在接收一侧的差动信号放大器。
【原理解析】一文读懂CAN节点错误管理机制CAN节点的稳定性、可靠性和安全性得益于其强大的错误管理机制。
那么,CAN节点为什么能感知错误?又是如何响应错误?您是否能清晰地想象出这一过程?本文将为大家详细分析CAN节点错误管理的工作过程。
节点电路构成如图1所示,MCU作为主控制器,完成CAN控制器和功能电路的控制。
图1 CAN节点组成框图CAN控制器是工作于数据链路层的器件,集成了CAN规范中数据链路层的全部功能,其功能由软件和硬件共同实现,从设备供应商买回来的CAN控制器已经把相应的逻辑固化在其硅片之中;MCU是工作于应用层的器件,其功能由软件和硬件共同实现,MCU运行的程序可由设计者灵活设计,以实现CAN节点的特定功能;CAN收发器工作于物理层,其功能完全由硬件实现,其作用是将CAN控制器的逻辑电平转化为CAN总线的模拟差分信号,以及把总线模拟差分信号转换成CAN控制器的逻辑电平。
CAN节点的错误管理属于CAN通信规范数据链路层的内容,具体来说,错误管理是通过MCU和CAN控制器来实施的。
可以说,CAN控制器是错误管理的基础设施,我们可以从两个方面理解其工作逻辑:一是如何感知错误,二是如何响应错误。
注:1、本文所说的CAN规范指的是德国BOSCH公司的《CANSpecification Version 2.0》。
节点如何感知错误?如前文所述,节点对总线错误的识别是通过CAN控制器来完成的。
CAN控制器输出给收发器发送引脚TX的逻辑信号位会从收发器接收引脚RX接收,这使得CAN控制器可以在发送一个逻辑位期间同时监测总线的实际电平值。
CAN控制器检测总线错误原理如图2所示:图2 监测总线错误原理图如图2描述,CAN控制器监测一个总线电平的电平值是在采样点位置进行的,判断是否出现错误是在信息处理时间内完成的。
综上所述,CAN控制器对错误的识别可概括为:无论是作为发送器还是接收器,在采样点位置成功监测到当前总线的实际电平值后,CAN控制器便按照CAN规范中描述的错误管理规则判断是否出现错误。
1.CAN协议1.1 帧类型通讯时使用下面5个类型的帧:数据帧遥控帧错误帧过载帧帧间空隙在所有这些帧中,数据帧和遥控帧由用户设置,而其它帧则由CAN 硬件设置。
数据和遥控帧有两种格式:标准和扩展格式。
标准格式有11bit的ID,而扩展格式则是29bit的ID。
每个帧的用处见表6,每个帧的结构见图10到图14表6 帧类型和每种类型帧的作用2.2 数据帧数据帧由发送单元使用,用来发送信息给接收单元,这是用户操作的基本帧。
数据帧有7个域组成。
图15显示了数据帧的结构。
(1)帧开始(SOF):这个域表示数据帧的开始。
(2)仲裁域:这个域表示一个帧的优先级(3)控制域:这个域表示保留位和数据字节数(4)数据域:这是数据内容,0-8个字节的数据能被发送(5)CRC域:这个域用于检查帧的传输错误。
(6)ACK域:是对帧已经被正常接收的一个证实。
(7)帧结束:指示数据帧结束(1)帧开始(SOF),对标准的或扩展的格式都是一样的。
它指示一帧的开始,由1bit的显性位组成。
显性电平和隐性电平:总线上的电平有显性电平和隐性电平两种。
总线上执行逻辑上的线“与”时,显性电平的逻辑值为“0”,隐性电平为“1”。
“显性”具有“优先”的意味,只要有一个单元输出显性电平,总线上即为显性电平,并且,“隐性”具有“包容”的意味,只有所有的单元都输出隐性电平,总线上才为隐性电平。
(显性电平比隐性电平更强)(2)仲裁域,这个域表示数据的优先级别。
这个域的结构,对标准和扩展的格式是有差别的。
注1:关于ID:标准格式的ID有11bit,从ID28到ID18被依次发送,禁止高7位全为隐性。
(禁止设定:ID=1111111xxxx)。
这样总共有(2048-16)个ID能被使用。
扩展格式的ID有29个bit。
基本ID从ID28到ID18,扩展ID由ID17到ID0表示,基本ID和标准格式ID相同,禁止高7bit全都为隐性,(禁止设定:基本ID=1111111xxxx)。
CAN 总线错误类型和故障界定
CAN 是控制器局域网络(Controller Area Network,CAN)的简称,
是由研发和生产汽车电子产品着称的德国BOSCH 公司开发了的,并最终成为国际标准(ISO11898)。
是国际上应用最广泛的现场总线之一。
在建立之初,CAN 总线就定位于汽车内部的现场总线,具有传输速度快、可靠性高、灵活性强等优点。
上世纪90 年代CAN 总线开始在汽车电子行业内逐步推广,目前已成为汽车电子行业首选的通信协议,并且在医疗设备、工业生产、楼宇设施、交通运输等领域中取得了广泛的应用。
CAN 总线错误检测
CAN 总线协议定义了 5 种错误类型用于监测总线上的数据传输。
这五种错误包括:
1.位错误(Bit Error):
CAN 总线上的节点在发送数据的同时也在检测总线上的电平。
如果在仲裁域之外,所发送的数据与节点监测到的数据不一致,则CAN 总线产生了一次位错误。
但是,如果在发送ACK 段或者被动错误标志时,节点检测到总线上电平与发送值不一致,并不判定产生了位错误。
厚积薄发__技术博客
Mechatronic Engineering__机械电子工程
CAN 总线中主动错误和被动错误的通俗解释
首先建议把广泛使用的“主动错误”和“被动错误”概念换成“主动报错”和“被动报错”。
1. 主动报错站点
只要检查到错误,它立即“主动地”发出错标识。
所谓“出错标识“,它本身就是一个“错误的位序列”(连续的6个显性位,不满足CAN协议的“最多5个连续的同性位”要求),目的是“主动地”告诉大家:即使你们没有发现“刚才我已发现”的错误,现在我“以身作则”出错啦!你们该看到这个错误了吧!
2. 被动报错站点
如果检查到错误,它只能干瞪眼“被动地”等别人(主动报错站点)报错,等待的时候它可不能去动总线,直到识别出由主动报错站点发出的“错误的位序列”,它才松了一口气:有人正式报错了!然后他就可以去竞争总线,该干啥干啥。
3. 出错标识本身没有什么优先级的问题。
4. 对于通过竞争得到总线使用权的发送站点来说,它在一边发一边听,有可能出现以下几种情况:
(a)它自己就发现错误,它就干脆哗啦哗啦,乱发一气(连续的发六个同性位)。
就象你小时候在幼儿园练习写字,写错一个笔画你自己就不耐烦了,在纸上哗啦哗啦乱画一气。
目的就是告诉别人(别的站点):出错了!
(b)它自己没有发现错误,但作为主动报错的接收站点发现了错误(比如因为线路长,干扰大引起的错误),这个发现错误的站点就会立即哗啦哗啦往总线上乱发一气(连续的发六个显性位),就象你小时候在幼儿园练习写字,写错一个笔画你自己没发现,可老师(主动报错站点)发现了就不耐烦了,在你的纸上哗啦哗啦乱画一气。
目的就是告诉你自己以及告诉别人(发送站点和别的站点):出错了!
(c)它自己没有发现错误,但作为被动报错的接收站点发现了错误(比如因为线路长,干扰大引起的错误),这个发现错误的站点只能慢慢的等待,等待别的主动报错站点报错。
如果别的主动报错站点没发现错误,那就继续等,一直等到该发ACK的时候不给发送站发这个显性的ACK信号,当然了其他站点可能会发这个ACK,那说明其他站点没有发生错误,没办法,别人能通信,你不能!然后积攒到一定的时候,你就脱离总线吧!再继续等待一段时间,脱胎换骨,重新回到总线上(这个时候错误记录都清0了,你肯定是主动报错站了)。
就象你小时候在幼儿园练习写字,写错一个笔画你自己没发现,但被别的同学(被动报错站点)发现了,但他不能说,嘿嘿(乱说话,老师要打屁股的),他就只能等,等老师来发现你的错误(等待主动报错站点报错),或者老师没眼力,那就等到收作业的时候,不收你的(不发ACK),不过老师可能主动来收的(给你发ACK),那你可没办法,继续等吧,等到你也当老师了(脱胎换骨了)...
devicenet协议中关于CAN 的出错管理的规范
一、错误类型
CAN 提供了检测下列错误类型的机制:
l. 位错误
当发送器将自己发送的电平与总线上的电平相比较,发现两者不相等时产生。
隐性位传输时,显形位的检测在仲裁区, ACK 时间段或被动故障标志传输期间不会导致位错误。
2. 应答错误
当发送器确定信息没有得到应答时发生。
在数据帧及远程帧之间存在一个应答时间段。
该时间段内,所有接收的节点,无论是否是预定的接收者都必须对接收的信息作出应答。
3. 填充错误
当节点检测到 6 个相同电平值的连续位时发生。
在正常工作情况下,当发送器检测到它已经发送了 5 个数值相同的连续位时,那么它将在第六位上插入一个取反值(称之为位填充)。
所有接收器在 CRC (循环冗余检查)计算之前将除去填充位。
这样,当节点检测到 6 个连续的具有相同值的位时,即产生一个填充位错误。
4. CRC 错误
当 CRC (循环冗余检查)值与发送器生成值不匹配时发生。
每一帧包含一个由发送器初始化的循环冗余检查(CRC)域。
接收器计算出 CRC值,并与发送器产生的值相比较。
如果两个值不相等,即产生 CRC 错误。
5. 格式错误
当在一必须发送预定值的区内检测到非法位时发生。
确定的预定义的位值必须在 CAN 帧内的一个确定点发送,如果在这些区域中的一个内检测到非法位值,即产生格式错误。
二、节点错误状态
为了尽量减小网络上故障节点的负面影响,进而提供故障界定, CAN 定义了一个故障界定状态机制。
一个节点可能处于下列三种错误状态之一:
1. 错误主动(Error Active)
当一个错误主动节点检测到错误时,它将发送一个错误主动帧,该帧由 6 个连续的显性位组成。
这一发送将覆盖其他任何同时生成的发送,并导致其他所有节点都检测到一个填充错误,并依次放弃当前帧。
当处于错误主动状态的节点检测到一个发送问题时,它将发出一个活动错误帧,以避免所有其他节点接收信息包。
无论检测到错误的节点是否要接收这个数据都要执行这个过程。
2. 错误被动 (Error Passive)
当一个错误被动节点检测到错误时,它将发出一个错误被动帧。
该帧由 6 个连续的隐性位组成,这个帧可能会被同时出现的其他发送所覆盖,如果其它站点没有检测到这一错误将不会引起丢弃当前帧。
3. 离线 (Bus Off)
处于离线状态下的节点不允许对总线有任何影响它在逻辑上与网络断开。
故障界定状态机制中所含过程简述如下:
1. 节点保持对发送和接收错误计数器的跟踪;
2. 节点在开始错误主动状态时错误计数器的值等于0。
该状态下的节点假设所有检测到的错误非该节点所为;
3. 错误类型以及检出错误的结点被赋予不同的计数值,这些计数值将根据是发送还是接收错误进行累加。
有效的接收及发送使这些计数器递减,直至最小值0;
4. 当这些计数器中的任何一个超出 CAN 定义的阈值时,该节点进入错误被动状态。
在此状态下该节点将被认为是导致错误的原因;
5. 当发送错误计数值超出 CAN 定义的另一个阈值时,节点进入离线状态。
本规范定义了从离线到错误主动之间的状态转换机制;
6. 当错误被动的节点的发送及接收错误计数器值都减小至CAN 定义的阈值以下时,节点重新进入错误主动状态。