AUTOSAR 网络管理接口详解
1. 引言
AUTOSAR(汽车开源系统架构)网络管理接口(Network Management Interface,简称Nm)是AUTOSAR通信栈中的关键组件,它作为通信管理器(ComM)和总线特定网络管理模块(如CAN网络管理、FlexRay网络管理等)之间的适配层。本文将详细介绍网络管理接口的架构、功能和实现方式。
网络管理接口提供了两种主要功能:
- 基本功能:作为ComM和总线特定网络管理模块之间的适配层,转发API调用和回调通知
- 协调器功能(可选):支持多总线系统中网络的协调关闭和唤醒
2. 网络管理接口架构
2.1 架构概述
如上图所示,网络管理接口位于AUTOSAR通信栈的服务层,连接上层的通信管理器(ComM)和下层的总线特定网络管理模块。
2.1.1 主要组件关系
- 应用层:应用程序通过ComM请求或释放通信资源
- 服务层:
- 通信管理器(
ComM
):管理网络通信状态,向Nm发送网络请求/释放 - 网络管理接口(
Nm
):转发请求到相应的总线特定网络管理模块 - ECU状态管理器(
EcuM
):向ComM发送唤醒通知 - BSW调度器:调度
Nm_MainFunction
的执行
- 通信管理器(
- 通信层:
- 总线特定网络管理模块(
CanNm
、FrNm
、UdpNm
、J1939Nm
等):实现特定总线的网络管理协议 - 总线接口模块(
CanIf
、FrIf
、EthIf
等):提供对底层驱动的访问
- 总线特定网络管理模块(
2.1.2 网络管理接口职责
- 作为ComM和总线特定NM模块之间的适配层
- 提供基本功能(转发API调用)
- 提供NM协调器功能(可选)
- 支持多总线系统的同步关闭和唤醒
2.1.3 总线特定NM模块职责
- 实现总线特定的网络管理协议
- 处理NM消息的发送和接收
- 监控网络状态
- 通知Nm网络事件
3. 网络管理状态机
3.1 状态机概述
网络管理状态机定义了网络管理的各种状态和状态转换。主要包括以下状态:
3.1.1 总线休眠模式(Bus Sleep Mode)
- 通信控制器处于休眠状态
- 网络完全关闭
- 低功耗模式
- 通过
Nm_BusSleepMode()
回调通知ComM
3.1.2 准备总线休眠模式(Prepare Bus Sleep Mode)
- 准备进入休眠状态
- 等待超时后进入总线休眠模式
- 可以被唤醒请求中断
- 通过
Nm_PrepareBusSleepMode()
回调通知ComM
3.1.3 网络模式(Network Mode)
网络模式下又分为三个子状态:
-
重复消息状态(Repeat Message State):
- 节点刚被唤醒
- 发送重复的网络管理消息
- 通过
Nm_NetworkMode()
回调通知ComM
-
正常操作状态(Normal Operation State):
- 网络完全活动
- 正常通信
- 重复计数器超时后从重复消息状态转入
-
准备睡眠状态(Ready Sleep State):
- 节点准备进入睡眠
- 通知其他节点准备关闭
- 等待协调关闭
3.2 主要状态转换
-
唤醒转换:
- 从总线休眠模式到重复消息状态:通过
Nm_PassiveStartUp()
或Nm_NetworkRequest()
- 从准备总线休眠模式到重复消息状态:通过
Nm_NetworkStartIndication()
或Nm_NetworkRequest()
- 从总线休眠模式到重复消息状态:通过
-
关闭转换:
- 从网络模式到准备总线休眠模式:通过
Nm_PrepareBusSleepMode()
- 从准备总线休眠模式到总线休眠模式:超时后通过
Nm_BusSleepMode()
- 从网络模式到准备总线休眠模式:通过
-
内部状态转换:
- 从重复消息状态到正常操作状态:重复计数器超时
- 从正常操作状态到准备睡眠状态:网络空闲,无通信请求
- 从准备睡眠状态到重复消息状态:远程唤醒,
Nm_RemoteSleepCancellation()
- 从准备睡眠状态到正常操作状态:本地唤醒,
Nm_NetworkRequest()
4. 网络管理协调器功能
4.1 协调器功能概述
网络管理协调器功能允许多个网络(总线)的同步关闭和唤醒。这在具有多个通信总线的ECU中特别有用,可以确保所有网络协调一致地进入睡眠模式或被唤醒。
4.1.1 协调关闭流程
协调关闭流程包括以下步骤:
-
协调关闭初始化:
- ComM向Nm发送
NetworkRelease
请求 - Nm转发请求到相应的总线特定网络管理模块
- ComM向Nm发送
-
远程睡眠指示:
- 总线特定网络管理模块检测到所有其他节点都准备进入睡眠模式
- 通过
Nm_RemoteSleepIndication()
通知Nm
-
同步点:
- 总线特定网络管理模块到达周期边界
- 通过
Nm_SynchronizationPoint()
通知Nm,这是协调关闭的合适时机
-
协调关闭执行:
- Nm请求总线同步,准备协调关闭
- Nm通知总线特定网络管理模块准备进入睡眠模式
- Nm通知ComM准备总线睡眠
-
总线睡眠模式:
- 总线特定网络管理模块准备总线睡眠超时
- 进入总线睡眠模式
- 通过
Nm_BusSleepMode()
通知Nm和ComM
4.2 协调器配置参数
协调器功能的关键配置参数包括:
NmActiveCoordinator
:指示通道是否为活动协调器NmChannelSleepMaster
:指示网络的睡眠是否由本地节点决定NmCoordClusterIndex
:协调集群索引,用于标识属于同一协调集群的通道NmSynchronizingNetwork
:指示网络是否为同步网络
5. 嵌套子总线协调关闭
5.1 嵌套子总线概述
在复杂的汽车网络架构中,可能存在嵌套的子总线结构,即一个主总线连接多个子总线。网络管理接口支持这种嵌套子总线的协调关闭。
5.1.1 嵌套子总线协调关闭流程
-
主总线网络释放请求:
- ComM请求释放主总线网络
- 网络管理接口接收主总线网络释放请求
-
子总线识别与检查:
- 识别所有关联的嵌套子总线(通过
NmCoordClusterIndex
) - 检查所有子总线是否可以关闭
- 识别所有关联的嵌套子总线(通过
-
子总线协调关闭:
- 等待所有子总线远程睡眠指示
- 计算子总线关闭定时器(基于
NmCoordinationShutdownDelay
) - 等待同步点
- 执行子总线同步关闭
-
主总线关闭:
- 等待所有子总线进入睡眠模式
- 主总线准备关闭
- 主总线进入准备睡眠模式
- 主总线进入睡眠模式
5.2 嵌套子总线协调关闭的关键点
- 主总线关闭前必须先关闭所有子总线
- 子总线关闭需要同步执行
- 只有当所有子总线都进入睡眠模式后,主总线才能完全关闭
- 如果任何子总线无法关闭,整个关闭过程将被中止
6. 网络管理配置模型
6.1 配置模型概述
网络管理接口的配置模型包括全局配置和通道特定配置。
6.1.1 全局配置
NmGlobalConfig
:全局配置容器NmGlobalConstants
:全局常量,如NmMainFunctionPeriod
、NmVersionInfoApi
NmGlobalProperties
:全局属性,如NmDevErrorDetect
、NmPassiveModeEnabled
NmGlobalFeatures
:全局特性,如NmCarWakeUpCallout
、NmMultipleChannelsEnabled
6.1.2 通道配置
NmChannelConfig
:通道配置容器NmChannelId
:通道标识符NmBusType
:总线类型(CAN、FlexRay、UDP等)NmActiveCoordinator
:是否为活动协调器NmChannelSleepMaster
:是否为睡眠主控NmCoordClusterIndex
:协调集群索引NmSynchronizingNetwork
:是否为同步网络
6.1.3 总线类型
支持的总线类型包括:
NM_BUSNM_CANNM
:CAN网络管理NM_BUSNM_FRNM
:FlexRay网络管理NM_BUSNM_UDPNM
:以太网UDP网络管理NM_BUSNM_J1939NM
:J1939网络管理NM_BUSNM_OSEKNM
:OSEK网络管理NM_BUSNM_GENERICNM
:通用网络管理NM_BUSNM_LOCALNM
:本地网络管理
7. API接口
7.1 标准服务接口
网络管理接口提供以下标准服务接口:
Std_ReturnType Nm_Init(const Nm_ConfigType* ConfigPtr);
Std_ReturnType Nm_PassiveStartUp(NetworkHandleType NetworkHandle);
Std_ReturnType Nm_NetworkRequest(NetworkHandleType NetworkHandle);
Std_ReturnType Nm_NetworkRelease(NetworkHandleType NetworkHandle);
7.2 通信控制服务接口
Std_ReturnType Nm_DisableCommunication(NetworkHandleType NetworkHandle);
Std_ReturnType Nm_EnableCommunication(NetworkHandleType NetworkHandle);
7.3 附加服务接口
Std_ReturnType Nm_SetUserData(NetworkHandleType NetworkHandle, const uint8* nmUserDataPtr);
Std_ReturnType Nm_GetUserData(NetworkHandleType NetworkHandle, uint8* nmUserDataPtr);
Std_ReturnType Nm_GetPduData(NetworkHandleType NetworkHandle, uint8* nmPduDataPtr);
Std_ReturnType Nm_RepeatMessageRequest(NetworkHandleType NetworkHandle);
Std_ReturnType Nm_GetNodeIdentifier(NetworkHandleType NetworkHandle, uint8* nmNodeIdPtr);
Std_ReturnType Nm_GetLocalNodeIdentifier(NetworkHandleType NetworkHandle, uint8* nmNodeIdPtr);
Std_ReturnType Nm_CheckRemoteSleepIndication(NetworkHandleType nmNetworkHandle, boolean* nmRemoteSleepIndPtr);
Std_ReturnType Nm_GetState(NetworkHandleType NetworkHandle, Nm_StateType* nmStatePtr, Nm_ModeType* nmModePtr);
void Nm_GetVersionInfo(Std_VersionInfoType* versioninfo);
7.4 回调通知接口
网络管理接口定义了以下回调通知接口,用于通知ComM网络状态变化:
void Nm_NetworkStartIndication(NetworkHandleType NetworkHandle);
void Nm_NetworkMode(NetworkHandleType NetworkHandle);
void Nm_BusSleepMode(NetworkHandleType NetworkHandle);
void Nm_PrepareBusSleepMode(NetworkHandleType NetworkHandle);
void Nm_SynchronizeMode(NetworkHandleType NetworkHandle);
void Nm_RemoteSleepIndication(NetworkHandleType NetworkHandle);
void Nm_RemoteSleepCancellation(NetworkHandleType NetworkHandle);
void Nm_SynchronizationPoint(NetworkHandleType NetworkHandle);
void Nm_CoordReadyToSleepIndication(NetworkHandleType NetworkHandle);
void Nm_CoordReadyToSleepCancellation(NetworkHandleType NetworkHandle);
8. 总结
AUTOSAR网络管理接口是AUTOSAR通信栈中的关键组件,它提供了基本功能和协调器功能,支持多总线系统的同步关闭和唤醒。通过标准化的接口和状态机,网络管理接口确保了不同总线网络管理模块之间的互操作性,并提供了灵活的配置选项以适应不同的应用需求。
网络管理接口的协调器功能特别重要,它允许在具有多个通信总线的复杂ECU中实现协调一致的网络管理,包括嵌套子总线的协调关闭。这对于优化汽车电子系统的功耗管理和确保系统稳定性具有重要意义。