CANEOF6的不一致性错 v2 节点发现的错的类型有二种,一种是全局性错,即所有节点同时发现错,一种是本地的局部错,即只有本节点发现错。无论哪种错,都要能使其它节点能获得报错引起的警示,从而大家都丢弃这个帧。CAN协议规定,接收节点查错查到EOF6(EOF的第6位),如果有错就丢弃帧并从EOF7开始报错,如果没错就收下帧;发送节点查错查到EOF7,如果有错就从下一位开始报错并在总线空闲后重发。 CAN发生在EOF6的局部错,它有可能造成接收节点之间数据的不一致性:无错接收节点收下帧,有错节点在下一位开始报错,但它已影响不了无错节点已收下的帧。详见J. Rufino, P.Veríssimo, C. Almeida , L. Rodrigues: „Fault-Tolerant Broadcasts in CAN“, Proc.FTCS-28, Munich, Germany, June 1998. 这时就有二种进一步的演变:如果发送节点能在该消息送达的时限前正确重新传送完该消息,那么原来没有局部错的节点将收到重复的帧,这是不一致的重复;如果发送节点不能在该消息送达的时限前正确传送完该消息,那么原来有局部错的节点将丢失该帧,这是不一致的丢失。 为了有定量的风险评估,引述J. Ferreira做的CAN位出错率的实验,详见(J. Ferreira, A. Oliveira, P. Fonseca, and J. A. Fonseca, “An experimentto assess bit error rate in CAN,” RTN 2004 - 3rd Int.Workshop on Real-Time Networks sattelite held in conjunction with the 16thEuromicro Intl Conference on Real-Time Systems, June 2004.)。其中与本文有关的是发生在EOF6处的错的个数为8,见下图。 为此需要了解在多少时间的实验中发生了8次EOF6错。原文没有提及,需要从其中的其它描述中推断。 其实验方法是发送帧经2个路径到接收节点,1路是经过可能受到干扰CAN电缆,1路是经屏蔽的箱内以最短的电缆,所以认为第2路是未受到干扰的。接收节点是FPGA中以成熟的MoiCAN IP核制作,它可以比较2路收到的位值差别,并定位出错误发生的位置,例如本文感兴趣的EOF6。发送节点每400us发1个8字节的帧,**称“工作于1Mbps位速率”,“相当于总线负载率为25%。”。 每帧接近100位,所以9.79*1010位相当于9.79*108帧,即需要400us*9.79*108≈36*104s=100h。因此可以知道总线负载率为25%时出现EOF6错的概率为8/100=0.08/h。这个数据小于上图中的IMO=2.9*10-1,这是因为该文中的IMO是经过计算得到的,而计算的公式是有错的,没有计入错误发生在帧特定位置的概率。当此类错不能在规定的时限前成功刷新,那就变为一种失效。 规定的时限前不能成功刷新是主要的风险。 有多种可能会导致不能在规定的时限前成功刷新。其中之一,有局部错的消极报错状态(error passive)接收节点将发不出主动报错帧(active error frame),所以他不会引起重发;其中之二,如果该帧的发送节点处于消极报错状态,他会进入消极报错状态时的等效离线(quasi bus off)的故障,不可能退出出错状态,所以无法实施重发。出现EOF6错时会同时引起上述2种无法刷新的情况,但是出现节点处在消极报错状态的概率很难定量。但只要它们的出现概率达到10-5/h(参见“等效离线故障v2”的分析),那么出现EOF6错之后因无法刷新而失效的概率为0.08 *10-5/h= 8*10-7/h@busload=25% >功能安全要求分配给通信的1*10-9/h。 另一种是发生硬件故障。而硬件故障率必须小于功能安全要求分配给通信的1*10-9/h,否则就没有进一步讨论的意义。 当汽车上设备老化,造成电磁干扰变强时,或者ECU的抗干扰性能变差,进入消极报错状态是容易的事。例如ISO7637-2 3a、3b类的干扰,在坏状态的t4=10ms期间会见到周期为t1=100us的尖峰td=0.1us的干扰(即100次干扰),它们足以连续破坏CAN帧的收发,而只要连续16次收发失败便可以使节点进入消极报错状态。 从控制系统来说,信号的分享可以实现前馈,例如刹车信号给节气门来决定开度的提前变化,实现节能并减少刹车距离,给到变速箱来提前决定档位的变化,更有效地改变发动机工作点,减少档位切换冲击。当出现不一致时这三者的动作是不协调的。 CAN的这一安全隐患对现在的车联网应用也是阻碍。例如车车通信的目标之一是通过预告知道相关车的运动意图,从而可以避免撞车或者减少车距提高道路、路口的利用率。而车的运动意图往往与加速、转向、刹车等信号相关,当发往控制器的这些信号与发往车联网的信号出现不一致时,就会误导相关的车辆,造成安全事故。 对于应用而言不一致的重复时,如果传送的是增量数据,就会一部分节点的增量大于另一部分的增量;此外,还有中间插入高优先级消息的传送,造成消息传送次序的倒转的问题。这就造成控制功能上的不一致或不协调,严重情况下,会造成设备的损伤或人员的危险。 不一致的丢失对于应用而言,如果传送的是逻辑值,那么一部分节点会有该逻辑的执行而另一部分节点就不执行。 在应用层避免这些后果是有方法的,是迫不得已的做法,增加了应用层的工作量,并延宕了时间。 现在车联网的一个重要应用方向是车厂收集运行中车的状态,作车改进的依据或实时刷新的依据,如果送往云的数据与系统中的数据不一致,那么这种分析就会导致错误的结论。 因此,如果能改善EOF6的不一致收发情况,就可以改善汽车上设备老化而引起的控制系统失效后果,改善整车功能安全。
|