AUTOSAR 网络管理详解
1、AUTOSAR 网络管理概述
AUTOSAR NM(Network Management)是分布式直接网络管理协议,目标是让同一个 NM 集群内所有 ECU同步唤醒、同步休眠,实现整车网络低功耗管理,避免部分 ECU 提前下电、部分还在工作,同时统一协调总线状态切换AUTOSAR。
核心逻辑:
(1) 在一个网络中,若节点对总线通信有需求,它就需要周期性地发送网络管理报文,否则不发送网络管理报文。(2)若节点对总线通信不再有需求,且在 CanNmTimeoutTime+CanNmWaitBusSleepTime超时前监测不到网络管理报文,节点将进入总线睡眠模式。
2、运行模式
AUTOSAR NM 包含三大模式:总线睡眠模式BSM、网络模式NM、预睡眠模式PBSM。 网络模式内部又分为 3 个子状态:重复报文状态 RMS、正常运行状态 NOS、准备睡眠状态 RSS。AUTOSAR状态转换图如下:
其中各函数的意义如下
CanNm_Init():CanNm 模块初始化,初始化内部变量、定时器、状态,初始状态进入 Bus Sleep Mode(BSM 总线睡眠),上电只调用一次。
CanNm_PassiveStartUp():被动唤醒,本 ECU 在 BSM/PBM 下收到其他 ECU 的 NM 报文、硬件唤醒信号(不是自己主动要网络),从 BSM 或者 PBM 进入 Repeat Message State(RMS 重复报文状态)。注意:被动唤醒无法进入NOS状态,被动唤醒 ≠ 本节点需要网络,只是总线被唤醒了,本节点只是被顺带唤醒。测试时,可以通过发送网络唤醒报文给指定ECU,达到被动唤醒的目的。
CanNm_NetworkRequest():主动唤醒,本 ECU 自己需要使用总线通信。主动请求网络,从 BSM/PBM 进入 RMS;如果已经在 Network Mode,维持网络激活。测试时,可以给指定ECU的KL 15上电,达到主动唤醒的目的(本ECU带KL15引脚),也可以通过给指定ECU发送UDS 诊断请求,达到主动唤醒的目的(本ECU不带KL15引脚)。
CanNm_NetworkRelease():释放网络请求,本节点不再需要网络,停止周期性发 NM 报文。一般情况下,可以通过关闭KL15或者诊断会话退出的方式,达到释放网络请求的目的。
CanNm_RepeatMessageRequest():网络已经处于 Network Mode(NOS 或者 RSS),需要重新快发一轮 NM 报文同步全网,并进入RMS状态。属于本地上层主动调用同步,测试时一般无法触发。
Repeat Message bit received:当 CanNm 在网络模式(NOS/RSS)下,收到一帧 NM PDU,并且报文 CBV (控制向量比特位)里的 Repeat Message Bit(Bit0)= 1,就触发这个事件。测试时,可通过模拟发送网络唤醒报文到ECU,且网络唤醒报文中重复报文请求标志位置1,达到此目的。重复报文请求标志位会在下文中详细介绍。
T_REPEAT_MESSAGE:节点在重复报文状态中持续的时间CanNmRepeatMessageTime超时。
T_NM_TIMEOUT:在准备睡眠状态中,该定时器(CanNmTimeoutTime)溢出后,节点进入准备总线睡眠模式
T_WAIT_BUS_SLEEP:当节点进入 准备总线睡眠模式后,开启该定时(CanNmWaitBusSleepTime), 当该定时器超时后,节点需进入总线睡眠模式
3、总线模式介绍
3.1 总线睡眠模式(BSM)
总线睡眠模式的作用:网络无通信需求时降低节点功耗。节点进入该状态后保留唤醒机制,等待唤醒,同时把功耗降到指标要求以内。
ECU 在总线睡眠模式下,一旦 CAN (FD) 物理层检测到唤醒信号(报文、总线电平变化等),会打开对应 CAN 通道的报文接收功能,并启动 T_WakeUpTimeout。
- 在 T_WakeUpTimeout 时限内收到网络管理 PDU:进入正常唤醒流程;
- T_WakeUpTimeout 超时仍未收到 NM PDU:关闭该通道报文接收能力。 在正常唤醒流程启动前,ECU 不能发送任何报文。
节点处于总线睡眠模式时:
- 若调用CanNm_NetworkRequest
(),CanNm 模块切换至网络模式并开启快发机制,默认进入重复报文状态;【BSM-RMS_本地唤醒】 - 若调用CanNm_PassiveStartUp
(),CanNm 模块切换至网络模式,默认进入重复报文状态。【BSM-RMS_远程唤醒】
总线睡眠模式报文收发特性:
| NM报文 | APP报文 | ||
| TX | RX | TX | RX |
| N | Y | N | N |
其中应用报文包括常规应用报文、诊断报文。
3.2 准备总线睡眠模式(PBSM)
准备总线睡眠模式,给 ECU 收尾时间,把缓存队列里面残留报文发完,做进入深度睡眠前的准备;这个阶段不再允许新增报文发送,但发送缓存中的报文可被发送。
节点一旦进入准备总线睡眠模式,即刻启动CanNmWaitBusSleepTime定时器;定时器溢出后,节点进入总线睡眠模式。【PBSM-BSM】
节点在准备总线睡眠模式时,如果收到网络管理报文,或是上层产生通信需求,将切换回网络模式,默认进入重复报文状态。【PBSM-RMS_本地唤醒】or【PBSM-RMS_远程唤醒】
准备总线睡眠模式报文收发特性:
| NM报文 | APP报文 | ||
| TX | RX | TX | RX |
| N | Y | N | N |
3.3 网络模式(NM)
网络模式包含三个子状态:RMS、NOS、RSS
RMS:Repeat Message State 重复报文状态
NOS:Normal Operation State 正常运行状态 RSS:
Ready Sleep State :准备睡眠状态
节点从总线睡眠、准备总线睡眠模式切入网络模式时,默认进入重复报文状态。 进入网络模式后,开启CanNmTimeoutTime定时器; 网络模式中,每成功发送或收到一帧 NM 报文,就重置该定时器CanNmTimeoutTime,表示总线还有活跃节点、网络还需要保持唤醒,暂时不往 PBSM 走。
当唤醒事件使节点从总线睡眠模式进入网络模式时,节点进入重复报文状态并发送首帧网络管理报文;整个过程需在唤醒时间阈值Wakeup内完成。
3.3.1 重复报文状态(RMS)
重复报文状态是网络模式下的子状态。当节点从总线睡眠模式、准备总线睡眠模式进入网络模式时,默认进入重复报文状态。
当节点进入重复报文状态后,需要开始(或重新开始)发送网络管理报文,此时重复报文标志位置位。
节点在进入重复报文状态后,需要保持一段时间,这段时间由参CanNmRepeatMessageTime
:
- 存在网络请求 → 切换至正常运行状态(NOS),RMS下 KL15 ON 或 诊断唤醒【RMS-NOS】;
- 无网络请求 → 切换至准备睡眠状态(RSS),RMS下无动作【RMS-RSS】
离开重复报文状态,重复报文标志位置0
注:通常情况下可以通过重复报文标志位判断当前是RMS状态还是NOS状态,且RMS状态只能维持CanNmRepeatMessageTime。
若节点处于总线睡眠模式或准备总线睡眠模式,由于成功地接收到网络管理报文而进入重复报文状态,或节点处于常规运行状态或准备睡眠状态,由于成功接收到重复报文状态请求标志位置位的网络管理报文而进入重复报文状态,需按参数 CanNmMsgCycleTime规定的周期发送网络管理报文。
此外,如需要快速唤醒总线,会在一定时间内执行快发动作:启用快发机制(如KL15 ON)。 节点由本地事件调用 CanNm_NetworkRequest()/ CanNm_RepeatMessageRequest()进入重复报文状态时,先以CanNmImmediateNmCycleTim作为发送周期发送 NM 报文;快发报文的总数量由CanNmImmediateNmTransmissions确定。 全部快发报文发送完毕后,再按照常规周期CanNmMsgCycleTime发送网络管理报文。其中CanNm_RepeatMessageRequest()测试时无法触发。
注:快发阶段所花费的时间包含在CanNmRepeatMessageTime 时间内。
当节点从准备总线睡眠模式、常规运行状态、准备睡眠状态进入重复报文状态后,需在
T_START_NM_TX 时间内发送出第一帧网络管理报文。而由总线睡眠模式进入重复报文状态并发出第一帧网络管理报文的最大允许时间间隔表示为T_Wakeup。
当节点从总线睡眠模式或准备总线睡眠模式进入重复报文状态并成功发送第一帧网络管理报
文后,需在 T_START_App_TX 时间内将第一帧 CAN(FD) 应用报文发送出来。
重复报文状态报文收发特性:
| NM报文 | APP报文 | ||
| TX | RX | TX | RX |
| Y | Y | Y | Y |
3.3.2常规运行状态(NOS)
节点主动持有网络请求、维持总线唤醒的工作状态。
当节点进入常规运行状态时,需按照 CanNmMsgCycleTime 的周期发送网络管理报文。
当节点处于常规运行状态,若定时器 CanNmTimeoutTime 溢出时,需要重启定时器。
当节点处于常规运行状态,若本地睡眠条件满足(CanNm_NetworkRelease()&&CanNmRepeatMessageTime 超时)需进入准备睡眠状态。【NOS-RSS】
当节点处于常规运行状态,若接收到重复报文请求标志位置位的网络管理报文时,需进入重复报文状态,重复报文标志位置位,不进行快发。【NOS-RMS】
当节点处于常规运行状态, CanNm_RepeatMessageRequest()函数被调用时,需进入重复报文状态,并将报文中重复报文请求标志位置位,同时启用快速发送机制。【NOS-RMS】
一句话,只有主动唤醒才会触发快发机制。
常规运行状态报文收发特性:
| NM报文 | APP报文 | ||
| TX | RX | TX | RX |
| Y | Y | Y | Y |
3.3.3 准备睡眠状态(RSS)
本节点已经释放网络请求、不再主动发 NM 报文,但总线还被别的节点维持唤醒;被动等待全网释放,是协同睡眠的核心状态。
进入准备睡眠状态,节点停止发送网络管理报文。
准备睡眠状态下CanNmTimeoutTime超时,节点进入准备总线睡眠模式。【RSS-PBSM】
准备睡眠状态检测到本地网络请求(如KL15 ON),切换为常规运行状态。【RSS-NOS】
准备睡眠状态收到携带重复报文请求标志的 NM 报文,进入重复报文状态。【RSS-RMS】
准备睡眠状态调用CanNm_RepeatMessageRequest(),节点进入重复报文状态,置位 NM 报文重复报文请求标志,启动快发。【RSS-RMS】
准备睡眠状态报文收发特性:
| NM报文 | APP报文 | ||
| TX | RX | TX | RX |
| N | Y | Y | Y |
4、时间参数含义
CanNmRepeatMessageTime | 节点在重复报文状态中持续的时间 |
CanNmTimeoutTime | 节点进入网络模式后,即开启该定时 器;在准备睡眠状态中,该定时器溢 出后,节点进入准备总线睡眠模式 |
CanNmWaitBusSleepTime | 该定时器的作用是确保所有的节点都 有时间停止其网络活动。当节点进入 准备总线睡眠模式后,开启该定时器, 当该定时器超时后,节点需进入总线 睡眠模式 |
T_START_NM_TX | 该参数定义了节点从准备总线睡眠模 式、常规运行状态或准备睡眠状态进 入重复报文状态,到发出第一帧网络 管理报文的最大允许时间间隔 |
T_START_NM_TX | 该参数定义了节点从准备总线睡眠模 式、常规运行状态或准备睡眠状态进 入重复报文状态,到发出第一帧网络 管理报文的最大允许时间间隔 |
T_START_App_TX | 在成功发送出第一帧网络管理报文 后,节点应发送出应用报文的最大时 间间隔 |
CanNmImmediateNmCycleTim | 节点启动快速发送机制时,网络管理 报文的快速发送周期 |
CanNmMsgCycleTime | 在网络模式(除去准备睡眠状)中,网 络管理报文的发送周期 |
T_Wakeup | 节点从唤醒事件发生,由总线睡眠模 式进入重复报文状态并发出第一帧网 络管理报文的最大允许时间间隔。 |
CanNmImmediateNmTransmissions | 当节点处于重复报文状态并启用快速 发送机制时,发送快发报文的次数 |
T_WakeUpTimeout | 本参数定义了在监测到CAN(FD)物理 层唤醒事件后,ECU具有报文接收能 力的最大允许时间 |
5、网络管理报文
网络管理报文是 CAN(FD)分布式直接 NM 的广播载体,所有节点依靠收发 NM 报文,协同唤醒、维持网络、同步休眠决策。
AUTOSAR 标准本身不强制规定 NM 报文固定 ID 值,只规定行为约束;ID 分配策略属于整车 OEM / 系统设计规范,行业主流两种方案:同集群共用同一个 NM ID、NM ID = 基 ID + 节点 ID
网络管理 PDU 数据格式如下
| 字段 | 说明 |
|---|---|
| Byte0 | SNI 源节点 ID(Source Node Identifier),标识发送方 ECU |
| Byte1 | CBV 控制位向量(Control Bit Vector),核心标志位 |
| Byte2~Byte7 | User Data,OEM 自定义,可放唤醒原因、诊断信息等 |
5.1 源节点地址
同一个网管集群内,用来唯一标识发送 NM 报文的 ECU,源节点地址需存放于网络管理 PDU 的 Byte0 中。
5.2 控制比特向量
1 字节标准定义的网管控制标志字节,是驱动 CanNm 状态机跳转、同步休眠、PN 局部网管的核心协议字段。控制比特向量需存放于网络管理 PDU 的 Byte1 中。
| Bit7 | Bit6 | Bit5 | Bit4 | Bit3 | Bit2 | Bit1 | Bit0 |
| Reserved | Partial Network Information Bit | Reserved | Active Wakeup Bit | Reserved | Reserved | Reserved | Repeat Message Request Bit |
Bit0:RptMsgReq(Repeat Message Request)重复报文请求位
=1:该报文发送节点请求其他节点进入重复报文状态。接收方收到后进入 RMS,即Repeat Message bit received
=0:该报文发送节点未请求其他节点进入重复报文状态
Bit4:Active Wakeup Bit 主动唤醒位:1 = 本节点主动唤醒总线;0 = 被动唤醒
Bit6:PNI,局部网络管理标志位(PN 网络才用)
5.3 User Data 用户数据
用户数据可被应用层读取和写入,用于传输用户定义,其中User Data Byte0 的 bit0 定义为 RepeatSts,即上文所述重复报文状态,信号值定义如下: 0x0:节点不在重复报文状态 ;0x1:节点处于重复报文状态。
重复报文请求标准位:Byte1的Bit0,用以请求其他节点进入RMS
重复报文状态位:Byte2的Bit0,用以表征本节点进入RMS
本文从测试工程师视角,梳理 AUTOSAR 网络管理状态机的完整跳转逻辑,并对关键测试点单独拆解、分析说明。后续计划整理一份详细的测试步骤与测试用例,敬请期待。
同时,恳请各位同行专家对文中疏漏与不妥之处提出宝贵意见。