×
嵌入式 > 嵌入式开发 > 详情

CAN协议的错帧漏检率推导及改进过程简介

发布时间:2020-07-09 发布时间:
|

当数据在传送中出错,且错帧被漏检时,就意味着错误的数据被送到应用层,除非应用层有额外的数据识别措施,这个数据就可能引起不可预测的结果。CAN协议声称有很低的错帧漏检率(4.7×10-11×出错率),有的宣传材料在一定条件下推出要1000年才有1次漏检,这是不正确的。错帧漏检率是一个十分重要的指标,很多应用就是看到Bosch CAN2.0规范上的说明才选用CAN的。但是对这个指标的来源仅有极少的公开资料,以及很少的讨论,使用户很难对它确认或验证,这给用户带来风险。本文采用了重构出错漏检实例的方法,导出了CAN的漏检错帧概率下限,它比CAN声称的要大几个数量级。在许多应用中,CAN已是可靠性和价格平衡下的不二选择,或者已被长期生产和使用,面对这个新发现的问题,在CAN本身未作改进之前,迫切需要一种“补丁”来加以改善。由于篇幅有限,所以只能摘要介绍错帧漏检率的推导过程,重点在提供解决方案。

1 关于CAN漏检错帧概率文献的讨论

Bosch CAN2.0规范说它的漏检错帧概率小于错帧率(message error rate)×4.7×10-11。它的来源见参考文献,其中没有提供产生漏检的分析算法,仅提到用大量仿真得到了公式。要判断一个帧出错后是否会漏检,至少要计算2次CRC,对每一bit仅就汇编语言也需要几条指令,以该文考虑的80~90 bit的帧,CRC覆盖58~66 bit就要循环58~66次,以1989年时常用的PDP11或VAX机,一条机器指令要0.1 μs左右,一帧的判断要0.07 ms,即使不停机做一年,能作2.20×1011帧,考虑58 bit可构成258=2.88×1017种不同的帧,再加有58×57种不同的加入2位bit错的位置组合,所以能作的仿真只是可能情况的微乎其微的一部分(百万分之一)。由于样本太小,归纳的公式也就很难把影响因素考虑完整。

1999年Tran对错帧漏检率也作了研究,鉴于分析困难,他也采用计算机大量仿真的办法,针对11位ID 、8字节数据帧,他用的是600 MB的Alpha服务器。与上述讨论一样,虽然仿真量很大,仍然是可能情况的极小部分。

CAN有关的另一个标准CANopen Draft Standard 304 (2005)给出的错帧漏检率是(7.2×10-9)。同样来自CAN自动化协会的不同数据,使人无可适从。

2 新错帧漏检率的导出

本文的研究方法是构造出漏检的实例,确定该种实例占可能的帧的概率,乘以与该实例相应的出多位错的概率,然后求出所有可能的实例,得到CAN的错帧漏检率。本文对最有可能造成漏检的二位错情况进行分析,然后扩大为有多位错。数据域取8字节,并假定错都发生在数据域内。它并没有将超过CRC校验能力时的分散的多bit错漏检率考虑进去,所以得到的是漏检错帧概率的下界。

2.1 CAN位填充中有错时的位序错开

在有可能产生填充的位流中有bit错时,就有可能造成发送方与接收方只有一方执行填充规则,造成填充位与信息位理解的错乱。图1(a)的第3位传送中出错,结果发送方的填充位1被接收方误读为数据1,整个接收数据比发送数据长了1位。图1(b)的第3位传送中的错使接收方产生了删除填充位的条件,因此它把发送的数据1删去,接收数据流短了1位。

图1 CAN的位填充规则使出错后接收位流变化

从位流变化可以知道,如果发生的2个bit错正好一次是图1(a)的类型,一次是图1(b)的类型,那么发送数据流和接收数据流的长度将仍然相等,如果2个错都发生在数据域,CAN的其他检验是发现不了它们的。

2.2 发生漏检的条件

发送的位流与接收的位流可写为多项式形式Tx(x)和Rx(x),CRC检验就是用CAN的生成多项式G(x)除这2个式子,得到的余数称为CRC值,如果2个余数相同,CRC检验通过。当发生传送错误,Rx (x)= Tx(x)+U(x)×G(x)时,对Tx(x)和Rx(x)求到的余数是相同的,这时就发生了错帧的漏检。因此只要找到U(x),就可以构造出漏检的实例。

2.3 由Ec(x)尾部确定漏错多项式U(x)

为了使读者了解推导过程的合理性,以下是举例。在前面已经发生过图1(b)的错后,Tx的i位被Rx收到为第i-1位。尾部发生的错对应图1(a)的情况如图2所示。图中Tx的这6位构成漏检实例的尾部,第1位1用于隔离前面位值的影响,使后面5位0后一定产生填充位。由于传送中有错,Rx不再有连续5位 0。Tx的填充位被Rx视为数据位,Rx和Tx就对齐,在此以后的传送不再有位序错。由bit错发生位置的不同,Rx也不同,错误序列Ec也不同。这个 Ec也是整个错误序列的尾部,用Ec,t表示。由图2可以看到,共有5种不同的错误序列尾部。显然,将Tx中的0/1取反并不改变错误序列尾部Ec,t的形式。



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
单片机系统的EMC测试