从项目中学习Bus-Off的快慢恢复

0 前言

        说到Bus-Off,大家应该都不陌生,使用VH6501干扰仪进行测试的文章在网上数不胜数,但是一般大家都是教怎么去干扰,但是说如何去看快慢恢复以及对快慢恢复做出解释比较少,因此本文以实践的视角来讲解Bus-Off的快慢恢复。

1 VH6501实现Bus-Off

      首先需要知道Bus-Off的基本概念,简单来说ECU一直在往CAN总线上发送CAN报文,但不知道什么原因一直发送不出去,如果这个发送错误计数累计到255( ECU发送失败:发送错误计数 + 8, ECU发送成功:发送错误计数 - 1),ECU进入Busoff模式。ECU在Busoff期间不妨碍总线上的其它节点。一些主机厂对其系统供应商的设备提出了相应的Busoff后恢复时间需求。例如:当ECU 进入Busoff 模式后,首先,ECU 执行快恢复模式,连续n次(TBD值,不同厂商次数要求不一样)快速恢复后,ECU 进入慢恢复模式[1]

BUSOFF有三个状态的转换,发错一帧错误帧TEC计数器就会加8,这也是为什么我们会在VH6501中设置32帧的原因,8*32=256,刚好进入Bus-Off模式。

        基本概念了解完了,使用VH6501进行干扰主要分为以下几步:

1.硬件通道的配置,以及测试工程的选择,测试工程一般选择CANoe自带的例子。

         此处需要注意的是一般使用的是双头DB9连接CANoe与VH6501继续测试,但本文的方式并没有使用双头DB9,整个硬件连接只用了一个DB9连接DUT,因为内容关系在此按下不表,如果有小伙伴感兴趣的可以评论或者私信我。

2.打开MainConfigpanel面板,从上到下开始依次配置。

        首先配置Trigger Configuration,一般可以选择干扰AckSlot,如果想要干扰特定报文的话,此处报文ID为11位,二进制转换过来为12位删除左边第一位。干扰帧为整个里面出现的第一帧(ID最小的),干扰的报文需要在trcae中持续出现。干扰Rx报文。

3. 干扰的重复次数以及周期

4.Sequence Configuration 

        如图所示进行配置即可。

 

到此就已经配置完毕了,点击Enable On Device就可以开始干扰了,由于使用VH6501测试Bus-off并不是本文重点,因此如果有不清楚的地方推荐大家看这篇文章,这也是我上文[1]处引用的文章:CAN Busoff原理/快慢恢复介绍以及利用Vector VH6501 CAN干扰仪经典CAN2.0/CANFD帧触发Busofficon-default.png?t=N7T8https://blog.csdn.net/qfmzhu/article/details/107335763?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522171921025716800180631690%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=171921025716800180631690&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-4-107335763-null-null.142%5ev100%5epc_search_result_base4&utm_term=VH6501%20busoff&spm=1018.2226.3001.4187 

 2 Bus-Off的快慢回复及原理

        不知道大家有没有碰到过这样的问题,我明明进行了5次bus-off的快恢复,但是第6次bus-off还是快恢复。如果按照下面文字的描述,那经过5次bus-off快恢复后,下一次应该就是慢恢复呀? 

这里其实是我们对快慢回复的概念有了误解,快慢恢复其实指的是时间,而没有发报文这个步骤。只要经过了这个时间t,不管ECU有没有发报文,其实都已经经过了一次快恢复/慢恢复。

        简单来说:busoff的原理是让计数器累计到255,快慢恢复就是一个时间,没有成功和失败的概念,每次快慢恢复时,控制器会初始化,初始化完成之后如果判断总线恢复了就不再继续增加计数了,如果没有恢复就继续增加到255,50ms和200ms是在计数器恢复到0之后 ECU的判断时间。快恢复就是计数器从255归零之后,等待50ms判断总线是否恢复,如果没有计数器继续累加,持续5次,第六次的等待时间换为200ms

看快慢恢复的方式是筛选RxErr和Rx的报文,然后看RxErr发出一帧Rx报文之间间隔的时间,下图为慢恢复:

需要注意的是此处需要的是连续不断的干扰, 一旦快恢复发出报文之后,计数器就会清零。上文说到的问题其实是因为没有连续的干扰,每次计数器都清零了,因此只有快恢复没有慢恢复。

  • 31
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IAMeee

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值