AUTOSAR 网络管理接口(Nm)详解
目录
- 1. 概述
- 1.1. 网络管理接口的作用
- 1.2. 网络管理接口的特点
- 2. 网络管理接口架构
- 2.1. 架构概览
- 2.2. 模块交互关系
- 3. 网络管理状态机
- 3.1. 状态定义
- 3.2. 状态转换
- 4. 协调算法
- 4.1. 协调关闭流程
- 4.2. 同步点机制
- 4.3. 协调关闭中断处理
- 5. 网络管理交互序列
- 5.1. 网络启动流程
- 5.2. 网络关闭流程
- 5.3. 协调关闭流程
- 6. 配置模型
- 6.1. 配置结构
- 6.2. 配置参数
- 7. 总结
- 7.1. 网络管理接口的优势
- 7.2. 应用场景
1. 概述
1.1. 网络管理接口的作用
AUTOSAR网络管理接口(Nm)是AUTOSAR通信栈中的一个关键组件,它为不同总线类型的网络管理提供了统一的接口。网络管理接口的主要作用包括:
- 提供统一的API接口,屏蔽不同总线类型网络管理的差异
- 管理网络的启动和关闭过程
- 协调多个网络的关闭过程,确保系统有序地进入低功耗模式
- 支持网络唤醒功能,使系统能够从低功耗模式恢复
1.2. 网络管理接口的特点
网络管理接口具有以下特点:
- 通用性:支持多种总线类型,包括CAN、FlexRay、以太网等
- 可配置性:提供丰富的配置选项,满足不同应用场景的需求
- 协调功能:支持多网络协调关闭,确保系统有序进入低功耗模式
- 状态管理:提供完整的网络状态管理机制
- 可扩展性:支持通过CDD(Complex Device Driver)扩展支持其他网络管理协议
2. 网络管理接口架构
2.1. 架构概览
AUTOSAR网络管理接口位于通信管理(ComM)和总线特定网络管理模块(如CanNm、FrNm等)之间,作为一个通用接口层,提供统一的API。
2.2. 模块交互关系
网络管理接口与其他模块的交互关系如下:
-
向上接口:
- 向ComM提供网络状态通知和网络管理服务
- 接收来自ComM的网络请求和释放命令
-
向下接口:
- 调用总线特定网络管理模块(CanNm、FrNm、UdpNm、J1939Nm等)的API
- 接收来自总线特定网络管理模块的状态通知
-
横向接口:
- 支持通过CDD扩展其他网络管理协议(如OSEK NM)
网络管理接口通过这种分层架构,实现了对不同总线类型网络管理的统一抽象,简化了上层应用的开发。
3. 网络管理状态机
3.1. 状态定义
网络管理接口定义了一个状态机来管理网络状态。状态机包含以下状态:
网络管理状态机包含以下主要状态:
-
NM_STATE_BUS_SLEEP
:- 总线睡眠状态,网络处于低功耗模式
- 此状态下无通信活动
- 系统初始化后默认进入此状态
-
NM_STATE_PREPARE_BUS_SLEEP
:- 准备总线睡眠状态
- 等待进入睡眠模式的超时
- 可被网络请求或接收到的NM消息中断
-
NM_STATE_READY_SLEEP
:- 准备睡眠状态
- 节点已准备好进入睡眠,但等待其他节点也准备好
-
NM_STATE_NORMAL_OPERATION
:- 正常运行状态
- 网络完全激活,支持正常通信
-
NM_STATE_REPEAT_MESSAGE
:- 重复消息状态
- 节点重复发送NM消息,确保网络激活
-
NM_STATE_SYNCHRONIZE
:- 同步状态
- 用于网络同步过程
3.2. 状态转换
状态机的主要转换包括:
-
网络启动转换:
- 从
NM_STATE_BUS_SLEEP
到NM_STATE_REPEAT_MESSAGE
:通过Nm_NetworkRequest
或被动唤醒触发 - 从
NM_STATE_BUS_SLEEP
到NM_STATE_NORMAL_OPERATION
:通过Nm_PassiveStartUp
触发
- 从
-
网络关闭转换:
- 从
NM_STATE_NORMAL_OPERATION
到NM_STATE_READY_SLEEP
:通过Nm_NetworkRelease
且所有节点准备睡眠触发 - 从
NM_STATE_READY_SLEEP
到NM_STATE_PREPARE_BUS_SLEEP
:当所有节点准备睡眠时触发 - 从
NM_STATE_PREPARE_BUS_SLEEP
到NM_STATE_BUS_SLEEP
:超时后触发
- 从
-
中断关闭转换:
- 从
NM_STATE_PREPARE_BUS_SLEEP
到NM_STATE_REPEAT_MESSAGE
:通过Nm_NetworkRequest
或接收到NM消息触发 - 从
NM_STATE_READY_SLEEP
到NM_STATE_REPEAT_MESSAGE
:通过Nm_NetworkRequest
触发 - 从
NM_STATE_READY_SLEEP
到NM_STATE_NORMAL_OPERATION
:接收到无睡眠指示的NM消息触发
- 从
-
其他转换:
- 从
NM_STATE_NORMAL_OPERATION
到NM_STATE_REPEAT_MESSAGE
:通过Nm_RepeatMessageRequest
触发 - 从
NM_STATE_REPEAT_MESSAGE
到NM_STATE_NORMAL_OPERATION
:重复消息完成后触发 - 从
NM_STATE_SYNCHRONIZE
到NM_STATE_NORMAL_OPERATION
:同步完成后触发
- 从
4. 协调算法
4.1. 协调关闭流程
网络管理接口提供了协调关闭功能,用于协调多个网络的关闭过程,确保系统有序地进入低功耗模式。
协调关闭流程的主要步骤包括:
-
触发协调关闭:
- ComM请求网络释放,调用
Nm_NetworkRelease
- Nm检查是否为协调网络
- ComM请求网络释放,调用
-
计算全局协调时间:
- 全局协调时间 = 所有协调网络中最大的关闭时间
- 确保所有网络有足够的时间完成关闭过程
-
同步点处理:
- 如果配置为使用同步点,等待同步网络的同步点
- 同步点通过
Nm_SynchronizationPoint
回调函数通知 - 如果未配置使用同步点,立即开始协调关闭
-
并行关闭处理:
- 启动协调关闭定时器
- 并行处理多个网络的关闭流程
- 每个网络等待全局协调时间
- 所有网络同时进入准备睡眠状态
-
完成关闭:
- 所有网络进入总线睡眠状态
- 系统进入低功耗模式
4.2. 同步点机制
同步点机制用于确保协调关闭过程的同步性,特别是在处理非确定性总线时。同步点的主要特点包括:
-
同步网络配置:
- 每个协调集群只能配置一个网络作为同步网络
- 同步网络通过
NmSynchronizingNetwork
参数配置
-
同步点通知:
- 同步网络在适当的时间点调用
Nm_SynchronizationPoint
回调 - 回调函数通知协调器开始协调关闭过程
- 同步网络在适当的时间点调用
-
同步用例:
- 同步命令:所有网络同时收到关闭命令
- 同步启动:协调关闭过程同时启动
- 同步网络睡眠:所有网络同时进入睡眠状态
4.3. 协调关闭中断处理
协调关闭过程可能会被网络唤醒中断。中断处理的主要步骤包括:
-
检测唤醒:
- 检查是否发生网络唤醒事件
- 唤醒事件可能来自外部唤醒或协调唤醒
-
中断处理:
- 如果发生唤醒,中断协调关闭流程
- 重新激活所有协调网络
- 恢复正常通信
-
继续关闭:
- 如果未发生唤醒,继续协调关闭流程
- 完成网络关闭过程
5. 网络管理交互序列
5.1. 网络启动流程
网络启动流程的主要步骤包括:
-
启动请求:
- ComM调用
Nm_NetworkRequest
请求启动网络 - Nm接收请求并处理
- ComM调用
-
总线特定处理:
- Nm调用相应的总线特定网络管理模块(如
CanNm_NetworkRequest
) - 总线特定模块发送NM消息激活网络
- Nm调用相应的总线特定网络管理模块(如
-
状态通知:
- 总线特定模块进入重复消息状态
- 通过
Nm_NetworkMode
回调通知网络已激活 - Nm将通知转发给ComM(
ComM_Nm_NetworkMode
)
5.2. 网络关闭流程
网络关闭流程的主要步骤包括:
-
关闭请求:
- ComM调用
Nm_NetworkRelease
请求关闭网络 - Nm接收请求并处理
- ComM调用
-
总线特定处理:
- Nm调用相应的总线特定网络管理模块(如
CanNm_NetworkRelease
) - 总线特定模块设置睡眠指示位
- 发送带睡眠指示的NM消息
- Nm调用相应的总线特定网络管理模块(如
-
准备睡眠:
- 总线特定模块等待所有节点准备睡眠
- 通过
Nm_PrepareBusSleepMode
回调通知准备进入睡眠模式 - Nm将通知转发给ComM(
ComM_Nm_PrepareBusSleepMode
)
-
进入睡眠:
- 总线特定模块等待超时
- 通过
Nm_BusSleepMode
回调通知已进入睡眠模式 - Nm将通知转发给ComM(
ComM_Nm_BusSleepMode
)
5.3. 协调关闭流程
协调关闭流程的主要步骤包括:
-
协调关闭请求:
- ComM对多个通道调用
Nm_NetworkRelease
- Nm计算全局协调时间
- ComM对多个通道调用
-
并行处理:
- Nm对多个通道调用总线特定的NetworkRelease函数
- 总线特定模块等待全局协调时间
-
同步通知:
- 所有通道同时通过回调函数通知状态变化
- 包括
PrepareBusSleepMode
和BusSleepMode
通知 - Nm将通知转发给ComM
-
完成关闭:
- 所有网络同时进入总线睡眠状态
- 系统进入低功耗模式
6. 配置模型
6.1. 配置结构
网络管理接口的配置模型定义了如何配置网络管理功能。
配置模型的主要结构包括:
-
Nm
:- 顶层配置容器
- 包含
NmGeneral
、NmGlobalConfig
和多个NmChannelConfig
-
NmGeneralType
:- 通用配置参数
- 包括错误检测、版本信息API和主函数周期
-
NmGlobalConfigType
:- 全局配置参数
- 包括主函数周期时间、全局协调时间和协调同步支持
-
NmChannelConfigType
:- 通道配置参数
- 每个通道对应一个网络接口
- 可配置为不同的总线类型和功能
-
NmCoordinationSyncSupportType
:- 协调同步支持配置
- 用于配置网络协调功能
- 包括协调集群索引、活动协调器标志和同步网络标志
-
NmBusNmType
:- 总线类型枚举
- 支持CAN、FlexRay、UDP、J1939和本地NM
6.2. 配置参数
网络管理接口的主要配置参数包括:
-
通用参数:
NmDevErrorDetect
:是否启用开发错误检测NmVersionInfoApi
:是否支持版本信息APINmMainFunctionPeriod
:主函数周期时间
-
全局参数:
NmCycletimeMainFunction
:主函数调用周期NmGlobalCoordinatorTime
:全局协调时间NmCoordinationSynchronizationSupport
:是否支持协调同步
-
通道参数:
NmChannelId
:通道IDNmBusType
:总线类型(CAN、FlexRay、UDP、J1939或本地NM)NmNodeDetectionEnabled
:是否启用节点检测NmNodeIdEnabled
:是否启用节点IDNmRepeatMessageSupport
:是否支持重复消息NmUserDataSupport
:是否支持用户数据NmComUserDataSupport
:是否支持COM用户数据NmPduRxIndicationEnabled
:是否启用PDU接收指示NmRemoteSleepIndEnabled
:是否启用远程睡眠指示NmBusSynchronizationEnabled
:是否启用总线同步NmCoordinationSupport
:是否支持协调NmStateChangeIndEnabled
:是否启用状态变化指示NmCarWakeUpRxEnabled
:是否启用车辆唤醒接收
-
协调同步参数:
NmCoordClusterIndex
:协调集群索引NmActiveCoordinator
:是否为活动协调器NmSynchronizingNetwork
:是否为同步网络
7. 总结
7.1. 网络管理接口的优势
AUTOSAR网络管理接口具有以下优势:
- 统一接口:提供统一的API,简化上层应用开发
- 可配置性:丰富的配置选项,满足不同应用场景需求
- 协调功能:支持多网络协调关闭,确保系统有序进入低功耗模式
- 可扩展性:支持通过CDD扩展其他网络管理协议
- 标准化:符合AUTOSAR标准,确保不同供应商组件的互操作性
7.2. 应用场景
网络管理接口适用于以下应用场景:
-
多网络ECU:
- 管理多个网络接口的ECU
- 协调多个网络的关闭过程
-
低功耗管理:
- 需要精确控制网络进入和退出低功耗模式的系统
- 支持部分网络唤醒功能
-
网关应用:
- 连接多个网络的网关ECU
- 协调不同网络的状态
-
分布式系统:
- 多ECU分布式系统
- 需要协调多个ECU的网络状态