摘要:本文基于一次 ETAS RTA-COM 网络管理专场培训整理。从 "什么是网络管理" 讲起,系统梳理 AUTOSAR NM(CanNm)的分布式直接网络管理机制、主动 / 被动唤醒、NM 状态机、双 ECU 时序、CAN 收发流程、transceiver 交互,再到 ISOLAR / 达芬奇工具中的配置实现(ComM、CanNm、CanIf、EcuM、BswM),并给出休眠 NVM 写入、PNC、常见疑难点的实操解法。配图为培训现场 PPT 截图,供对照理解。
一、引言:为什么需要网络管理(NM)
汽车上 ECU 越来越多,全部时刻满功率工作既不节能也不现实。网络管理(Network Management, NM) 的核心职责就两个字:休眠与唤醒。
- 当整车无通信需求时,NM 让各节点进入总线休眠,降低整车静态电流;
- 当出现通信需求时(点火上电、被远程唤醒、应用需要通信),NM 驱动节点回到网络模式正常收发报文。
NM 相关的协议演进:
|-----------------------|--------------|----------|
| 标准 | 说明 | 现状 |
| OSEK NM | 早期标准 | 已基本淘汰,少用 |
| AUTOSAR NM(CanNm) | 广播式分布式直接网络管理 | 当前主流 |
| UDP NM(以太网) | 面向车载以太网 | 可后续拓展 |
AUTOSAR 的 CanNm 基于分布式直接网络管理(Decentralized Direct Network Management)策略 ------ 每个网络节点自给自足,仅依据自己收发到的 NM PDU 决定自身状态,无需中心节点协调。

图 1:被动唤醒(Remote wakeup,经网关)与主动唤醒(Local wakeup,Node1)的 CAN 网络拓扑示例。
二、核心概念:主动 ECU 与被动 ECU
这是 NM 里最需要分清的概念,判断标准只有一个 ------是否主动发送 NM 报文:
|-----------|-----------------|----------------------------|
| | 主动 ECU(Active) | 被动 ECU(Passive) |
| 是否发 NM 报文 | 主动周期发送 | 只收不发 |
| 典型节点 | ABS(主动唤醒) | TCU(被动唤醒) |
| 唤醒来源 | 本地 15 电 / 内部事件 | 收到总线 NM 报文(经网关) |
| 配置要点 | ComM 选 Full | ComM 选 Light(关闭 NM 发送) |
提醒:不同厂商对 "主动 / 被动" 的定义有差异,建议按节点的实际行为(是否发 NM)去描述,不要纠结于命名。
主动唤醒与被动唤醒并不互斥,可同时存在于同一控制器上。
三、硬件基础:SBC、CAN 收发器与特定帧唤醒
网络管理的实现高度依赖硬件:
- SBC(电源管理芯片) + CAN 收发器 ,通常以 CDD(复杂驱动) 方式集成;
- 收发器是否支持特定帧(选择性)唤醒,决定了能否用工具配置实现 "仅特定报文唤醒"。
**
图 2:AUTOSAR 规范关于 CAN 收发器唤醒事件检测、ICU 使能 / 禁用通知的说明。
关键点(来自规范 SWS_CanTrcv):
- 唤醒事件由 CAN 收发器硬件检测,可触发 SW 中断 或周期性轮询;
- CanTrcv 通过 Icu_EnableNotification / Icu_DisableNotification 使能 / 禁用唤醒通知;
- Standby 模式 应使能 ICU 通道(防丢唤醒),Normal 模式应禁用 ICU 通道。
实操结论:
- 项目所用 TG1145 收发器在官方支持列表内,走 SPI 驱动,可工具配置;
- 若硬件仅支持任意帧唤醒 (如 1043 芯片),工具无法配置 "特定帧唤醒",需手写代码 ;1043 自带烧录固件无法改 RNH 拉高逻辑,只能基于掩码异或配置唤醒帧范围。
四、NM 状态机详解(核心骨架)
NM 的核心是状态机。整体流转:上电 → 总线休眠 → 网络模式(Repeat → Normal)→ 两级休眠准备 → 回到总线休眠。
**
图 3:CanNm 状态机(含 PowerOn、Bus-Sleep、Network Mode、Prepare Bus-Sleep、PowerOff 及各状态触发 / 超时条件)。
4.1 主要状态
|----------------------------|----------------------------------------------|
| 状态 | 行为 |
| Bus-Sleep Mode | 总线休眠,不发送 NM;满足条件(Wait Bus-Sleep Timer 超时)后进入 |
| Network Mode -- Repeat | 网络启动期,快速发送 NM 报文(RMS→RSS),广播自己的存在 |
| Network Mode -- Normal | 常规工作,按慢发周期发 NM,正常收发应用报文 |
| Ready Sleep State | 准备休眠的过渡状态(收到释放请求后进入) |
| Prepare Bus-Sleep Mode | 两级带计时器的休眠准备,超时后回到 Bus-Sleep |
4.2 关键跳转与触发
- 总线休眠 → 网络模式:被动唤醒接口 CanNm_PassiveStartup(),或主动网络请求 CanNm_NetworkRequest();
- 进入 Network Mode:启动 NM-Timeout Timer、Repeat Message Timer,回调 Nm_NetworkMode();
- Repeat → Normal:Repeat Message Timer 超时,停止总线负载削减;
- Normal → 休眠准备:收到网络释放 CanNm_NetworkRelease() 或 Nm_PrepareBusSleepMode();
- 回退逻辑:Repeat/Normal 阶段收到特定 NM 报文、或 CanNm_RepeatMessageRequest(),可回到 Repeat 或维持网络。
重要提醒:状态跳转不全是定时器控制 ,还包含报文接收自维护逻辑。且 NM 状态机由 CanSM(Can State Manager)自行控制,ComM 才是需要人工控制的对象------ 这是很多新人理解偏差的地方。
五、双 ECU 网络唤醒时序
以 ABS(网络激活器 / 主动)+ TCU(网络响应器 / 被动) 为例:
**
图 4:Network Wakeup 时序(含 Repeat Message State、Normal Operation State、T1--T6 计时参数)。
- 主动 ECU :检测到网络请求 → 进入 Repeat,立即发送 NM PDU (Immediate NM PDU)唤醒被动 ECU → 随后进入 Normal,按慢发周期 T2 持续发送 NM;
- 被动 ECU:收到 NM 报文被唤醒 → 也进入 Repeat → Normal,参与网络;
- 释放:无通信需求后,双方收到网络释放,逐步进入休眠;
- 关键计时参数:T2 = NM PDU Normal 慢发周期 、T3 = Repeat Message Timer。
六、CAN 收发流程
NM 报文本质也是 CAN PDU,走标准收发链路。
6.1 发送流程
CanNm → CanIf → CanWrite(Can 驱动)------ 从 NM 主函数向下调用,最终写入 CAN 硬件。
6.2 接收流程
底层驱动轮询读回(Can_MainFunctionRead)→ CanIf_RxIndication → 按 PDU 类型分流:
- Can Nm PDUs → 交给 CanNm 处理(更新状态机);
- Other CAN PDUs → PduR_CanIfRxIndication → Com_RxIndication 交给上层应用。
**
图 5:Can_MainFunctionRead → CanIf_RxIndication → (Can Nm PDUs / Other CAN PDUs)分流。
七、Transceiver 交互与状态机
收发器本身也有状态机,关键交互链路为:
Integration Code → EcuM → ComM → CanSM → CanIf → CanTrcv → Dio → ETH PHY(HW)
唤醒后依次调用:
- ComM_EcuM_WakeUpIndication(NetworkHandleType) ------ 上报唤醒事件;
- CanSM_RequestComMode(COMM_FULL_COMMUNICATION) ------ 请求进入全通信;
- CanIf_SetTrcvMode(CANIF_TRCV_MODE_NORMAL) ------ 设置收发器模式;
- CanTrcv_SetOpMode(...) ------ 下发到收发器驱动;
- Dio_WriteChannel(...) ------ 控制硬件端口。
**

图 6:CanTransceiver 交互时序,CAN 收发器进入 NORMAL 模式后即可运行。
收发器状态机一般包括:上电 → 初始化 → 多配置切换 → 去初始化 ,通过判定帧 / 信号完成 sleep / normal / standby 等状态跳转。底层驱动分 DIO 和 SPI 两类,集成时注意区分。
八、工具配置实现(ISOLAR / 达芬奇)
以 RTA-BASE / ISOLAR 为例,主动式 NM 的配置链路:
8.1 前置准备
- 导入 DBC 获取 NM 报文定义;
- 用 Configuration Enhancer 预设模块参数默认值,可后续手动微调。
8.2 模块级配置
- ComM :选择变体 ------ 被动节点选 Light (不发送 NM),主动节点选 Full;
- NM 全局配置 + CanNM 通道参数:设置三类计时器时长、收发 PDU(TX/RX 各一或成对);
- CanIf:配置收发回调;
- EcuM:新增 / 自定义唤醒源(见下);
- BswM:配置通信开关相关动作(后续 PNC 部分再展开)。
8.3 EcuM 唤醒源配置
**

图 7:EcuMWakeupSource 配置界面,最多 32 个唤醒源,其中 5 个标准源(POWER/RESET/INTERNAL_RESET/INTERNAL_WDG/EXTERNAL_WDG)由 EcuM 自动配置。
自定义唤醒源(如 INTERNAL_CAN)需手动添加并关联到 ComM 通道,供被动唤醒识别。
8.4 测试验证
- 配置 NM 状态切换对应的回调函数;
- 通过修改 NM 报文的 User Data 字段直观观测当前运行状态;
- 用 NM UT 测试代码调用 ComM 接口触发网络请求 / 释放,验证状态机流转。
九、实操难点与解法
9.1 休眠前 NVM 写入(Write All)
最简方案(无需走完整 BswM 下电流程):
- 手写 Callout 函数;
- 依次调用 RTE Stop → OS 停止调度;
- 再执行 NVM Write All(也可在 BswM Action List 绑定到休眠触发条件)。
9.2 PNC(部分网络)
- 本质:满足条件后开启通道发送报文 ,由 BswM 周期扫描 判断触发,切换 ComM User 状态,控制通道 / PDU 组开关;
- PNC 与 User 一一绑定 ,Enable/Disable 的 PDU 组配置要成对;
- 规则初始默认值建议设 False,否则可能出现报文丢失 / 需额外调用 PNCR 接口。
9.3 唤醒后第一帧不是 NM 报文?
默认机制下 NM 报文应先发,若出现第一帧为应用报文,可通过:
- 调整 OS 任务中 CanNm Main Function 的执行顺序 ,放在 Com Main Function 之前;
- 或延后应用报文发送、修改相关启动时间。
9.4 28 会话(UDS)超时恢复
工具无内置超时自动恢复配置 ,需自行编写逻辑实现会话超时后恢复通信权限。
9.5 NVM 写入过慢
排查方向:
- 是 Flash 驱动写入本身慢 ,还是写入过程被高优先级任务抢占;
- 单独测试底层 Flash 写入速度定位瓶颈;
- 注意不同芯片写入速度不同,无统一标准,以自身正常状态为对照。
十、总结
|---------|--------------------------------------------|
| 维度 | 一句话 |
| NM 作用 | 休眠与唤醒 |
| 主动 / 被动 | 看是否发 NM 报文 |
| 状态机 | 休眠 → Repeat (快发) → Normal (慢发) → 休眠准备 → 休眠 |
| 唤醒链路 | CanTrcv → CanIf → CanSM/ComM → EcuM |
| 收发流程 | 发:CanNm→CanIf→Can;收:Can 读→CanIf→CanNm |
| 配置核心 | ComM 变体 + CanNm 计时器 + EcuM 唤醒源 + BswM 动作 |
| 最大坑 | NM 状态机归 CanSM 管,ComM 才需人工控制 |
学习建议:先吃透 "状态机 + 主动 / 被动" 这两个骨架,再看工具配置时逐项对应,最后用项目调试验证 ------ 深入理解离不开实际项目排 Bug 的过程。
本文配图均来自 ETAS RTA-COM 网络管理培训 PPT 截图(ETAS-VOS/PRM,2024),仅作技术学习参考。