- 为什么需要网络管理?
网络管理最终要实现的是车上的ECU能够协同睡眠以及唤醒,也就是说网络管理最重要的一点是要保证车上的ECU能够协同唤醒和休眠。那么假如车上的ECU都处于睡眠模式,网络上都没有报文,你咋实现唤醒呢,其实,一般不会让所有的ECU都处于睡眠模式,这个时候可能会有极少的ECU处于工作状态,比如车上的BCM。也就是说有一些ECU是通过KL15直接唤醒的,而有些是通过CAN报文唤醒。当然或许后面会升级到更加节能的模块,可以不需要钥匙信号,这些模块在睡眠状态时,耗能非常少,因此可以一直处于可唤醒状态。
1. 关于CAN网络管理中的几个状态的理解
唤醒请求(Wake Up Request)
唤醒请求可分为两种:
● 主动唤醒请求:来自模块内部对网络的请求。主动唤醒节点的网络管理报文必须先于应用报文发送。
●被动唤醒请求:来自总线上其他模块对该模块的网络请求。被动唤醒的节点,发送网络管理报文和应用报文的先后顺序无特别要求。
以下参考自博文:链接
-
BusSleep睡眠模式:这个状态下是不发送网络管理报文也不收发应用报文,一般该状态时一个低功耗的状态,也就是我们上文提到的协同睡眠状态。当然我们上电初始化时,也会默认进入该状态。(当节点没有主动网络唤醒及被动唤醒请求时,ECU 通信控制器切换至睡眠模式,ECU功耗降低至适当水平。在睡眠模式下,节点的网络管理报文和应用报文禁止发送,并且不能对总线上的报文进行ACK应答。同时节点在该模式下,如果检测到有效的唤醒源,节点必须被唤醒)。
PreSleep预睡眠模式:这个状态是进入休眠状态的前一准备状态,这个状态一般不发送网络管理报文帧了,也不发送应用。 -
PreSleep预睡眠模式:这个状态是进入休眠状态的前一准备状态,这个状态一般不发送网络管理报文帧了,也不发送应用报文了,只是等待其他ECU一起睡眠,为啥要这个状态呢,其实就是实现‘’协同‘’两个字,也就是让等一段时间让车上所有ECU实现一起睡眠,其实这个一起睡眠还是比较重要的,比如车上某个ECU的工作与其他ECU的工作是关联的,比如VCU(整车控制器)和INV(电机控制器),有可能VCU不发报文了,会导致INV报故障,因此这种情况是要避免的。(在预睡眠模式下,总线活动静止下来,最终达到总线上没有活动,ECU通信控制器状态处于工作模式。在该模式下,节点的网络管理报文和应用报文禁止发送,但应该对总线上的报文进行 ACK应答。节点的网络管理状态必须保持预睡眠模式一段时间,一旦超时,网络管理状态应该离开预睡眠模式,进入睡眠模式。
-
Network网络模式:这个状态是允许ECU进行正常通信的,一般这个状态下即可以收发网络管理报文帧也可以收发应用报文(包括诊断报文),意思就是唤醒状态。
Network网络模式下又有三个子状态:分别是:RepeatMsg重复报文状态、NormalOperate常规操作状态、ReadySleep准备睡眠状态。RepeatMsg重复报文状态下又有两个子状态,分别是NM PDU 快速发送状态和NM PDU 正常发送状态。NM PDU 快速发送状态:节点在进入NM PDU快速发送状态时,必须开启或重置NM-Timeout Timer,为了快速唤醒网络,必须以快速周期发送网络管理报文,
同时不得发送正常周期网络管理报文;所有的应用报文必须在第一帧快速NM PDU报文发送开始后延迟一定时间才能发送。在NM PDU快速发送状态下,
节点一旦接收或发送一条网络管理报文,或者NM-Timeout Timer超时,NM-Timeout Timer会立即重置。NM PDU 正常发送状态:进入NM PDU 正常发送状态后,节点必须以正常周期发送网络管理报文。
若节点因被动唤醒请求进入NM PDU正常发送状态,必须开启NM-Timeout Timer,同时所有的应用报文
必须从节点检测到唤醒请求后延迟Tx_Enable_Time 才能发送。在NM PDU正常发送状态下,节点一旦接收
或发送一条网络管理报文,或者 NM Timeout Timer超时,NM Timeout Timer会立即重置。
- RepeatMsg重复报文状态:表示重复发网络管理报文的状态。
- NormalOperate常规操作状态:在进入RepeatMsg一段一时间后,如果需要通信,就会跳到正常工作状态,正常工作状态会按照正常的周期发送网络管理报文以及所有应用报文正常进行通信,可以说这个状态就是真正的唤醒状态。(在常规操作状态下,节点一旦接收或发送一条网络管理报文,或者NM-Timeout Timer超时,NM-Timeout Timer应该立即重置。在该状态下,节点的网络管理报文和应用报文必须正常发送)
- ReadySleep准备睡眠状态:如果唤醒后,需要休眠,那么我们可能需要做一些准备工作才能允许我们的ECU进入休眠,比如这个时候有一些数据要存储、比如电机控制器检测到电机还没停下来等等情况,因此这个状态就是用来做一些休眠前的准备工作,我们可以看到,任何从唤醒到休眠的过程,都需要经过这个状态,也就是说睡眠前有些准备工作是必须要完成的。那么这个状态下,其实还是能够进行通信的,只有进入PreSleep状态,才会把相应的应用报文收发关闭以及发送NM报文关闭。还有一点要声明的是,一般网络管理报文帧的接收不会关闭。(节点进入准备睡眠状态后,必须停止发送网络管理报文,所有的应用报文在NM Timeout Timer超时后必须停止发送。在准备睡眠状态下,节点一旦接收到一条网络管理报文,NM Timeout Timer会立刻重置。NM Timeout Timer超时,节点的网络管理状态应该进入预睡眠模式。)
注意:在睡眠的过程中,一旦NM Timeout Timer超时,节点所有的应用报文必须立刻停止发送唤醒流程的例子说明:在睡眠状态,车上网络状态是没有报文的,一旦车上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后,会让控制器进入休眠。
这是autosar官网提供的状态图
AUTOSAR官网关于网络管理的文档链接:链接
**
网络管理下个报文收发情况:
**
**
主动唤醒和被动唤醒网络管理报文发送情况:
**
**
PN位的网络管理
**
**
autosar中关于网络管理相关的模块
**
**
网络管理中的唤醒方式:
**