llxxyy0 2020-01-07
车载网络总线管理的目的是使网络中的ECU节点有序地睡眠和唤醒,在没有通信需求的时候睡眠,可以节约电池的能量。
CAN总线上的网络管理,是一种无中心式的网络管理,网络中的每个节点都依赖于自己和别人的网络管理报文(NM PDU)来实现通信的睡眠和唤醒,这个NM PDU是周期性发送的,对于每个ECU来说,收到别的ECU发送的NM PDU则意味着当前的网络有通信需求,自己发出NM PDU则是告知别的ECU自己有通信需求。如果某个ECU打算进入Bus-Sleep-Mode,它就会通止发送NM PDU,在进入Bus-Sleep-Mode之前会有一段延时,如果在这段延时中没有收到任何NM PDU,则它就会转入Bus-Sleep-Mode状态了。
AUTOSAR中定义的网络管理PDU
上图定义了NM PDU的格式,byte 0标识ECU的节点地址,byte 1是控制信息。
CAN NM为ECU的网络管理定义了三种模式(Mode):
最后的Network Mode又分为三个状态(state),
CAN总线上的网络管理的核心,就是ECU在这3种模式和3个状态之间的转换的状态机。
基于CAN的网络管理中ECU的NM状态机
跟着状态机走一遍,就会对这个过程有比较直观的了解了。
ECU最初处于Bus-Sleep Mode中,当它有了通信需求(比如接收其他ECU的NM报文,或者它的逻辑功能要求自己唤醒,比如车门控制器收到了遥控钥匙的信号),它就会进入Network Mode,Repeat Message状态是Network Mode的入口状态,到达这个状态之后,ECU会启动一个Repeat Message Timer,在这个Timer定义的时间内,ECU会一直处于Repeat Message状态。当这个timer结束后,如果有通信需求,ECU则进入Normal Operation状态,如果没有通信需求,则进入Ready Sleep 状态。Normal Operation状态就是ECU正常运行的状态,此时它的应用报文和NM报文都会正常收发。当ECU没有通信需求,它会瞬间进入Ready Sleep状态,在Ready Sleep中,如果又出现了通信需求,ECU则瞬间再回复到Normal Operation,如果在一个Timeout Timer中一直没有通信需求,ECU就进入Prepare Bus-Sleep Mode,在Prepare Bus-Sleep状态中,也会启动一个Timeout Timer,如果在这段时间内有了通信需求,ECU又会立即回到Repeat Message状态,如果过了这个timer还没有通信需求,则ECU会回到Bus-Sleep Mode中。
综上所述,ECU网络管理的实现的核心就是实现这个状态机,在AUTOSAR中,这些状态之间的跳变就是由AUTOSAR定义的各种接口函数实现的。但是真实使用的时候不是这么简单,还有很多机制,暂不深究。