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

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

相关推荐
艾莉丝努力练剑11 小时前
【AI大模型接入SDK】LLM会话管理模块设计
网络·c++·人工智能·学习·大模型
萧行之11 小时前
可视化技术复盘:从图形语法看 D3、Vega-Lite、ECharts、Observable Plot
前端·学习·数据可视化
小弥儿20 小时前
GitHub今日热榜 | 2026-09-15:AI 智能体与本地生成工具领跑
学习·开源
老当益壮梁奶奶20 小时前
51单片机DS18B20温度传感器详解:单总线时序与C51驱动实现
笔记·stm32·单片机·嵌入式硬件·51单片机
虹科网络安全20 小时前
Redis 安全公告:CVE-2026-81934 TLS 处理漏洞及修复建议
网络·人工智能·网络安全
susplus20 小时前
【初识ARM】ARM相关基础概念
学习·arm
XiHongShi201620 小时前
键盘大小写指示器(代替键盘灯)
学习·计算机
小叶肥辉20 小时前
LangChain链和LangGraph图的学习笔记【三】——分别用langchain_openai库和langchain_community库调用大模型
笔记·python·langchain
小程序设计21 小时前
某师范学院网络规划与设计
网络·安全
斯维赤1 天前
AI Agent学习之路 | Prompt Engineering(提示词工程)的三板斧核心技巧
人工智能·学习·prompt