一、背景:
在AUTOSAR CAN网络管理框架下,如果所有的节点都按照状态机要求,在ReadSleep状态下停发NM帧,在Prepare Bus-Sleep模式下停发App帧,所有节点可以从Prepare Bus-Sleep模式开始同步进入Bus-Sleep模式。如下图所示
二、意外情况:
如果某个节点由于软件Bug进入Prepare Bus-Sleep模式后并没有停发应用帧,或者网络上有其它干扰报文。那么在经过时间T-Wait Bus Sleep后所有控制器一起休眠,过一会儿对于只支持任意帧唤醒SBC芯片的ECU又会被这个干扰App帧唤醒控制器。然后ECU检测到该帧并非唤醒帧,持续一段时间后重新走休眠流程,然后又会被唤醒。如此ECU反复的休眠->唤醒->休眠->唤醒....这是不正常的现象。严重时可能导致ECU SBC芯片异常再也不能被唤醒。导致驾驶员重新点火后该ECU不工作,使车辆不能开动。
另外,该ECU反复的休眠->唤醒->休眠->唤醒....时间太长可能会引起蓄电池匮电,甚至将耗尽电能。
三、解决方案:
在Prepare Bus-Sleep模式,只要收到任意非网络管理帧,就复位T-Wait Bus Sleep计时器。直到网络上没有任何报文,计时T-Wait Bus Sleep再休眠。如果网络上持续存在异常报文,且任意帧间隔小于T-Wait Bus Sleep,则ECU就一直处于Prepare Bus-Sleep模式永不休眠,直至被测试人员发现或电池耗尽。但可以避免ECU反复的休眠->唤醒->休眠->唤醒....导致ECU SBC芯片异常。
即,对AUTOSAR CAN网络管理状态机增加如下黄色处理。
从CPU视角看程序里的状态机如下,
四、小结:
1. 对于只支持任意帧唤醒SBC芯片的ECU,通过这个方法在测试阶段可以防止ECU反复休眠->唤醒->休眠->唤醒....导致ECU SBC芯片异常。
2. 在Prepare Sleep有ECU依然发出非网络管理帧属于软件Bug,在量产车上必须要解决掉,否则休眠时间过长会导致电池严重匮电。