文章目录
- 网络管理目的
- 主动唤醒和被动唤醒
- 状态管理
- 1. 总线睡眠模式(Bus-Sleep Mode)
- 2. 准备总线睡眠模式(Prepare Bus-Sleep Mode)
- 3. 网络模式(Network Mode)
- 3.1 重复报文状态(RepeatMessageState)
- 3.2 常规运行状态(NormalOperationState)
- 3.3 准备睡眠状态(ReadySleepState)
- 网络管理定时参数
- 状态切换整体框图
- 网络管理报文(NM PDU)
- 源节点地址(SourceNodeIdentifier)
- 控制比特向量(ControlBitVector)
- 用户数据(Userdata)
- 常用缩写
网络管理目的
网络管理的目的是使车辆网络中的 ECU 节点有序的睡眠和唤醒。 在没有通信需求的时候睡眠,在需要通信的时候唤醒, 可以节约汽车电池的电量。
CAN Network Management(CanNm)是一种独立于硬件的协议实现的软件模块, 只能在 CAN 网络上使用, 主要功能是协调网络正常运行和总线睡眠模式之间的转换。 CanNm 提供了网络管理接口(NmIf) 和CAN 接口(CanIf) 模块间的适配。
主动唤醒和被动唤醒
网络管理唤醒分为主动唤醒和被动唤醒。(BMS的休眠唤醒包括CAN唤醒,CAN唤醒又叫网络管理唤醒)
主动唤醒和被动唤醒的区分: 简单来说,除了收到其他节点发送的网络唤醒报文是被动唤醒外,其他都是主动唤醒(如:KL15、菊花链、RTC定时唤醒等)。
主动唤醒请求: 来自模块内部对网络的请求,并通过发送NM PDU尝试唤醒其他ECU。主动唤醒又叫做本地唤醒,和硬线相关的唤醒方式一般称为本地唤醒源。如:KL15硬线,硬线传感器信号(如:脚踢门、后备箱打开)主动唤醒节点(BMS即是一个节点)的网络管理报文必须先于应用报文发送。
被动唤醒请求: 来自总线上其他节点对该节点(例:BMS)的网络请求。被动唤醒的节点,发送的网络管理 PDU 和应用报文没有顺序要求。被动唤醒又叫做远程唤醒,简单来时就是和总线信号相关的唤醒方式。比如收到网络管理报文或者指定诊断报文,或者包含KL15信号的应用报文(有些节点没有KL15硬线,而是网关转发包含KL15信号的应用报文唤醒)。
状态管理
AUTOSAR CanNm 包含三种模式,其中 Network Mode包括三种子状态:
- 网络模式(Network Mode)
- 重复报文状态(Repeat Message State)
- 常规运行状态(Normal Operation State)
- 准备睡眠状态(Ready Sleep State)
- 准备总线睡眠模式(Prepare Bus-Sleep Mode)
- 总线睡眠模式(Bus-Sleep Mode)
1. 总线睡眠模式(Bus-Sleep Mode)
总线睡眠模式(BusSleepMode)的作用,是当网络上没有通信需求的时候,减少节点对蓄电池电量的消耗。 节点进入总线睡眠模式(BusSleepMode)后,对蓄电池电量的消耗下降到适当的程度。节点保留唤醒机制,等待被唤醒。
原则上,处于总线睡眠模式(BusSleepMode)的节点不接收应用报文并且不应给出ACK应答。如果此时节点数据链路层被唤醒且给出了ACK应答,需要在最短时间内重新进入低功耗模式。
2. 准备总线睡眠模式(Prepare Bus-Sleep Mode)
准备总线睡眠模式(PrepareBusSleepMode)的作用,是保证在进入总线睡眠前,节点有足够的时间停止其网络活动。在准备总线睡眠模式(PrepareBusSleepMode)下,总线活动减少(如:存在于发送缓存中的报文被发送,以清空发送缓存),最终总线将不再有活动(即没有任何报文被发送)。
节点进入准备总线睡眠模式(PrepareBusSleepMode)后,将立即开启T_WAIT_BUS_SLEEP定时器。在该定时器溢出后,该节点将离开准备总线睡眠模式(PrepareBusSleepMode),进入总线睡眠模式(BusSleepMode)。
当处于准备总线睡眠模式(BusSleepMode) 的节点接收到网络管理报文时 , 将向网络模式(NetworkMode)转换;默认情况下,节点进入网络模式(NetworkMode)中的重复报文状态(RepeatMessageState)。
3. 网络模式(Network Mode)
当节点从总线睡眠模式(BusSleepMode)或准备总线睡眠模式(PrepareBusSleepMode)进入网络模式(NetworkMode)时,在默认情况下,需进入重复报文状态(RepeatMessageState)。
节点进入网络模式(NetworkMode)后,需开启T_NM_TIMEOUT定时器;
节点处于网络模式 (NetworkMode),成功接收或成功发送一帧网络管理报文(NM PDU)后,需重启T_NM_TIMEOUT定时器;
3.1 重复报文状态(RepeatMessageState)
无论其睡眠条件是否满足,重复报文状态(RepeatMessageState)都可以使节点保持一段时间的活跃状态。该状态可以被用来监测在线节点,并且告诉其它节点我上线了,可以正常通信了。
当节点进入重复报文状态(RepeatMessageState)后,需要开始(或重新开始)发送网络管理报文。
节点处于重复报文状态(RepeatMessageState),T_NM_TIMEOUT定时器超时溢出时,需要重启T_NM_TIMEOUT定时器。
节点接收到本地唤醒源后,进入快发重复报文状态(InnmediateTransmitState);
节点接收到被动唤醒源后,进入正常重复报文状态(NormalTransmitState)。
节点在进入重复报文状态 (RepeatMessageState)后,需要保持一段时间 ,这段时间由参数T_REPEAT_MESSAGE 决定;T_REPEAT_MESSAGE 超时后,节点状态需进入常规运行状态(NormalOperationState)或准备睡眠状态(ReadySleepState)。 T_REPEAT_MESSAGE需保证网络上其它的节点都可以被网络管理报文唤醒。
节点离开重复报文状态(RepeatMessageState)后,若对网络通信有需求,应进入常规运行状态(NormalOperationState)。
节点离开重复报文状态(RepeatMessageState)后,若对网络通信无需求,应进入准备睡眠状态(ReadySleepState)。
节点离开重复报文状态(RepeatMessageState)后,需将重复报文请求标志位(RepeatMessageRequestBit)清零。
3.2 常规运行状态(NormalOperationState)
常规运行状态(NormalOperationState)用于保证只要对网络通信有需求,任何一个网络管理节点都可以保持网络处于唤醒状态。
当节点由重复报文状态(RepeatMessageState)或准备睡眠状态(ReadySleepState)进入常规运行状态(NormalOperationState)时,需按照T_NM_MessageCycle的周期发送网络管理报文。
当节点处于常规运行状态(NormalOperationState),而定时器T_NM_TIMEOUT溢出时,需要重启定时器。
当节点处于常规运行状态(NormalOperationState),而本地睡眠条件满足时,需进入准备睡眠状态(ReadySleepState)。
当节点处于常规运行状态(NormalOperationState),而接收到重复报文请求标志位(RepeatMessageRequestBit)置位的网络管理报文时,需进入重复报文状态(RepeatMessageState)。
当节点处于常规运行状态(NormalOperationState),而RepeatMessageRequest()函数被调用时,需进入重复报文状态(RepeatMessageState),并将报文中重复报文请求标志位(RepeatMessageRequestBit)置位,同时启用快速发送机制。
3.3 准备睡眠状态(ReadySleepState)
当节点从重复报文状态(RepeatMessageState)或常规运行状态(NormalOperationState)进入准备睡眠状态(ReadySleepState)后,需停止发送网络管理报文。
当节点处于准备睡眠状态(ReadySleepState),定时器T_NM_TIMEOUT溢出后,需进入准备总线睡眠模式(PrepareBusSleepMode)。
当节点处于准备睡眠状态(ReadySleepState),但因发生本地唤醒事件,睡眠条件不再满足时,需进入常规运行状态(NormalOperationState)。
当节点处于准备睡眠状态(ReadySleepState),接收到重复报文请求标志位(RepeatMessageRequestBit)置位的网络管理报文后,需进入重复报文状态(RepeatMessageState)。
当节点处于准备睡眠状态(ReadySleepState),RepeatMessageRequest()函数被调用时,需进入重复报文状态(RepeatMessageState),并将网络管理报文中的重复报文请求标志位(RepeatMessageRequest)置位,同时启用快速发送机制。
网络管理定时参数
参数 | 描述 |
---|---|
T_REPEAT_MESSAGE | 节点在重复报文状态(RepeatMessageState)中持续的时间 |
T_NM_TIMEOUT | 节点进入网络模式(NetworkMode)后,即开启该定时器; 在准备睡眠状态(ReadySleepState)中,该定时器溢出后,节点进入准备总线睡眠模式(PrepareBusSleepMode) |
T_WAIT_BUS_SLEEP | 该定时器的作用是确保所有的节点都有时间停止其网络活动 |
T_START_NM_TX | 该参数定义了节点从准备总线睡眠模式(PrepareBusSleepMode)、常规运行状态(NormalOperationState)或准备睡眠状态(ReadySleepState)进入重复报文状态(RepeatMessageState),到发出第一帧网络管理报文的最大允许时间间隔。 |
T_START_App_TX | 在成功发送出第一帧网络管理报文后,节点应发送出应用报文的最大时间间隔 |
T_NM_ImmediateCycleTime | 节点启动快速发送机制时,需以此参数作为网络管理报文的发送周期 |
T_NM_MessageCycle | 在网络模式(NetworkMode) (除去准备睡眠状态)中,节点应以此参数作为网络管理报文的发送周期 |
T_WakeUp | 节点从唤醒事件发生,到发出第一帧网络管理报文的最大允许时间间隔 |
N_ImmediateNM_TIMES | 当节点处于重复报文状态并启用快速发送机制时,节点使用 T_NM_ImmediateCycleTime为周期发送网络管理报文的数量 |
状态切换整体框图
下图显示了与API规范相关的UML状态图。模式更改相关转换用绿色表示,错误处理相关转换用红色表示,可选节点检测相关转换用蓝色表示。此外,还假定启用了总线负载减少功能。
状态切换详述:
网络管理切换状态 | 描述 |
---|---|
NM_1 | CAN 网络管理模块的初始化 |
NM_2 | 节点在睡眠模式下检测到主动唤醒请求,发送网络管理报文来主动唤醒网络,必须首先进入 NM PDU 快速发送状态。 |
NM_3 | 处于睡眠模式时,收到有效的网络管理报文后,进入重复报文状态中的 NM PDU 正常发送状态。 |
NM_4 | 处于 NM PDU 快速发送状态的节点,在计数器 N_ImmediateNM_TIMES 为零时,节点将进入 NM PDU 正常发送状态,以正常周期发送网络管理报文。 |
NM_5 | 处于重复报文状态下的主动请求网络节点,如果 T_REPEAT_MESSAGE 发生超时,但节点的主动网络请求仍持续存在,节点必须进入常规操作状态。节点继续保持以正常周期T_NM_MessageCycle 发送网络管理报文和应用报文 PDU。 |
NM_6 | 如果节点的主动网络请求取消, 并收到有效的网络管理报文后, 节点应进入重复报文状态中。 |
NM_7 | 处于常规操作状态的节点,如果释放所有的网络请求,不再需要主动请求网络,那么它必须立即将网络管理状态切换到准备睡眠状态,同时该节点必须立即停止发送网络管理报文。 |
NM_8 | 处于准备睡眠状态的节点, 如果检测到主动网络请求,节点必须立刻进入常规操作状态,同时必须开始以正常周期 T_NM_MessageCycle 发送网络管理报文和应用报文 PDU。 |
NM_9 | 处于重复报文状态的 NM PDU 正常发送状态的节点,如果没有检测到主动网络请求,一旦T_REPEAT_MESSAGE 超时,节点将进入准备睡眠状态。 |
NM_10 | 如果节点的主动网络请求取消, 并收到有效的网络管理报文后, 节点应进入重复报文状态中。同NM_6。 |
NM_11 | 处于准备睡眠状态的节点如果没有检测到主动网络请求,一旦T_NM_TIMEOUT 超时, 节点将进入预睡眠模式。 |
NM_12 | 处于预睡眠模式的节点,如果检测到主动唤醒请求,节点将进入重复报文状态的 NM PDU 快速发送状态。 |
NM_13 | 处于预睡眠模式的节点,如果收到被动唤醒请求,节点将进入重复报文状态的 NM PDU 正常发送状态。 |
NM_14 | 处于预睡眠模式的节点如果不再收到主动或被动唤醒请求,一旦 T_WAIT_BUS_SLEEP 超时, 节点将进入睡眠模式。 |
NM_15 | 在任何状态下发生 Battery Power Off,节点都将进入关闭模式,不再拥有任何通信和网络管理的功能。 |
当ECU处于不同的运行模式时,可以发送和接收的CAN报文的类型。
网络模式 | 网络管理报文 | 应用报文[1] | |||
---|---|---|---|---|---|
Tx | Rx | Tx | Rx | ||
总线睡眠模式 | N | Y | N | N[2] | |
准备总线睡眠模式 | N | Y | N[3] | N | |
网络模式 | 重复报文状态 | Y | Y | Y | Y |
常规运行状态 | Y | Y | Y | Y | |
准备睡眠状态 | N | Y | Y | Y | |
除特殊说明外, Tx/Rx 是对应用层而不是对数据链路层的需求; “N”表示不允许报文的发送或接收; “Y”表示允许报文的发送或接收; [1]:应用报文包括常规应用报文、诊断报文、标定用报文; [2]:是对数据链路层的需求(不应给出 ACK 应答); [3]:已经存在于发送缓存中的报文允许被发送出来。 |
网络管理报文(NM PDU)
每一个AUTOASAR网络管理节点都会被分配一个唯一的网络管理报文ID。
NM PDU数据结构如下:
源节点地址(SourceNodeIdentifier)
每一个参与网络管理的节点都会被分配一个唯一的标识符(NODE_ID),存放于网络管理报文的Byte0(SourceNodeIdentifier)中。
控制比特向量(ControlBitVector)
- Bit0:重复报文请求标志位(RepeatMessageRequestBit),信号值描述为:
- 0x0:该报文发送节点未请求其他节点进入重复报文状态
- 0x1:该报文发送节点请求其他节点进入重复报文状态
- Bit3:NM协调器休眠位
- 主协调器未请求启动同步关机
- 主协调器请求启动同步关机
- Bit4:主动唤醒网络标志位(ActiveWakeupBit),信号值描述为:
- 0x0:该报文发送节点未主动唤醒网络(被其它节点唤醒)
- 0x1:该报文发送节点主动唤醒网络
- Bit6:部分网络信息位
- 0x0:NM PDU未包含部分网络请求信息
- 0x1:NM PDU包含部分网络请求信息
用户数据(Userdata)
在网络管理报文中有6个字节的用户数据(Userdata0~5),可以被应用层读取和写入,用于传输用户定义信息。
常用缩写
缩写 | 英文名称 | 中文名称 |
---|---|---|
Autosar | Automotive Open System Architecture | 汽车开发系统架构 |
ECU | Electric Control Unit | 电控单元 |
NM | Netword Management | 网络管理 |
PM | Power Mode | 电源模式 |
PDU | Protocol Data Unit | 协议数据单元 |
KL15 | Terminal 15 of the vehicle | 网络唤醒硬线电压 |
KL30 | Terminal 30 of the vehicle | 12V电源电压 |
Power On | KL30 is connected | 12V电源上电 |
Power Off | KL30 is disconnected | 12V电源下电 |
CAN | Controller Area Network | 控制器局域网络 |
CANFD | CAN with Flexible Data Rate | 灵活速率CAN网络 |
RMR | Repeat Message Request | 重复报文状态请求 |
BSM | Bus Sleep Mode | 总线休眠状态 |
PBSM | Prepare Bus Sleep Mode | 总线预休眠状态 |
RMS | Repeat Message State | 重复报文状态 |
NOS | Normal Operation State | 正常运行状态 |
RSS | Ready Sleep State | 就绪睡眠状态 |