CAN 总线中主动错误和被动错误的通俗解释(很容易理解)
汽车CAN总线系统技术及故障诊断

汽车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为橙棕色。
CAN总线错误总结

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总线通讯技术已经运用于各行各业之中,基本是每个总线设计工程师必学的一个通讯网络。
但什么是CAN通讯中的错误帧,很多人还是处于只知其名,不知其所以然的状态,也因此造成许多工程师在明知总线通讯出现问题却束手无策的困扰。
1.1.1 错误标定检测到错误条件的站通过发送错误标志指示错误。
对于“错误主动”的节点,错误信息为“主动错误标志”,对于“错误被动”的节点,错误信息为“被动错误标志”。
站检测到无论是位错误、填充错误、形式错误,还是应答错误,这个站会在下一位时发出错误标志信息。
只要检测到的错误的条件是CRC错误,错误标志的发送开始于ACK界定符之后的位(其他的错误条件除外)。
1.2 故障界定至于故障界定,单元的状态可能为以下三种之一:●‘错误主动’●‘错误被动’●‘总线关闭’“错误主动”的单元可以正常地参与总线通讯并在错误被检测到时发出主动错误标志。
“错误被动”的单元不允许发送主动错误标志。
“错误被动”的单元参与总线通讯,在错误被检测到时只发出被动错误标志。
而且,发送以后,“错误被动”单元将在初始化下一个发送之前处于等待状态。
(见“挂起发送”)“总线关闭”的单元不允许在总线上有任何的影响(比如,关闭输出驱动器)。
在每一总线单元里使用两种计数以便故障界定:●发送错误计数●接收错误计数这些计数按以下规则改变(注意,在给定的报文发送期间,可能要用到的规则不只一个):●当接收器检测到一个错误,接收错误计数就加1。
在发送主动错误标志或过载标志期间所检测到的错误为位错误时,接收错误计数器值不加1。
●当错误标志发送以后,接收器检测到的第一个位为“显性”时,接收错误计数值加8。
●当发送器发送一错误标志时,发送错误计数器值加8⏹例外情况1:发送器为“错误被动”,并检测到一应答错误(注:此应答错误由检测不到一“显性”ACK 以及当发送被动错误标志时检测不到一“显性”位而引起)。
⏹例外情况2:发送器因为填充错误而发送错误标志(注:此填充错误发生于仲裁期间。
CAN总线技术CAN总线错误类型

所谓重同步,就是节点根据沿相位误差的大小 调整其内部位时间。重同步的结果是,节点内 部位时间与来自总线的报文位流的位时间接近 或相等,从而使节点能够正确地接收报文。重 同步一般用于报文位流发送期间,以补偿各个 节点振荡器频率的不一致。
沿相位误差由来自总线的沿相对于节点内部位 时间同步段的位置给定,以时间份额量度。
CAN总线技术CAN总线错误类型
位时序逻辑BTL:位时序逻辑监视串口的CAN 总 线,并处理与总线有关的位时序。它在信息开头, 由隐性到显性的变换同步CAN 总线位流(硬同 步),接收信息时再次同步下一次传送(软同 步)。BTL 还提供了可编程的时间段来补偿传播 延迟时间、相位转换(例如,由于振荡漂移)和 定义采样点和每一位的采样次数。
(3)确定重同步跳转宽度以用于重同步。
CAN总线技术CAN总线错误类型
位定时与同步
一个节点应既能在位时间的采样点正确地 读取总线电平,也能检测来自总线的沿以 进行硬同步或重同步。
在CAN技术规范的时间份额的表达式中, 对于常用的独立CAN控制器SJA1000和 P8xC591中的CAN控制器,时间份额tq 为系统时钟周期tscl;预引比例因子m为 可编程的,其值取决于总线定时寄存器0 (BTR0)的内容;最小时间份额为振荡 器周期tCLK的2倍,即2tCLK。
CAN总线技术CAN总线错误类型
形式错误(Form Error)
当固定形式的位场中出现一个或更多非法位 时,则检出一个形式错误。
CAN总线技术CAN总线错误类型
应答错误(Acknowledgement Error)
在应答间隙期间,发送器未检测到“显性”位, 则由它检出一个应答错误。
CAN总线技术CAN总线错误类型
CAN总线错误处理

CAN总线错误处理CAN怎样处理错误错误处理内建在CAN协议中,对CAN系统的运行十分重要。
错误处理的目标是检测CAN总线上出现的报文中的错误,从而传送器可以重传出错的报文。
总线上的每个CAN控制器都会尝试检测报文中的错误。
如果发现错误,发现节点将传送一个错误标志,从而中断总线通信。
其它节点将检测错误标志导致的错误(如果它们尚未检测到初始错误)并采取合适的措施(例如丢弃当前报文)。
每个节点维护两个错误计数器:传送错误计数器和接收错误计数器。
有几个规则规定这些计数器怎样增加和/或减少计数。
总的来讲,检测到故障的传送器增加其传送错误计数器比侦听节点增加其接收错误计数器要快。
这是因为,很有可能是传送器发生了故障!当任何错误计数器增加到超过某个值时,节点将首先进入“错误被动”,也就是说,它在检测到错误时不会积极地阻止总线通信,然后“离开总线”,这意味着节点根本不参与总线通信。
使用错误计数器,CAN节点不但可以检测故障,而且可以执行错误限制。
错误检测机制CAN协议定义了五种以上不同的方法来检测错误。
其中两种工作在位层次,另外三种工作在报文层次。
位监视位填充帧检查应答检查循环冗余检查1. 位监视CAN总线上的每个传送器都会监视(也就是回读)传送的信号电平。
如果真正读到的位电平与传送的位电平不同,会发出信号指示位错误(仲裁过程中不会发出位错误)。
2. 位填充节点连续发送五个具有相同电平的位后,将在发送出去的位流中加上第六个相反电平的位。
接收方将删除这个额外的位。
这样做是为了避免总线上出现过度的直流电成分,但它同时也给予了接收方检测错误的额外机会:如果总线上出现五个以上相同电平的连续位,会发出信号指示填充错误。
3. 帧检查CAN报文的一些部分具有固定的格式,也就是说,标准明确定义了何种电平和何时出现这种电平(CRC定界符、ACK定界符、帧结束以及间歇,但是间歇还有一些另外的特殊错误检查规则)。
如果一个CAN控制器在这些固定字段中的一个中检测到无效值,将发出组成错误。
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节点为什么能感知错误?又是如何响应错误?您是否能清晰地想象出这一过程?本文将为大家详细分析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规范中描述的错误管理规则判断是否出现错误。
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 总线错误类型和故障界定
CAN 是控制器局域网络(Controller Area Network,CAN)的简称,
是由研发和生产汽车电子产品着称的德国BOSCH 公司开发了的,并最终成为国际标准(ISO11898)。
是国际上应用最广泛的现场总线之一。
在建立之初,CAN 总线就定位于汽车内部的现场总线,具有传输速度快、可靠性高、灵活性强等优点。
上世纪90 年代CAN 总线开始在汽车电子行业内逐步推广,目前已成为汽车电子行业首选的通信协议,并且在医疗设备、工业生产、楼宇设施、交通运输等领域中取得了广泛的应用。
CAN 总线错误检测
CAN 总线协议定义了 5 种错误类型用于监测总线上的数据传输。
这五种错误包括:
1.位错误(Bit Error):
CAN 总线上的节点在发送数据的同时也在检测总线上的电平。
如果在仲裁域之外,所发送的数据与节点监测到的数据不一致,则CAN 总线产生了一次位错误。
但是,如果在发送ACK 段或者被动错误标志时,节点检测到总线上电平与发送值不一致,并不判定产生了位错误。
CAN总线错误处理机制及Bus off问题现象分析

处理结果:由于该策略在控制器开发初期已同我厂检讨,我厂同意保持该策略,故后续车型 量产中维持该策略不变。
Bus off问题现象分析
此处以相似的Ford Bus off策略解析:
前10次Bus off恢复时间40ms,如持 续进入Bus off状态则后续Bus off恢 复时间为1s,直至Bus off条件被排 除
CAN节点可以区分常规错误和永久故障。有故障的发送节点将切换到离线状态。离线意味着 在逻辑上与总线断开,既不能发送也不能接收。
Error-active(主动错误) An error-active node shall normally take part in bus communication and send an active error flag when an error has been detected. The active error flag shall consist of six (6) consecutive dominant bits and shall violate the rule of bit stuffing and all fixed formats appearing in a regular frame .
CAN总线错误处理机制——错误通知
■
错误管理的重要概念(ISO11898)
节点的三种状态
CAN总线错误处理机制——错误通知
■
错误通知
总线通信错误以向总线上发送错误帧作为标志。
CANoe Trace窗口中的5种类型 的错误帧
CAN总线错误处理机制——错误通知
CAN总线基础(1)— CAN简介及特点

1.CAN是什么?CAN 是Controller Area Network 的缩写(以下称为CAN),是ISO国际标准化的串行通信协议。
在当前的汽车产业中,出于对安全性、舒适性、方便性、低公害、低成本的要求,各种各样的电子控制系统被开发了出来。
由于这些系统之间通信所用的数据类型及对可靠性的要求不尽相同,由多条总线构成的情况很多,线束的数量也随之增加。
为适应“减少线束的数量”、“通过多个LAN,进行大量数据的高速通信”的需要,1986 年德国电气商博世公司开发出面向汽车的CAN 通信协议。
此后,CAN 通过ISO11898 及ISO11519 进行了标准化,现在在欧洲已是汽车网络的标准协议。
现在,CAN 的高性能和可靠性已被认同,并被广泛地应用于工业自动化、船舶、医疗设备、工业设备等方面。
下图是车载网络的构想示意图。
CAN 等通信协议的开发,使多种LAN 通过网关进行数据交换得以实现。
2.CAN的应用实例3.总线拓扑图CAN 控制器根据两根线上的电位差来判断总线电平。
总线电平分为显性电平和隐性电平,二者必居其一。
发送方通过使总线电平发生变化,将消息发送给接收方。
CAN的连接示意图4.CAN的特点CAN 协议具有以下特点:(1) 多主控制在总线空闲时,所有的单元都可开始发送消息(多主控制)。
最先访问总线的单元可获得发送权(CSMA/CA 方式)。
多个单元同时开始发送时,发送高优先级ID 消息的单元可获得发送权。
(2) 消息的发送在CAN 协议中,所有的消息都以固定的格式发送。
总线空闲时,所有与总线相连的单元都可以开始发送新消息。
两个以上的单元同时开始发送消息时,根据标识符(Identifier 以下称为ID)决定优先级。
ID 并不是表示发送的目的地址,而是表示访问总线的消息的优先级。
两个以上的单元同时开始发送消息时,对各消息ID 的每个位进行逐个仲裁比较。
仲裁获胜(被判定为优先级最高)的单元可继续发送消息,仲裁失利的单元则立刻停止发送而进行接收工作。
CAN总线的信号错误

CAN总线的信号错误1. 帧结构1.1 错误帧错误帧用于在接收和发送消息时检测出错误通知错误的帧,它由错误标志和错误界定符构成。
图1 错误帧结构,引自[1]上图1的错误标志包括主动错误标志(6个位的显性位)和被动错误标志(6个位的隐性位)两种。
主动错误标志处于主动错误状态下的单元检测出错误时输出的错误标志。
被动错误标志处于被动错误状态的单元检测出错误时输出的错误标志。
错误界定符由8个位的隐性位构成。
注意上图0~6位的错误标志重叠,这段怎么确定呢?需先介绍2个概念:位填充和错误类型。
1)位填充(Bit Stuffing)位填充是为防止突发错误而设定的功能。
当同样的电平持续5位则添加一个位的反型数据位:图2 位填充示意,引自[1]注意:位填充作用范围为SOF-CRC段机间的数据。
2) 错误类型错误类型有5种,如下图3所述。
图4为CRC错误示意。
图3 错误类型描述,引自[1]图4 CRC验证示意,引自[2]针对上述位错误再做说明(引自[3]):所谓“发出的电平与从总线上回读的电平不一致”,指的就是节点向总线发出隐性位,却从总线上回读到显性位或者节点向总线发出显性位,却从总线上回读到隐性位这两种情况。
有三种例外情况不属于位错误:在仲裁区,节点向总线发送隐性位却回读到显性位,不认为是位错误,这种情况表示该节点仲裁失败;在ACK槽,节点向总线发送隐性位却回读到显性位,不认为是位错误,这种情况表示,该节点当前发送的这一帧报文至少被一个其它节点正确接收;一个节点发送被动错误标志,该节点向总线发送连续六个隐性位(被动错误标志)却回读到显性位,不认为是位错误。
因为被动错误标志是六个连续的隐性位,所以在总线上按照线与机制,有可能这六个连续隐性位被其它节点发送的显性电平覆盖。
3)错误帧发送检查到错误后,什么时候发送错误帧呢?按照CAN协议的规定:•位错误、填充错误、格式错误、ACK错误。
在错误产生的那一位的下一位开始发送错误帧。
CAN总线错误检测机制

CAN总线错误检测机制你了解CAN总线吗?你知道总线中有哪些错误吗?你想了解总线中的错误是如何校验以及错误之间的关系吗?下文为大家揭开它神秘的面纱。
CAN总线是ISO国际标准化的串行通信协议。
在汽车产业中,出于对安全性、舒适性、方便性、低公害、低成本的要求,各种各样的电子控制系统被开发了出来。
由于这些系统之间通信所用的数据类型及对可靠性的要求不尽相同,由多条总线构成的情况很多,线束的数量也随之增加。
为适应“减少线束的数量”、“通过多个LAN,进行大量数据的高速通信”的需要,CAN总线应运而生,图1为CAN总线在汽车中的应用图。
图1 汽车中CAN总线的应用CAN的高性能和可靠性已被认同,并被广泛地应用于工业自动化、船舶、医疗设备、工业设备等方面。
现场总线是当今自动化领域技术发展的热点之一,被誉为自动化领域的计算机局域网。
图2为CAN总线网路图,它的出现为分布式控制系统实现各节点之间实时、可靠的数据通信提供了强而有力的技术支持。
图2 CAN总线网路图CAN总线作为可靠性非常高的总线,出错概率非常小,这也是它被广泛应用的原因之一。
在CAN总线的实际研发中,相较于CAN总线的正确帧,工程师更关注CAN总线的错误帧,下面将为大家展现CANscope波形常见的几类错误,图3为干扰导致的CAN通讯错误。
图3 错误波形图图4为终端电阻并联过多,差分电平幅值太小导致接收节点识别失败的错误。
图4 错误波形图图5为总线支线过长,电平下降沿台阶过高,导致位宽度失调的错误。
图5 错误波形图图6为卡车打开/关闭大灯时,耦合到CAN总线上的干扰,导致的错误。
图6 错误波形图图7为波特率异常(位宽度从2us突然变成1.6us),导致位错误。
图7 错误波形图CAN总线的错误都有哪些形式,相互之间有什么样的关系,以及总线的检测与校验的原理是什么?CAN总线的错误帧可分为位错误、位填充错误、CRC错误、格式错误、应答错误五大类,每类错误的具体解释如图8所示,此图简洁明了的展现了各种错误。
CAN总线错误及故障处理解析

位检测
1. 在发送过程中发送器通过接收端监视总线上
每一位发送出去的电平是否与发送驱动的一 致 2. 当发监视位电平与发送驱动的不一致将产生 一个位错误标记 3. 在仲裁场和ACK场不执行填充位错误检测
致远电子
传递价值 成就你我
http://www.embedcontrol. com
基于位(bit)级别错误检测
传递价值 成就你我
http://www.embedcontrol. com
总线错误及故障处理
Version 1.10 2006年5月
致远电子
传递价值 成就你我
http://www.embedcontrol. com
本节主要内容
五种错误检测机制 错误标记及错误计数 错误帧及超载帧 错误等级划分 主动错误模式及被动错误模式 总线关闭模式 常见总线故障原因及处理
致远电子
传递价值 成就你我
http://www.embedcontrol. com
错误中断处理(SJA1000)
数据溢出中断处理
inline void KSJA1000T::INT_DataOverrun(void) { if(((UCHAR)m_rMode & RM_BIT) != 0) { StartCAN(); }
总线关闭模式,任意一个错误计数器超越 255导致控制器进入总线关闭模式
1. 持久的总线故障将导致总线关闭
2. 在总线故障清除,控制器检测到总线上连续
的11位隐性位发生128次后,总线关闭的节点 将返回到错误激活状态,错误寄存器状态清 零
致远电子
传递价值 成就你我
常见总线故障原因及处理
http://www.embedcontrol. com
CAN总线介绍

CAN总线介绍总线可以具有两种互补的逻辑值之一:“显性”或“隐性”。
用逻辑0 代表“显性”等级,逻辑1 代表“隐性”等级。
1 数据帧数据帧携带数据由发送器至接收器,它由7个不同的位场组成,分别是帧起始、仲裁场、控制场、数据场、CRC场、应答场以及帧结束。
在具体编程中只要正确地运用仲裁场、控制场中的数据长度码、数据场即可。
帧起始――标志一个数据帧或远程帧的开始,它是一个显性位。
仲裁场――包括报文标识符11位(CAN2.0A标准)和远程发送申请RTR位,这12位共同组成报文优先权信息。
数据帧的优先权比同一标识符的远程帧的优先权要高。
最高的7 位(ID-10 到ID-4)必须不能全是“隐性”。
控制场――由6位组成,包括2位作为控制总线发送电平的备用位(留作CAN通信协议扩展功能用)与4位数据长度码。
其中数据长度码(DLC0-DLC3)指出了数据场中的字节数目0∽8(被发送/接收的数据的字节数目)。
数据场――存储在发送缓冲器数据区或接收缓冲器数据区中以待发送或接收的数据。
按字节存储的数据可由微控制器发送到网络中,也可由其它节点接收。
其中第一个字节的最高位首先被发送或接收。
CRC场――又名循环冗余码校验场,包括CRC序列(15位)和CRC界定符(1个隐性位)。
CRC场通过一种多项式的运算,来检查报文传输过程中的错误并自动纠正错误。
这一步由控制器自身来完成。
应答场――包括应答间隙和应答界定符两位。
发送站发送两个“隐性”位。
当接收器正确地接收到有效的报文,接收器就会在应答间隙(ACK SLOT)期间(发送ACK 信号)向发送器发送一“显性”的位以示应答。
帧结束――每一个数据帧和远程帧均结束于帧结束序列,它由7个隐性位组成。
2 错误帧错误帧由两个不同的场组成。
第一个场用作为不同站提供的错误标志(ERROR FLAG)的叠加。
第二个场是错误界定符。
有两种形式的错误标志,主动错误标志(Active error flag)和被动错误标志(Passive error flag)。
详解常用的CAN总线(下):错误帧

详解常用的CAN总线(下):错误帧错误帧种类错误帧种类分为5种,分别是:位发送错误、AC K错误、位填充错误、CRC错误、格式错误。
位发送错误节点将自己发送到总线上的电平与同时从总线上回读到的电平进行比较,如果发现二者不一致,那么这个节点就会检测出一个位错误。
实际上所谓“发出的电平与从总线上回读的电平不一致”,指的就是节点向总线发出隐性位,却从总线上回读到显性位或者节点向总线发出显性位,却从总线上回读到隐性位这两种情况。
ACK错误ACK在ACK段中讲解过,按照CAN协议的规定,发送节点Node_A在一帧报文(数据帧或者遥控帧)发出之后,如果接收节点Node_B成功接收了该帧报文,那么接收节点Node_B就要在该帧报文ACK槽对应的时间段内向总线上发送一个显性位来应答发送节点Node_A。
这样发送节点Node_A就会在ACK槽时间段内从总线上回读到一个显性位。
因此:当发送节点Node_A在ACK槽时间段内没有回读到显性位,那么发送节点Node_A就会检测到一个ACK应答错误。
这表示没有一个节点成功接收该帧报文,此时CAN总线认为是ACK应答错误。
位填充错误帧起始到CRC校验之前的物理上电平不允许有6个连续的相同电平,发送器只要检测到位流中有5个连续相同逻辑的位,便会自动在下一位插入一个相反的电平。
从帧起始到CRC之间,接收节点检测到有6个连续相同的位电平时,也就是违反5位相同位插入1位相反位的“位填充”原则;因为ACK域和帧结束域电平固定,也无需填充;帧起始、仲裁域、控制域、数据域以及CRC校验和域,均通过位填充方法编码。
位填充是指:无论何时,发送器只要检测到位流中有5个连续相同逻辑的位,便会自动在位流中插入一个补码位。
举例来说,如果连续5个显性位,则在5个显性位之后自动插入1个隐性位,接收器会自动删除这个插入的填充位。
数据帧或远程帧的剩余位域(CRC界定符、应答域和帧结尾域)形式固定,不填充;错误帧和过载帧也不填充。
CAN总线错误处理机制及Bus off问题现象分析

处于被动错误状态的节点不能发送主动错误标志。它能参与正常通信,但当检测到错误时发 送的是被动错误标志。被动错误标志由6个连续的隐性位组成。当发送结束后,处于被动错 误状态的节点在下一次再次发送时之前需要等待一些额外时间。
Bus-off(离线) A bus-off state shall not have any influence on the bus. It shall neither send any frames nor send ACK, error frames, overload frames. Whether such a node receives frames from the bus depends on the implementation.
Bus-off恢复时间( T[BusOff] )
ECU进入bus-off模式后, 执行复原模式。恢复应连续执行直到bus-off故障恢复。下表给出 了复原模式的bus-off恢复时间。 Time T[BusOff] Min.[ms] 180 Typ.[ms] 200 Max.[ms] 220
Bus off问题现象分析
处于主动错误状态的节点能正常参与总线通信的收发和当检测到错误时将发送主动错误标志, 错误标志由6个连续的显示位组成(这种连续的6个显示位与常规的填充位和其它帧固定格式 不相同,正因为如此,硬件才容易区别)。
CAN总线错误处理机制——错误通知
■
错误管理的重要概念(ISO11898)
Error-passive(被动错误) An error-passive node shall not send an active error flag. It takes part in bus communication, but when an error has been detected a passive error flag shall be sent. The passive error flag shall consist of six (6) consecutive recessive bits. After transmission, an error-passive node shall wait some additional time before initiating a further transmission .
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
厚积薄发__技术博客
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 定义的阈值以下时,节点重新进入错误主动状态。