CAN Busoff原理/快慢恢复介绍以及利用Vector VH6501 CAN干扰仪经典CAN2.0/CANFD帧触发Busoff

 

目录

一、什么是CAN Busoff和快慢恢复的介绍

二、利用VH6501 CAN Disturbance Interface触发经典CAN2.0帧 Busoff

三、利用VH6501 CAN Disturbance Interface触发CANFD帧 Busoff

四、结尾


CANFD/经典CAN2.0/CANXL相关知识点链接:

《CANFD/经典CAN/CANXL》专栏icon-default.png?t=M276https://blog.youkuaiyun.com/qfmzhu/category_9753585.html

一、什么是CAN Busoff和快慢恢复的介绍

在《ISO 11898-Part 1-Data link layer and physical signalling-2015.12.15》中有对CAN Busoff进行描述,如下图:

如果节点的传输错误计数器(TEC:transmit error counter)大于255(8位发送错误计数器时的进位条件),那么管理者应请求物理层将节点设置为Busoff状态。

处于Busoff状态的节点对总线没有影响。 它不应发送任何帧,也不应确认数据帧或远程帧。这样的节点是否接受来自总线的数据帧取决于实现。

在重新启动请求后,处于Busoff状态的节点应集成到CAN通信中(请参见10.9.4),并且在监视总线上128个空闲情况的发生后,其错误计数器都将置为零,变为错误节点(请参见图28)。

通俗地说:

ECU一直在往CAN总线上发送CAN报文,但不知道什么原因一直发送不出去,如果这个发送错误计数累计到255( ECU发送失败:发送错误计数 + 8 ECU发送成功:发送错误计数 - 1),ECU进入Busoff模式。ECU在Busoff期间不妨碍总线上的其它节点。

一些主机厂对其系统供应商的设备提出了相应的Busoff后恢复时间需求。例如:当ECU 进入Busoff 模式后,首先,ECU 执行快恢复模式,连续n次(TBD值,不同厂商次数要求不一样)快速恢复后,ECU 进入慢恢复模式

注:所谓的快慢恢复,即进入CAN BUSOFF状态后,ECU重新初始化CAN模块,并等待t(tBusOffQuick 或 tBusOffSlow)后,重新使能总线报文的发送。如果报文发送成功,则CAN BUSOFF恢复成功。

当ECU进入Busoff状态后,因为接收不到其它ECU(相关ECU:至少从该节点接收一条报文)的报文,会产生超时错误,故此时应只存储bus-off故障,不应存储其他ECU的报文超时故障。在ECU从Busoff状态恢复后,立即重新启动报文超时监测功能。

二、利用VH6501 CAN Disturbance Interface触发经典CAN2.0帧 Busoff

BusOff所需的测试环境:

  1. 硬件工具VH6501 CAN Disturbance Interface(CAN干扰仪);
  2. 上位机软件CANoe 11.0.55 SP2

本次VH6501 CAN Disturbance Interface(CAN干扰仪)的操作手册以CANoe 11.0.55 SP2中的Demo为例,进行的busoff测试,具体操作步骤如下:

步骤一:打开“Disturbance(CAN)”的DEMO,如下图所示:

步骤二:通道配置。VH6501需要与真实ECU连接,并且ECU所在CAN网络中需要有终端电阻:

步骤三确认连接的通道信息,然后点击Start开始运行,此时trace窗口是正确的报文。

步骤四通过Panel打开MainConfigPanel面板。

步骤五:点击MainConfigPanel面板中的Trigger Configuration打开对应如下的配置面板TriggerConfigurationPanel,选择触发位置AckSlot,并且针对特定帧(以Trace中的CAN ID:0x305为例)触发Busoff。

修改前:

修改后:

CurrentTriggerField填AckSlot;TriggerOffset填0;IDBase填CAN2.0标准帧ID的11位二进制(如果不满11个二进制数,高位补0,凑齐11个二进制数,例如这里的0x305,其二进制等于01100000101)。

步骤六:点击MainConfigPanel面板中的Sequence Configuration打开对应如下的配置面板SequencePanel,配置显性/隐性干扰。

 

修改前:

修改后:

在面板SequencePanel中,Segment value选择Dominant,勾选Arbitration Bit Timing Information,单击Add Segment

步骤七:回到MainConfigPanel面板,CANoe软件运行时,配置面板中干扰的次数和循环次数。

修改前:

修改后:

如果进行多次Bus off测试,Cycles填写多个cycle,Repetiions中填写干扰次数为固定的32次(干扰一次,也就是干扰一个cycle,ECU的TEC累加8,在连续32次干扰之后,TEC的值为256,ECU便会进入bus off。)

注意:

Repetiions一般默认设置为32;

Cycles表示Busoff的次数,对应Autosar的CANSM模块中的CanSMBorCounterL1ToL2,根据实际的项目需求选定,Cycles中设定的值小于CanSMBorCounterL1ToL2,触发对应节点的通信快恢复;而Cycles中设定的值大于等于CanSMBorCounterL1ToL2,触发对应节点的通信慢恢复。在CANSM模块中也定义了快恢复时间CanSMBorTimeL1慢恢复时间CanSMBorTimeL2时间参数,这三个参数根据实际的项目需求选定。

步骤八:点击面板中的Enable On Device,启动Busoff测试。

如果ECU设置的快慢恢复比较长,CAN干扰仪干扰后,在Trace窗口中,你会看到对应的Busoff ECU所有发送的报文变灰色,说明停止了发送报文。

三、利用VH6501 CAN Disturbance Interface触发CANFD帧 Busoff

第二章节中,提到通过干扰经典CAN2.0标准帧报文Ack Slot位来实现Bus off测试。

而在CAN FD中,如果干扰Ack Slot位,干扰的结果是两个连续的显性位,但在CAN FD中,两个显性位会被认为是有效的Ack,这就导致上述方法干扰不到Ack Slot位。

在这种情况下,建议干扰Ack delimiter位。CurrentTriggerField填Ack delimiter,TriggerOffset填0。如下图是干扰一个CANFD标准帧ID:0x305,其它部分的设置与第二章节相同。

 

四、结尾

获取更多“汽车电子资讯”和“工具链使用”,

请关注“汽车电子助手”(优快云微信公众号同名),做您的好助手。

### 3.1 测试设备与环境准备 VH6501 是一款用于 CAN/CAN FD 总线干扰测试的设备,支持与 CANoe 集成并通过 CAPL 脚本进行控制。在进行 Busoff 测试前,需要准备以下设备和软件环境: - **硬件设备**:Vector VH6501 干扰、被测 ECU、CAN 总线连接线缆。 - **软件环境**:CANoe(建议使用 13.0 或更高版本)、CAPL 脚本编辑器、测试工程文件(如 CANDisturbanceMain Demo 工程)。 - **网络配置**:将 VH6501CANoe 主机通过 USB 连接,并将 VH6501 与被测 ECU 的 CAN 总线连接[^4]。 ### 3.2 Busoff 测试原理 CAN 总线上的节点在检测到总线错误计数超过 255 时会进入 Busoff 状态,停止对总线的访问。Busoff 测试的目的是验证被测节点在进入 Busoff 后能否按照预期恢复通信,包括快恢复和慢恢复机制。例如,某些控制器在 Busoff 后会尝试几次快速恢复,失败后进入慢恢复模式[^5]。 ### 3.3 测试方法与步骤 #### 3.3.1 使用 CANDisturbanceMain Demo 工程 CANoe 提供了 CANDisturbanceMain Demo 工程,用于快速搭建 Busoff 测试环境。具体步骤如下: 1. 打开 CANoe,加载 CANDisturbanceMain 工程。 2. 在 "Simulation Setup" 中配置 VH6501 与被测节点的连接关系。 3. 在 "Disturbance" 页面中选择 "Busoff" 干扰类型。 4. 设置干扰参数,例如干扰持续时间、触发方式等。 5. 启动仿真,观察被测节点的 Busoff 行为及恢复过程。 #### 3.3.2 使用 CAPL 脚本控制干扰 通过 CAPL 脚本可以实现更灵活的 Busoff 测试控制。以下是一个简单的 CAPL 脚本示例,用于触发 Busoff 并记录恢复时间: ```capl variables { dword busOffStartTime; dword busOffEndTime; } on key 'b' { // 触发 Busoff 干扰 disturbBus(bus0, 1000); // 持续 1 秒 busOffStartTime = sysTime(); write("Busoff triggered at %d ms", busOffStartTime); } on message can0 { // 检测总线恢复 if (this.id == 0x100 && this.dir == rx) // 假设被测节点恢复后发送 0x100 报文 { busOffEndTime = sysTime(); write("Busoff recovery detected at %d ms", busOffEndTime); write("Recovery time: %d ms", busOffEndTime - busOffStartTime); } } ``` ### 3.4 测试结果分析与评估 - **Busoff 触发情况**:确认被测节点是否在干扰下成功进入 Busoff 状态。 - **恢复时间测量**:记录从 Busoff恢复通信的时间,评估是否符合主机厂要求。 - **恢复机制验证**:检查是否按照快恢复/慢恢复策略执行,例如快恢复尝试次数是否符合预期[^5]。 ### 3.5 注意事项与常见问题 - **干扰参数设置**:干扰时间过短可能无法触发 Busoff,建议设置为 1s 左右。 - **恢复时间监控**:需通过 CAPL 脚本或 CAN 分析工具精确记录恢复时间。 - **总线负载影响**:高负载总线可能影响 Busoff 触发恢复行为,建议在不同负载条件下测试。 - **干扰连接**:确保 VH6501 与被测节点之间的 CAN 线连接正确,避免短路或接触不良。
评论 26
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

汽车电子助手

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

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

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

打赏作者

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

抵扣说明:

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

余额充值