从项目中学习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帧触发Busoffhttps://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报文之间间隔的时间,下图为慢恢复:

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

相关推荐
黑客Ash5 分钟前
计算机中的网络安全
网络·安全·web安全
PersistJiao13 分钟前
Spark 分布式计算中网络传输和序列化的关系(二)
大数据·网络·spark·序列化·分布式计算
寒笙LED14 分钟前
C++详细笔记(六)string库
开发语言·c++·笔记
码上有前20 分钟前
解析后端框架学习:从单体应用到微服务架构的进阶之路
学习·微服务·架构
岳不谢1 小时前
VPN技术-VPN简介学习笔记
网络·笔记·学习·华为
follycat1 小时前
信息收集--CDN绕过
网络·安全·网络安全
海害嗨1 小时前
阿里巴巴官方「SpringCloudAlibaba全彩学习手册」限时开源!
学习·开源
小A1592 小时前
STM32完全学习——使用SysTick精确延时(阻塞式)
stm32·嵌入式硬件·学习
小A1592 小时前
STM32完全学习——使用标准库点亮LED
stm32·嵌入式硬件·学习
宛唐羁客3 小时前
ODBC连接PostgreSQL数据库后,网卡DOWN后,客户端进程阻塞问题解决方法
网络·数据库