流程梳理:
整车上电后进入Bus_Sleep模式;通过被别人唤醒或主动唤醒后进入Netwake Mode。
进入Netwake Mode首先进入Repeat Message Mode,同时启动Repeat Message Mode Timer以及NM Timer;
若是主动请求进入Netwake Mode以短周期(10ms)发送,数量20帧,发送完成后进入常速模式,直到Repeat Message Timeout 后,进入Nomal Operation Moder。
若是被动请求进入Netwake Mode以常速发送,直到Repeat Message Timeout 后,进入Nomal Operation Moder。
在Nomal Operation下,停止发送网络管理帧,进入Ready Sleep State;
在Ready Sleep State下,所有节点均停止发送发送网络管理帧,并等待NM_Timeout进入Prepare Bus_ Sleep State;
在Prepare Bus_ Sleep State下,什么也不干,等待特定时间(0.75s)后,进入Bus_Sleep模式。
总结:
CanNm:主要是协调Can网络的正常操作模式和Bus_Sleep模式之间的转换。除了上述功能外,还提供检测目前在线节点以及检测其他节点是否要进入Sleep转态的功能。是CanIf模块与NM模块之间的适应层;用CanIf的服务,并服务于NM。
网络管理的中心思想:
任何一个节点想保持Bus为通讯状态的话,就一直周期性的发网络管理管理帧,如果想进行休眠状态,则停止发送网络管理帧。当所有的节点都不发送网络管理帧后CANNM_TIMEOUT_TIME + CANNM_WAIT_BUS_SLEEP_TIME时间,则Bus进入休眠状态。