网络管理(NM)最终要实现的是车上的ECU能够协同睡眠以及唤醒,也就是说网络管理最重要的一点是要保证车上的ECU能够协同唤醒和休眠。
那么假如车上的ECU都处于睡眠模式,网络上都没有报文,你咋实现唤醒呢,其实,一般不会让所有的ECU都处于睡眠模式,这个时候可能会有极少的ECU处于工作状态,比如车上的BCM。
也就是说有一些ECU是通过KL15直接唤醒的,而有些是通过CAN报文唤醒。
当然或许后面会升级到更加节能的模块,可以不需要钥匙信号,这些模块在睡眠状态时,耗能非常少,因此可以一直处于可唤醒状态。
为了满足这种协同唤醒和睡眠,我们下面来看看Autosar中的NM是如何实现协同的。
状态机中有三个主状态:
-
BusSleep
-
PreSleep
-
Network
-
RepeatMsg
-
NormalOperate
-
ReadySleep
-
BusSpleep状态
:这个状态就是我们所说的休眠状态,这个状态下是不发送网络管理报文也不收发应用报文,一般该状态时一个低功耗的状态,也就是我们上文提到的协同睡眠状态。当然我们上电初始化时,也会默认进入该状态。
PreSleep状态:
这个状态是进入休眠状态的前一准备状态,这个状态一般不发送网络管理报文帧了,也不发送应用报文了,只是等待其他ECU一起睡眠,为啥要这个状态呢,其实就是实现‘’协同‘’两个字,也就是让等一段时间让车上所有ECU实现一起睡眠,其实这个一起睡眠还是比较重要的,比如车上某个ECU的工作与其他ECU的工作是关联的,比如VCU(整车控制器)和INV(电机控制器),有可能VCU不发报文了,会导致INV报故障,因此这种情况是要避免的。
Network状态:
这个状态是允许ECU进行正常通信的,一般这个状态下即可以收发网络管理报文帧也可以收发应用报文(包括诊断报文),意思就是唤醒状态。接下来我来解释一下这个状态下里面的三个子状态的含义:
Repeat meassage:
表示重复发网络管理报文的状态。首先说说这个状态下会发生什么事,一般我们进入网络(Network)状态时,首先会进入这个状态,这个状态下会快速的发送一些网络管理报文帧出来,为啥要快速发送一些网络管理报文呢?其实就是想尽快的告诉车上的其他ECU,我上线了!我要正常通信了,大家请注意啊,大家也和我一块进行整车通信啊。就是以上这个意思。
Normal Operation:
在进入RepeatMsg一段一时间后,如果需要通信,就会跳到正常工作状态,正常工作状态会按照正常的周期发送网络管理报文,以及所有应用报文正常进行通信,可以说这个状态就是真正的唤醒状态。
ReadySleep:
如果唤醒后,需要休眠,那么我们可能需要做一些准备工作才能允许我们的ECU进入休眠,比如这个时候有一些数据要存储、比如电机控制器检测到电机还没停下来等等情况,因此这个状态就是用来做一些休眠前的准备工作,我们可以看到,任何从唤醒到休眠的过程,都需要经过这个状态,也就是说睡眠前有些准备工作是必须要完成的。那么这个状态下,其实还是能够进行通信的,只有进入PreSleep状态,才会把相应的应用报文收发关闭,以及发送NM报文关闭。还有一点要声明的是,一般网络管理报文帧的接收不会关闭。
下面我以NM报文唤醒为例,大概说一下唤醒的过程:
在睡眠状态,车上网络状态是没有报文的,一旦车上BCM检测到要使用网络时,就是第一时间发出网络管理报文出来,这个时候我们的ECU也会收到该网络管理报文,因此会唤醒我们的ECU,首先我们的ECU的收发器收到NM报文后,告诉芯片要唤醒了,这个时候就会给控制器供电,然后程序就会初始化,进入BusSleep状态,接着会进入RepeatMsg模式,这个时候会迅速发出第一帧NM报文,会快速发出5帧NM报文(如周期10ms),让其他节点知道我们的ECU醒来了,然后会切换到正常周期的NM报文,如50ms,当然这个时候,系统也在初始化,应用报文也会到一定周期能够正常收发。
处于RepeatMsg状态一定时间后,会切换到NormalOpr模式,这个时候就会正常通信了。
这个模式下NM报文是以一定周期发送的如500ms,告诉所有节点我在正常通信。
其实NM报文里面是有一些信息的,比如唤醒原因,用户数据等等,这些都可以去定义。
下面讲一下NM休眠的过程:
处于NormalOpr状态下,如果ECU不需要网络了,比如KL15断开,ECU这个时候就会选择释放网络,释放网络就是从Normal状态切换到ReadySleep状态,这个时候会进行一些故障存储、下电前的装备工作,完成后,等待一定时间就会进入到PreSleep状态,这个状态将会把应用报文和TX网络管理报文也关闭,等待一定时间就会进入BusSleep状态,进入BusSleep后,会让控制器进入休眠。