历史上的今天
返回首页

历史上的今天

今天是:2025年08月04日(星期一)

正在发生

2020年08月04日 | 总线关闭(bus off)状态下CAN节点的恢复过程分析与测试

2020-08-04 来源:EEWORLD

总线关闭(bus off)是CAN节点比较重要的错误处理机制。那么,在总线关闭状态下,CAN节点的恢复流程是怎样的?又该如何理解节点恢复流程的“快恢复”和“慢恢复”机制?本文将为大家详细分析总线关闭及恢复的机制和原理。


一、 故障界定与总线关闭状态

为了避免X某个设备因为自身原因(例如硬件损坏)导致无法正确收发报文而不断的破坏总线的数据帧,从而影响其它正常节点通信,CAN网络具有严格的错误诊断功能,CAN通用规范中规定每个CAN控制器中有一个发送错误计数器和一个接收错误计数器。根据计数值不同,节点会处于不同的错误状态,并根据计数值的变化进行状态转换,状态转换如下图所示。

图1节点状态转换图情形1
 

以上三种错误状态表示发生故障的严重程度,总线关闭是节点最严重的错误状态。并且,节点在不同的状态下具有不同的特性,在总线关闭状态下,节点不能发送报文或应答总线上的报文,也就意味着不能再对总线有任何影响。

状态跳转和错误计数的规则使得节点在发生通信故障时有了较好的自我错误处理和恢复机制,从一种较严重的错误状态跳转到另一种严重性相对较低的状态,本质上就是一种恢复过程。图1所呈现的转换过程是CAN通用规范所要求的,我们从设备供应商买回来的CAN控制器已经把这些功能固化在硅片之中。

在通信过程中,错误主动和错误被动两种状态下节点的恢复过程一般不需要MCU进行额外的编程处理,直接使用CAN控制器固有功能即可。但对于总线关闭状态,往往不直接使用CAN控制器固有的恢复过程,而是对其进行编程控制,以实现“快恢复”和“慢恢复”机制。

注:

1、由于篇幅有限,关于错误计数的详细规则以及各状态下节点的具体特性不在本文进行讨论,读者可以查阅CAN的相关协议规范。

2、本文的“CAN控制器”是指已经实现了CAN通用协议物理层和数据链路层所要求的功能和特性的器件,如SJA1000;而“节点”是指把CAN控制器与MCU、收发器等相关器件进行整合开发出来的具有一定功能的CAN节点。

二、 为什么需要对总线关闭状态的节点实现“快恢复”和“慢恢复”策略?

当节点进入总线关闭状态后,如果MCU仅是开启自动恢复功能,CAN控制器在检测到128次11个连续的隐性位后即可恢复通信,在实际的CAN通信总线中,这一条件是很容易达到的。以125K的波特率为例,128*11*(1/125000)= 0.011264s。这意味着如果节点所在的CAN总线的帧间隔时间大于0.011264s,节点在总线空闲时间内便可轻易恢复通信。我们已经知道,当进入总线关闭状态时,节点已经发生了严重的错误,处于不可信状态,如果迅速恢复参与总线通信,具有较高的风险,因此,在实际的应用中,往往会通过MCU对CAN控制器总线关闭状态的恢复过程进行编程处理,以控制节点从总线关闭状态恢复到错误主动状态的等待时间,达到既提高灵活性又保证节点在功能上的快速响应性的目的。具体包括“快恢复”和“慢恢复”策略,两种策略一般同时应用。

通过以上的讨论,我们可以知道,节点进入总线关闭状态后,存在以下几种恢复情况:

(1)MCU仅开启CAN控制器的自动恢复功能,节点只需检测到128次11个连续的隐性位便可以恢复通信,恢复过程如图1所示。

(2)MCU没有开启CAN控制器的自动恢复功能,也不主动干预总线关闭错误,节点将一直无法“自动”恢复总线通信,只能通过重新上电的方式使节点恢复, 恢复过程如图2所示。

图2 节点状态转换图情形2
 

(3)MCU对CAN控制器的恢复过程进行编程处理,这时,节点的恢复行为由具体的编程逻辑决定,各厂家普遍采用了先“快恢复”后“慢恢复”的恢复策略,恢复过程如图3所示。

图3 节点状态转换图情形3
 

三、MCU如何实现“快恢复”和“慢恢复”?

MCU编程实现总线关闭“快恢复”和“慢恢复”的一般过程可用以下流程图描述:

图4  MCU实现总线关闭恢复流程
 

节点以正常发送模式发送报文的过程中,如果出现了发送错误,发送错误计数会增加,只要发送错误计数没有超过255, CAN控制器便会自动重发报文,如果出现多次发送错误,使发送错误计数累加超过255,则节点跳转为总线关闭状态。MCU能够第一时间知道节点进入了总线关闭状态(例如在错误中断处理逻辑中查询状态寄存器的相应位),这时MCU控制CAN控制器进入“快恢复”过程,即控制CAN控制器停止报文收发,并进行等待,计时达到需要的时间T1(如100ms)后,MCU重新启动恢复CAN控制器参与总线通信,这样便完成了一次“快恢复”过程。

节点每进入一次“快恢复”过程时,MCU会对此进行计数,当节点“快恢复”计数达到设定的值N(如5次),则后续再次进入总线关闭状态时MCU把恢复总线通信的等待时间T2进行延长(如1000ms),这样便实现了“慢恢复”过程。“快恢复”和“慢恢复”过程的主要区别就在于恢复节点参与总线通信的等待时间的不同。

通过MCU对于总线关闭后的恢复行为进行编程控制,实际上是对CAN控制器的错误管理和恢复机制进行了补充,使得总线关闭状态后的恢复过程更加灵活,更能适应实际应用的需要。对于 “快恢复”和“慢恢复”的等待时间,以及“快恢复”计数多少次后进入“慢恢复”过程,不同厂家可根据具体的需求进行编程实现。

四、 实测总线关闭恢复过程

通过广州致远电子有限公司的CAN总线分析仪的流量分析功能,可以很方便分析总线关闭后节点的恢复过程及测试“快恢复”和“慢恢复”的恢复时间。

第一步,连接DUT但先不要上电。按以下配置,使能接收干扰功能,并开启报文读取功能。

图5 功能设置
 

第二步,给DUT上电,并采集一段时间报文,停止采集后使用流量分析功能进行分析。

图7 读取恢复时间
 

至此,我们便可以得出结论:该DUT对总线关闭的恢复过程进行了编程控制,采用了先“快恢复”后“慢恢复”的恢复机制,节点进入总线关闭状态后,进行一次“快恢复”过程,后续进行“慢恢复”过程,两个恢复过程的恢复时间分别为27.5ms和209.5ms。

那么,我们该如何根据所得波形理解该DUT进入总线关闭状态及恢复通信的整个过程呢?
把第一个波形“团”放大得到下图:

图8 放大波形“团”观察
 

可以清晰的看到,波形“团”中包含共32帧CAN报文。把其余各波形“团”放大后也都是包含32帧,这里不再把详细的图片贴出来。

DUT上电后,初始发送和接收错误计数都为0。由于在测试时配置了接收干扰功能,当DUT开始发送报文后,每一帧报文都受到CAN总线分析仪的干扰而出现发送错误,第一次发送时发送错误计数加8,并自动重发,第二次发送时错误计数再加8,直到发送了32次后,发送错误计数大于255,根据图3的错误状态的转换规则,这时DUT跳转为总线关闭状态,MCU控制进入“快恢复”过程同时对“快恢复”次数进行计数,并等待约27ms后,MCU控制DUT从总线关闭状态恢复为错误主动状态,由MCU继续启动发送,由于仍然受CAN总线分析仪的持续干扰,发送32帧后再次进入总线关闭状态,再次执行“快恢复”或“慢恢复”过程,以此类推。

根据流量分析的结果可知,该DUT进入“快恢复”的计数达到1次后便执行“慢恢复”过程,“慢恢复”等待时间约为209ms。

注:

1、干扰的设置可以根据需要设置其他的参数,只要保证能对DUT发送的帧进行干扰使其出现发送错误即可。

2、为了分析完整的总线关闭恢复过程,建议DUT和CAN总线分析仪连接好后,先开启“报文读取”和“接收干扰”功能后再上电DUT。因为这样能确保DUT的接收错误计数和发送错误计数的初始计数都为0。

3、需要对DUT进行连续的干扰,否则DUT恢复后成功发送了报文,“快恢复”次数的计数会递减,这不利于分析DUT总线关闭后的整个恢复行为。 

4、总线关闭后节点的“恢复”是指恢复参与总线的通信,但并不意味着恢复后一定能成功发送或接收报文。如上述案例,DUT恢复通信后由于仍然受CAN总线分析仪的干扰,导致报文发送再次失败。

总结:

在总线关闭状态下,“快恢复”和“慢恢复”不是CAN控制器固有的功能,而是通过MCU的编程逻辑实现的恢复机制,是总线关闭状态下恢复过程的补充,使恢复过程更具有灵活性。


推荐阅读

史海拾趣

Gold Peak Group公司的发展小趣事
控制电路的布局应合理,避免元件之间的电磁干扰和机械碰撞。
Brainboxes公司的发展小趣事

Brainboxes一直注重与客户建立紧密的合作关系。公司深入了解客户的需求和应用场景,为其提供定制化的解决方案。此外,Brainboxes还积极参与工业连接领域的发展,与多家知名企业建立合作关系,共同推动行业的技术进步和应用创新。这种客户亲密度和工业连接能力使得Brainboxes在市场竞争中占据有利地位。

Hittite Microwave(ADI)公司的发展小趣事

Brainboxes一直注重与客户建立紧密的合作关系。公司深入了解客户的需求和应用场景,为其提供定制化的解决方案。此外,Brainboxes还积极参与工业连接领域的发展,与多家知名企业建立合作关系,共同推动行业的技术进步和应用创新。这种客户亲密度和工业连接能力使得Brainboxes在市场竞争中占据有利地位。

国炬(GOOGLL)公司的发展小趣事
可能是由于场效应管损坏、电源电压不足或负载阻抗过大等原因引起。解决方法包括更换损坏的场效应管、检查电源电压并适当提高或降低负载阻抗。
Communications公司的发展小趣事

在电子行业的跨界融合趋势下,一家名为“智联通信”的公司通过整合不同领域的技术和资源,成功打造出了一个全新的通信生态系统。他们不仅拥有先进的通信技术,还积极与互联网、物联网等领域的企业进行合作,共同开发新的应用场景。

通过跨界融合,“智联通信”成功地将通信技术应用于智能家居、智慧城市等多个领域,为用户提供了更加便捷、高效的服务体验。同时,他们还积极拓展海外市场,与全球伙伴共同推动通信行业的发展。

川晶科技公司的发展小趣事

品质是川晶科技的生命线。公司始终将品质管理贯穿于产品研发、生产、销售等各个环节,严格执行质量管理体系标准。通过引进先进的检测设备和方法,加强产品质量控制和检验,确保每一件产品都符合客户的要求和期望。同时,公司还建立了完善的售后服务体系,为客户提供及时、专业的技术支持和服务。川晶科技凭借卓越的品质和优质的服务赢得了客户的信赖和支持。

问答坊 | AI 解惑

猜题啦,大家一起猜

本帖最后由 paulhyde 于 2014-9-15 09:08 编辑 09电赛猜题群!信号+控制类! QQ号:89212186 集各省高手,猜09赛题! 大家抓紧时间,多多交流,争取缩小赛题!  …

查看全部问答>

如何挂载jffs2分区?

我的板子上的Flash是32M的,linux系统里面已经挂载了12M,所以还剩20M的空间。现在,因为空间不够了,所以想把剩于的20M空间给挂起来。现在的问题就是如何把这些空间给挂起来?请一步一步说得稍详细一下点儿,谢谢!…

查看全部问答>

用DDK做一个虚拟打印机,请高手指教

RT。最近在做一个项目,内容是用DDK做一个windows的虚拟打印机(不是一个打印机功能的应用程序,而是一个像PDFCREATOR那样的,可以被WORD等调用的虚拟打印机)。要求是在设置完参数,点击OK的时候将打印信息发到一个指定的网页上。 我下了DDK(版 ...…

查看全部问答>

单片机定时闹钟

我想在电子钟上加一个闹钟功能(定时,设置时间) 发现 网上 要用到两个定时器或者有外部中断什么的 可以大概讲解定时器作用么?...…

查看全部问答>

驱动模块makefile文件编写求助

自己编的一个linux驱动,我原来的工程目录是这样的:工程总目录下有一个include文件夹,所有的.c源文件,makefile文件,还有一个总的x.h头文件,x.h中include了include文件夹中所有的头文件和一些内核的头文件。include文件夹里有几个子文件夹,按 ...…

查看全部问答>

ds18b20可以用3v供电吗?

ds18b20可以用3v供电吗? 能的话,会不会对它的精度有影响啊?请用过的大侠帮帮忙,先谢过了!…

查看全部问答>

请分析以下system_stm32f10x.c文件中的一段语句?

在 system_stm32f10x.c 文件中,有下面一个函数: SystemInit_ExtMemCtl() { ...... /*----------------  FSMC Configuration ---------------------------------------*/   /*----------------  Enable FS ...…

查看全部问答>

请教关于A/D内部参考源问题

请教关于A/D内部参考源问题,430F133自带的2.5V参考源是否可以使用,要是使用能满足什么精度啊,我对可燃气体进行A/D,我怕使用后精度不够,请大家执教…

查看全部问答>

pic的功耗问题

我现在在做一个低功耗的项目 需要用到PIC 的 16F1825 可是我不知道16F1825的功耗是多少,怎么计算出来呢?? 90mJ 的能量大概能运行多少个Cycle呢?…

查看全部问答>

粗粗实测了一下stm8s105c6t6的一些执行时间

做着ds18b20,用的stm8s discover的开发板。 上头载的是 stm8s105c6t6,因为写出来的程序始终没读到想要的结果——能够初始化复位,发现线上的ds18b20. 手头有一个淘宝上买的48快的 逻辑分析仪。其实这玩意还真挺牛的。 一个最好的实证的是,当 ...…

查看全部问答>