CAN错误帧分析

背景: 在最近的项目中遇到了客户反馈错误帧的问题。我们的节点在自己测试的时候没有发现有错误帧,CAN时间参数和采样点都是按照客户需求进行配置的。根据以往的项目经验正常是不会有问题的。 怀疑过整车的线束过长导致CAN点平不稳定,于是增加了CANFD的第二采样点SSP。但是并没有解决客户的问题。 然后又怀疑是因为终端电阻的问题导致的,整车的终端电阻应该是两个相距最远(拓扑上最远)的ECU分别接有120欧电阻。并联在总线上,总线的电阻就是60欧。 

        然后去车上测试验证,用万用表测量,需要断开整车电源才可以测量,一开始测试的同事没断电就用万用表去量CANH和CANL两条线了。我甚至都怀疑我的物理是不是学错误了,然后量出了一个匪夷所思的数据。 不过最后也断电进行测量了,发现总线上并没有终端电阻。于是在加上终端电阻后这个问题的已解决。

但是,没过多久新的错误帧又出现了,这次的车已经确认过终端电阻是正确的。然后让客户提供log进行分析:

这次只有IBC和其他供应商的ESP节点,客户经过验证发现是这两个节点同时存在的时候才会有错误帧。 并且错误帧的ID是我们的IBC节点,于是乎问题就丢到我这边来了。

之前因为对错误帧的理解不够深,认为错误帧的ID是谁,就应该是这个节点出了问题导致的。其实错误帧的产生是分两种的,一种是主动错误,另外一种是被动错误。

从上面的log可以看出,错误帧ID是0xB1 这个报文是IBC 也就是我们的节点发出的一帧CANFD报文,10ms周期。错误类型是stuff error。

 什么是stuff error? CAN的填充机制是每检测到5个连续相同的位时,即填充一个相反的位,以提供足够的跳变沿来进行同步,当在总线上有报文时,检测到连续的6个相同的位时,即认为是填充错误。

那么你是不是也认为是我们IBC发送的ID 0xB0填充位有问题? 刚开始我也是这样认为的,觉得可能是IBC的第二采样点SSP 没有设置好,并且车上的线束较长 导致电压不稳定,所以导致的错误帧。

        但是忽略了一个最重要的问题,就是对象是谁?你有对象吗?对象是谁?过年带回家吗?

这里的对象是只检测到错误帧的角色是谁?上面只有IBC和EPS两个节点,对象是不是就是其中一个?错! 之所以能够看到这些log 是因为接了CANOE,CANOE也是一个节点,只不过现在只接收不发送。 

        然后在回过头来看,stuff error 它一定是发送节点造成的吗?答案是:不一定, stuff error 如何被检测到? 

第一: 对于EPS和CANOE来说是接收方,那么就会一直监测总线看有没有6个连续的点平出现,一旦6个连续的点平被检测到,那么EPS或者是CANOE就会发出错误标记

发出错误标记:6个连续的显性位,这个时候总线就会被拉低6个点平。与此同时发送方IBC在继续发下一个bit的时候就会被这6个错误标记拉低。 发送方有回读机制,就是会检测自己发出去的点平是否正确,此时发出的是1,回读的是0 就认为是错误(bit error)了。因为回读机制错误都是报bit error IBC就会记录错误并且进行重发数据。

        

        很有意思的一个事情,此时总线肯定是错误了,但是 发送方IBC检测到的是bit error,接收方EPS 和CANOE检测到的是stuff error。那么就要找到是谁主动发出错误帧,就知道问题所在了。

分析了那么多,最后还是用最原始的方法,控制变量法。IBC  CANOE 相连,CANOE模拟发送EPS的报文,此时没有错误帧。但是EPS和CANOE相连 ,CANOE模拟发送IBC的报文,出现了bit error。

问题基本确认,EPS 有问题!!!   最终通过更改CANOE采样点发现EPS的数据域采样点是65%, 而客户要求的是75%,IBC和CANOE设置的都是正确的。

最终确定问题所在,EPS采样点设置错误。

总结: 错误帧要分清楚对象,同一个问题引起的错误帧,发送方和接收方看到的是不一样的。

"stuff error"是一个常见的错误信息,它表明在处理或执行某个任务时出现了错误。具体来说,它可能指的是软件程序中的bug、操作系统的问题、数据输入的错误或网络连接的失败等。这个错误信息并不提供足够的信息,需要进一步的调试和排查才能确定问题所在。 要解决"stuff error",我们可以采取一些常见的步骤。首先,我们可以尝试重新启动程序或设备。这可能会清除临时问题或内存中的错误,使系统回到正常状态。如果问题仍然存在,我们可以检查数据输入和设置。确保输入的数据格式正确,检查所使用的选项和配置是否正确。此外,我们可以尝试使用备份或替代数据源来验证是否是数据本身造成了问题。 如果上述步骤都没有解决问题,我们可以进一步检查日志文件或错误报告。这些文件通常会提供更详细的错误信息,帮助我们定位问题所在。我们还可以搜索相关的技术支持论坛或官方文档,看看是否有其他用户遇到了类似的问题,并且有解决方案可供参考。 如果以上方法仍然无法解决问题,我们可以考虑寻求专业人士的帮助。他们可能具有更深入的技术知识和经验,能够更有效地诊断和解决问题。与技术支持团队取得联系,提交错误报告或申请Bug修复也是有效的解决方法。 总之,"stuff error"是一个比较模糊的错误信息,要解决这个问题需要进行具体的调试和排查。通过尝试一些常见的解决步骤,我们有望找到问题的根源并找到解决方案。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值