您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



文章 咨询 工具 课程  
会员   
   
LLM大模型与智能体开发实战
2026年1月17、24日 北京+线上
需求分析与管理
2026年1月22-23日 北京+线上
UAF与企业架构
2026年2月3-4日 北京+线上
     
   
 订阅
AUTOSAR CanNm 详解:CAN 网络管理模块的完整指南
 
作者:艾格北峰
  45   次浏览      3 次
 2025-12-30
 
编辑推荐:
本文从基础概念到高级接口,一步步拆解 CanNm 如何协调 CAN 总线 节点睡眠与唤醒,确保汽车 ECU 的低功耗与可靠性。希望对您的学习有所帮助。
本文来自于汽车电子工程圈 ,由火龙果软件Alice编辑、推荐。

本文从基础概念到高级接口,一步步拆解 CanNm 如何协调 CAN 总线 节点睡眠与唤醒,确保汽车 ECU 的低功耗与可靠性。无论你是嵌入式新人还是老鸟,都能从中获益!

为什么读这篇? 在分布式汽车网络中,CanNm 是 BSW 栈的核心“守护者”,它像一个智能“调度员”,防止节点“各自为政”导致的总线混乱或功耗爆炸。读完,你能轻松配置、调试,甚至优化你的 Autosar 项目。文章结构清晰,配图详解,关键词 已 粗体 标注。走起!

范围(Scope)

本文档旨在描述 CanNm BSW 模块 的功能。本文档针对 RTA-CAR 在 AUTOSAR 版本 19-11 中的 CanNm 实现。具体参考 AUTOSAR CP R19-11 中的“CAN 网络管理规范”(AUTOSAR_SWS_CANNetworkManagement.pdf)。虽然本文档引用了 AUTOSAR 标准,但它不能替代标准,建议读者结合标准阅读本应用笔记,以获得全面理解。

什么是 CanNm?(What is CanNm)

CanNm 是 CAN 栈 中的一个 BSW 模块,负责管理 CAN 网络(Cluster) 中各 ECU 节点 的状态。它的核心任务是协调网络从 正常操作 到 总线睡眠模式 的过渡,确保所有节点同步,避免不必要的功耗浪费。除了基本功能,它还支持可配置特性,例如检测网络中所有活跃节点,或确认其他节点是否已准备好进入睡眠模式。CanNm 作为 网络管理接口(NmIf) 和 CAN 接口(CanIf) 之间的适配层,实现硬件无关的协议,支持服务如节点发现和睡眠协调。在实际应用中,这有助于汽车 ECU 实现低功耗优化,尤其在分布式网络中防止“孤岛”状态。

缩写和术语(Acronyms and Abbreviations)

CanIf:CAN 接口(CAN Interface),处理 CAN 总线的底层传输和接收。

CanNm:CAN 网络管理(CAN Network Management),本模块的简称。

CBV:控制位向量(Control Bit Vector),NM PDU 中的位字段,用于指示控制信号。

NM:网络管理(Network Management),泛指网络状态协调协议。

PNC:部分网络集群(Partial Network Cluster),网络中部分节点的子集。

PNI:部分网络信息(Partial Network Information),用于部分网络的标识信息。

这些术语在 AUTOSAR 规范中频繁出现,理解它们有助于快速解析文档。

协调算法(Coordination Algorithm)

CanNm 的算法依赖于周期性 NM PDU,这些 PDU 通过广播传输给网络上所有 ECU。接收到 NM PDU 表示发送节点希望保持集群活跃(即“唤醒”总线)。如果一个节点准备进入睡眠,它会切换到 准备总线睡眠模式,停止发送 NM PDU,但会监听其他节点的 PDU。如果其他节点仍在发送,接收节点会推迟睡眠过渡。只有当 NM 超时定时器 过期(无 PDU 接收)时,所有节点才会同步进入 总线睡眠模式。如果任何节点需要总线通信,它可以通过重新发送 NM PDU 来唤醒整个集群。这种机制确保了网络的 一致性和可靠性,防止单个节点过早或过晚睡眠导致总线不一致。在配置时,所有节点必须使用相同的超时参数,以实现精确同步。

模式(Modes)

CanNm 通过状态机实现三种主要模式:网络模式、准备总线睡眠模式 和 总线睡眠模式。状态机处理定时器、接收/发送事件和网络请求,确保平滑过渡。网络模式下有三个子状态,用于精细控制活跃期。

网络模式(Network Mode)

从 总线睡眠 或 准备总线睡眠 进入时,默认进入 重复消息状态。进入网络模式后,CanNm 通过回调 Nm_NetworkMode 通知上层模块当前模式变化。

在此模式下:

子状态详解:

重复消息状态(Repeat Message State):适用于非被动模式节点,确保从睡眠模式过渡到网络模式时,其他节点能立即感知到该节点的活跃。进入该状态后,CanNm 开始发送 NM PDU(除非通信状态禁止),并保持该状态持续 CanNmRepeatMessageTime 时间。超时后,如果网络状态为“请求”,切换到 正常操作状态;否则切换到 准备睡眠状态。此状态保证节点至少保持最小活跃时间,避免瞬时切换导致的检测遗漏。

正常操作状态(Normal Operation State):确保节点在网络请求期间保持集群活跃。从 准备睡眠状态 进入时,立即启动 NM PDU 发送。如果在此状态下网络被释放(通过 CanNm_NetworkRelease),则切换到 准备睡眠状态。发送逻辑基于周期定时器,确保持续“心跳”。

准备睡眠状态(Ready Sleep State):节点停止发送 NM PDU,但继续监听,以等待其他节点安静。从 重复消息状态 或 正常操作状态 进入时,停止发送。NM 超时定时器 过期后,切换到 准备总线睡眠模式。如果在此状态下收到网络请求,立即切换到 正常操作状态。此状态充当“缓冲区”,防止仓促睡眠。

接收 NM PDU(通过 CanNm_RxIndication 调用)时,如果 PDU 发送能力启用,重启 NM 超时定时器,以延长活跃期。

NM PDU 发送完成(CanNm_TxConfirmation 返回 E_OK)时,也重启 NM 超时定时器。

如果 CanNmImmediateTxConfEnabled 配置为 true,则不等待实际确认,直接假设发送成功,适用于对延迟敏感的系统。

准备总线睡眠模式(Prepare Bus-Sleep Mode)

目的是为所有节点提供时间停止网络活动(如清空发送队列),避免进入睡眠时丢失数据。进入该模式后,CanNm 通过回调 Nm_PrepareBusSleepMode 通知上层。如果 CanNmStayInPbsEnabled 为 false,则保持该状态 CanNmWaitBusSleepTime 时间后自动切换到 总线睡眠模式;如果为 true,则需外部事件(如网络请求)干预才离开。接收到 NM PDU 或网络请求时,立即返回 网络模式。队列中的消息会在此期间发送完毕,确保缓冲区清空。

总线睡眠模式(Bus-Sleep Mode)

主要用于降低节点功耗,当无消息交换时,将通信控制器切换到睡眠模式,并激活相应的唤醒机制。如果 CanNmStayInPbsEnabled 为 false,且所有节点在集群中的 CanNmTimeoutTime + CanNmWaitBusSleepTime 参数相同,则节点会大致同时进入睡眠(参数必须集群统一)。进入该模式(非初始化默认)时,通过回调 Nm_BusSleepMode 通知上层。接收到 NM PDU(通过 CanNm_RxIndication)时,调用 Nm_NetworkStartIndication 通知上层,但 CanNm 不直接执行唤醒,由 Nm 模块根据 ECU 整体状态决定。这允许唤醒决策考虑更多因素,如电源状态。成功接收 PDU 时,如果在睡眠中,会向 DET 报告错误 CANNM_E_NET_START_IND。网络请求时,直接切换到 网络模式。

网络状态(Network States):这是一个与主状态机并行的二元状态(“请求”或“释放”),表示软件组件是否需要总线通信。“请求”意味着 ECU 有数据要发;“释放”意味着可进入低功耗,但若其他 ECU 请求,总线仍活跃。CanNm_NetworkRequest 将状态设为“请求”,CanNm_NetworkRelease 设为“释放”。即使释放,节点仍可能因集群请求而保持活跃。

初始化(Initialisation)

CanNm_Init 函数成功执行后,模块初始化为 总线睡眠模式。初始化顺序至关重要:必须在 CanIf 初始化后调用,并在其他网络管理服务之前执行。初始网络状态设为“释放”。函数通过传入的配置指针选择特定配置集。如果 CanNmPassiveModeEnabled 为 true,则无需配置消息周期参数,因为被动节点不发送 NM PDU。初始化过程中,CanNm 将用户数据字节设为 0xFF(默认无效值),控制位向量(CBV) 设为 0x00(无控制位)。这确保模块从干净状态启动,避免残留数据影响行为。

定时参数(Timing Parameters)

这些参数定义了 CanNm 的核心定时行为,必须在整个 NM 集群中保持一致,以确保同步:

CanNmTimeoutTime:NM 超时时间,无 NM PDU 接收时触发的睡眠阈值。通常设为消息周期的 1.5-2 倍。

CanNmRepeatMessageTime:重复消息时间,重复消息状态 的持续时长,确保醒来可见性。

CanNmRemoteSleepIndTime:远程睡眠指示时间,用于判断所有节点是否准备睡眠的等待期。

参数不一致可能导致节点不同步,造成总线错误或功耗异常。

NM PDU 结构(NM Pdu structure)

字节布局与分配(Byte layout and assignment)

NM PDU 默认长度为 8 字节,布局如下:

字节 0:源节点标识符(Source Node Identifier),标识发送 ECU。

字节 1:控制位向量(CBV),包含控制标志。

字节 2-7:用户数据,可配置扩展字段。

源节点标识符位置通过 CanNmPduNidPosition 配置(允许值:字节 0、字节 1 或 off)。设为 off 时,不分配该字段,多出一字节用于用户数据。CBV 位置通过 CanNmPduCbvPosition 配置(字节 0、字节 1 或 off),off 时释放空间给用户数据。PDU 整体长度由 ECUC 模块的 PduLength 参数定义,支持灵活调整以适应不同网络需求。

控制位向量(CBV)(Control bit vector (Cbv))

CBV 是一个 8 位字段,定义如下:

位 0 - 重复消息请求(Repeat message request):0 表示不请求重复消息状态,1 表示请求(用于强制进入重复消息状态)。

位 1:保留。

位 2:保留。

位 3 - NM 协调器睡眠就绪位(NM Coordinator Sleep Ready Bit):0 表示主协调器不请求同步关机,1 表示请求(用于多协调器场景)。

位 4 - 主动唤醒位(Active Wakeup Bit):0 表示被动唤醒(外部事件),1 表示主动唤醒(由网络请求触发)。

位 5:保留。

位 6 - 部分网络信息位(PNI,Partial Network Information Bit):0 表示无部分网络请求信息,1 表示包含 PNI(用于部分网络支持)。

位 7:保留。

CanNm 模块使用 CanNmNodeId 参数设置源节点标识符(除非位置为 off)。如果从 总线睡眠 或 准备总线睡眠 切换到 网络模式(由 CanNm_NetworkRequest 触发),且 CanNmActiveWakeupBitEnabled 为 true,则在 CBV 中设置位 4 为 1。离开网络模式时,清零该位。这确保了唤醒来源的准确追踪。

发送(Transmission)

被动模式(Passive mode)

发送能力通过 CanNmPassiveModeEnabled 配置:true 时,CanNm 不进行周期 NM PDU 发送(仅接收);false 时,支持完整周期发送模式。被动模式适用于低功耗 ECU,但必须在整个 ECU 的所有网络中统一启用或禁用,以避免不一致。

周期发送与总线负载降低(Periodic transmission & bus load reduction)

周期发送模式在 重复消息状态 和 正常操作状态 下激活,CanNm 根据定时器定期调用 CanIf_Transmit 发送 NM PDU,以维持网络活跃。如果启用总线负载降低(CanNmBusLoadReductionEnabled = true),则仅在 正常操作状态 下使用周期发送;在 重复消息状态 下禁用,以优先确保可见性。禁用负载降低时,两状态均使用标准周期发送。该机制通过算法优化 PDU 频率,减少总线占用。

发送定时(Transmission timing)

立即传输确认通过 CanNmImmediateTxConfEnabled 配置:true 时,不依赖 CanIf 的实际确认,直接重启定时器,适合实时系统。如果进入 重复消息状态 不是由 CanNm_NetworkRequest 触发,或 CanNmImmediateNmTransmissions = 0,则发送延迟 CanNmMsgCycleOffset 时间后开始(节点特定偏移,防同时爆发)。如果由网络请求从睡眠进入,且 CanNmImmediateNmTransmissions > 0,则使用 CanNmImmediateNmCycleTime 作为初始周期,第一 PDU 尽快发送,后续重载定时器(不应用偏移)。进入 正常操作状态(从 准备睡眠状态)时,立即启动发送。定时器过期时调用 CanIf_Transmit;若返回 E_NOT_OK,则按错误处理流程执行。

接收(Reception)

NM PDU 成功接收后,CanIf 模块调用回调 CanNm_RxIndication,CanNm 解析 PDU,更新内部状态(如重启定时器、检查 CBV),并可能触发模式切换或上层通知。该回调是接收路径的核心入口,确保及时响应网络事件。

总线负载降低机制(Bus Load Reduction Mechanism)

NM PDU 发送周期通常由集群统一的 CanNmMsgCycleTime 决定。即使使用节点特定的 CanNmMsgCycleOffset 防止突发,也需额外机制独立降低负载:

接收 NM PDU 时,重载消息周期定时器为节点特定的 CanNmMsgReducedTime(应 > ½ CanNmMsgCycleTime,< CanNmMsgCycleTime),延长间隔。

发送 NM PDU 时,重载为集群的 CanNmMsgCycleTime。

行为结果:CanNmMsgReducedTime 最小的两个节点轮流发送;若一节点停止,下一个最小值节点接替;单节点活跃时,每 CanNmMsgCycleTime 一 PDU。最大负载限制为每周期两条 PDU。该机制通过 CanNmBusLoadReductionEnabled 配置。从 总线睡眠、准备总线睡眠、正常操作 或 准备睡眠 进入 重复消息状态 时,禁用降低;从 重复消息状态 或 准备睡眠状态 进入 正常操作状态 时,若启用,则激活降低。

远程睡眠指示(Remote Sleep Indication)

当节点检测到网络上其他所有节点均进入 准备睡眠状态 时,执行远程睡眠指示。该功能通过 CanNmRemoteSleepIndEnabled 配置。如果无 NM PDU 接收超过 CanNmRemoteSleepIndTime,CanNm 调用回调 Nm_RemoteSleepIndication,通知 Nm 模块“所有节点准备睡眠”。随后若接收到 NM PDU,调用 Nm_RemoteSleepCancelation 取消指示。从 正常操作状态 或 准备睡眠状态 切换到 重复消息状态 时,也触发取消。服务 CanNm_CheckRemoteSleepIndication 在 总线睡眠模式、准备总线睡眠模式 或 重复消息状态 下不执行,返回 E_NOT_OK。该指示确保协调睡眠,避免单节点误判。

用户数据(User Data)

用户数据支持通过 CanNmUserDataEnabled 配置为 true 启用。调用 CanNm_SetUserData 设置下一 NM PDU 的用户数据字节;CanNm_GetUserData 从最近接收的 PDU 中提取用户数据。在 重复消息状态 下,用户数据始终发送;在 正常操作状态 下,取决于是否启用总线负载降低(降低时可能省略);在 准备睡眠状态 下,不发送。如果 CanNmComUserDataSupport 为 true,则 CanNm_SetUserData 不可用,应使用 Com 模块的相应函数替代。用户数据提供扩展空间,用于自定义网络服务,如节点状态共享。

被动模式(Passive Mode)

被动模式下,节点仅接收 NM PDU,不发送。配置通过 CanNmPassiveModeEnabled 实现,必须在 ECU 的所有网络中统一应用,以确保一致性。该模式简化实现,适用于仅需监听的从节点,但会限制其唤醒能力。

NM PDU 接收指示(Nm Pdu Rx Indication)

接收 NM PDU 后,CanNm_RxIndication 处理完可能调用 Nm_PduRxIndication 回调(通过 CanNmPduRxIndicationEnabled 配置)。此可选通知允许上层模块(如 Nm)进一步处理 PDU 内容,例如解析用户数据或 CBV 变化。

状态变化通知(State Change Notification)

所有 CanNm 状态变化(如模式切换)通过 Nm_StateChangeNotification 回调通知上层(CanNmStateChangeIndEnabled = true 时启用)。这提供实时状态反馈,便于上层应用监控和响应,例如调整 ECU 功耗策略。

通信控制(Communication Control)

通信控制通过 CanNmComControlEnabled 静态配置,支持 ISO 14229(UDS)服务。调用 CanNm_DisableCommunication 时,禁用 NM PDU 发送(停止消息周期定时器和 NM 超时定时器),并暂停远程睡眠指示。该服务仅在 网络模式 下有效,否则返回 E_NOT_OK。CanNm_EnableCommunication 恢复发送,仅当已禁用且在 网络模式 下有效。注意:禁用时,CanNm_RequestBusSynchronization 返回 E_NOT_OK。该机制用于诊断或安全场景下的临时禁止通信。

协调器同步支持(Coordinator Synchronization Support)

在多协调器网络中,CBV 的位 3(NM Coordinator Sleep Ready Bit)用于同步关机:主协调器设为 1 表示请求所有协调器启动同步关机。该位通过 CanNm_SetSleepReadyBit 服务设置(需 CanNmCoordinatorSyncSupport = true)。接收节点据此调整睡眠行为,确保集群级同步。

发送错误处理(Transmission Error Handling)

CanNm 根据配置评估 CanNm_TxConfirmation 结果:E_NOT_OK 或指定超时内无确认时,通知上层(如通过 Nm_TxTimeoutException)。如果 CanNmPassiveModeEnabled 或 CanNmImmediateTxConfEnabled 为 true,则跳过错误处理(无实际发送或不依赖确认)。若 CanNmGlobalPnSupport = true 且 CanNmMsgTimeoutTime 定义,发送时启动 NM 消息 Tx 超时定时器;确认时停止。若 CanIf_TxConfirmation 返回 E_NOT_OK 或定时器过期,调用 Nm_TxTimeoutException 通知 CanSM 恢复部分网络。该处理确保发送可靠性,报告 DET 错误如 CANNM_E_NET_START_IND(睡眠中意外接收)。

序列图(Sequence Diagrams)

发送(Transmission)

图示发送流程:从定时器触发到 CanIf_Transmit 调用、确认返回及定时器重载,包括错误分支。

接收(Reception)

图示接收路径:CanIf 通知 CanNm_RxIndication,解析 PDU、更新状态及上层回调。

这些序列图有助于可视化交互,调试时可对照实现验证。

函数与接口(Functions and Interfaces)

函数(Functions)

CanNm 模块提供了丰富的函数接口,用于初始化、状态控制、数据处理和传输管理。这些函数大多是异步或同步的 API,支持重入性以适应多任务环境。以下按功能分组描述其核心行为和使用注意事项。

首先是初始化和反初始化函数。CanNm_Init 用于初始化模块,必须在 CanIf 初始化后调用,它接受一个配置结构指针(const CanNm_ConfigType* cannmConfigPtr),返回 void,非重入,同步执行,服务 ID 为 0x00,定义在 CanNm.h 中。该函数将模块置于总线睡眠模式,并设置默认用户数据为 0xFF 和 CBV 为 0x00。相应地,CanNm_DeInit 用于反初始化,确保所有网络处于睡眠模式前调用,无参数,返回 void,非重入,同步,服务 ID 0x10,也定义在 CanNm.h 中。

网络请求和释放函数控制 ECU 的通信需求。CanNm_NetworkRequest 请求网络,将状态设为“requested”,接受通道句柄(NetworkHandleType nmChannelHandle),返回 Std_ReturnType(E_OK 或 E_NOT_OK),重入(不同通道),异步,服务 ID 0x02。CanNm_NetworkRelease 释放网络,参数和返回类似,服务 ID 0x03。被动启动函数 CanNm_PassiveStartup 触发从睡眠到网络模式的过渡,仅参数通道句柄,返回 Std_ReturnType,重入,异步,服务 ID 0x01。

通信控制函数支持诊断服务。CanNm_DisableCommunication 禁用 NM PDU 发送(仅网络模式有效),参数通道句柄,返回 Std_ReturnType,重入,异步,服务 ID 0x0c。CanNm_EnableCommunication 启用发送(仅禁用时有效),参数和返回相同,服务 ID 0x0d。

用户数据函数处理扩展字段。CanNm_SetUserData 设置下一 PDU 的用户数据,参数包括通道句柄和数据指针(const uint8* nmUserDataPtr),返回 Std_ReturnType,重入,同步,服务 ID 0x04,仅当用户数据启用且非被动模式时可用。CanNm_GetUserData 从最近 PDU 获取数据,参数通道句柄和输出指针(uint8* nmUserDataPtr),返回 Std_ReturnType,重入,同步,服务 ID 0x05。

节点标识符函数用于标识管理。CanNm_GetNodeIdentifier 从最近 PDU 获取源节点 ID,参数通道句柄和输出指针,返回 Std_ReturnType,重入,同步,服务 ID 0x06,仅节点 ID 启用时可用。CanNm_GetLocalNodeIdentifier 获取本地节点 ID,参数类似,返回 Std_ReturnType,重入,同步,服务 ID 0x07。

传输相关函数包括 CanNm_Transmit,请求 PDU 发送,参数 PDU ID(PduIdType TxPduId)和数据指针(const PduInfoType* PduInfoPtr),返回 Std_ReturnType,重入(不同 PDU),同步,服务 ID 0x49。CanNm_RepeatMessageRequest 设置 CBV 中的重复消息位,参数通道句柄,返回 Std_ReturnType,重入,同步,服务 ID 0x08。CanNm_GetPduData 获取整个最近 PDU 数据,参数通道句柄和输出指针,返回 Std_ReturnType,重入,同步,服务 ID 0x0A,仅节点检测、用户数据或节点 ID 启用时可用。

状态查询函数如 CanNm_GetState 返回当前状态和模式,参数通道句柄、状态指针(Nm_StateType* nmStatePtr)和模式指针(Nm_ModeType* nmModePtr),返回 Std_ReturnType,重入,同步,服务 ID 0x0B。CanNm_GetVersionInfo 获取模块版本,参数输出指针(Std_VersionInfoType* versioninfo),返回 void,重入,同步,服务 ID 0xf1。

高级函数包括 CanNm_RequestBusSynchronization 请求总线同步,仅非被动模式可用,参数通道句柄,返回 Std_ReturnType,非重入,同步,服务 ID 0xc0,在睡眠模式下返回 E_NOT_OK。CanNm_CheckRemoteSleepIndication 检查远程睡眠指示,参数通道句柄和输出布尔指针(boolean* nmRemoteSleepIndPtr),返回 Std_ReturnType,重入,同步,服务 ID 0xd0,仅远程指示启用时可用。CanNm_SetSleepReadyBit 设置 CBV 中的睡眠就绪位,参数通道句柄和布尔值(boolean nmSleepReadyBit),返回 Std_ReturnType,重入,同步,服务 ID 0x17,仅协调器同步支持时可用。

回调函数处理下层事件。CanNm_TxConfirmation 确认 PDU 传输结果,参数 PDU ID 和结果(Std_ReturnType result),返回 void,重入(不同 PDU),同步,服务 ID 0x40,仅非被动且非立即确认时可用。CanNm_RxIndication 处理接收 PDU,参数 PDU ID 和数据指针,返回 void,重入(不同 PDU),同步,服务 ID 0x42,由 CanIf 调用。CanNm_ConfirmPnAvailablity 启用 PN 过滤,参数通道句柄,返回 void,重入,同步,服务 ID 0x16,仅全局 PN 支持时可用。CanNm_TriggerTransmit 触发传输数据填充,参数 PDU ID 和 InOut 数据指针,返回 Std_ReturnType,重入(不同 PDU),同步,服务 ID 0x41,若 Com 用户数据支持,则从 PduR 收集数据。

调度函数 CanNm_MainFunction 是模块主循环,无参数,返回 void,服务 ID 0x13,定义在 SchM_CanNm.h 中,未初始化时直接返回。这些函数共同构成了 CanNm 的运行时接口,确保模块与 AUTOSAR 生态的无缝集成。

接口(Interfaces)

CanNm 模块的接口分为 必选接口 和 可选接口,定义了与 AUTOSAR 其他 BSW 模块(如 Nm、CanIf、PduR、Det 和 CanSM)的交互方式。这些接口支持核心网络管理和扩展特性,通过 ARXML 配置启用,确保线程安全和异常处理。

必选接口聚焦于基本状态协调和错误报告,主要通过回调形式通知上层 Nm 模块。Det_ReportRuntimeError 用于报告运行时异常,如定时器溢出或状态冲突,参数包括模块 ID(uint8 ModuleId,固定为 CANNM_MODULE_ID)、实例 ID(uint8 InstanceId,通常 0)、错误 ID(uint8 ErrorId,如 CANNM_E_NET_START_IND)和错误数据(uint8 ErrorData),返回 void,重入,同步,由 DET 定义在 Det.h 中,支持开发日志记录。Nm_BusSleepMode 通知进入总线睡眠模式,参数通道句柄(NetworkHandleType nmChannelHandle),返回 void,重入,同步,定义在 Nm.h 中,确保上层电源管理同步。Nm_NetworkMode 通知进入网络模式,参数通道句柄,返回 void,重入,同步,用于恢复应用通信。Nm_NetworkStartIndication 在睡眠中指示网络启动,参数通道句柄,返回 void,重入,同步,由上层决定唤醒。Nm_PrepareBusSleepMode 通知准备睡眠,参数通道句柄,返回 void,重入,同步,提供缓冲时间清空队列。这些接口是 CanNm 运行的核心,确保网络一致性和低功耗协调。

可选接口扩展高级功能,如部分网络支持和诊断集成,通过配置参数启用。CanIf_Transmit 请求 PDU 发送,参数 PDU ID(PduIdType TxPduId)和数据指针(const PduInfoType* PduInfoPtr),返回 Std_ReturnType,重入(不同 PDU),同步,服务 ID 0x00,定义在 CanIf.h 中,用于实际 NM PDU 传输。CanSM_TxTimeoutException 通知部分网络 Tx 超时,参数通道句柄,返回 void,重入,同步,定义在 CanSM.h 中,触发恢复机制。Det_ReportError 报告开发错误,参数模块 ID、实例 ID 和错误 ID,返回 void,重入,同步,定义在 Det.h 中,用于配置验证。Nm_CarWakeUpIndication 指示 CAR 唤醒请求,参数通道句柄,返回 void,重入,同步,定义在 Nm.h 中,集成车辆级事件。Nm_CoordReadyToSleepCancellation 取消协调器睡眠指示,参数通道句柄,返回 void,重入,同步,用于多协调器动态调整。Nm_CoordReadyToSleepIndication 设置协调器睡眠指示,参数通道句柄,返回 void,重入,同步,确保集群关机一致。Nm_PduRxIndication 通知接收 NM 消息,参数通道句柄和 PDU 数据(const PduInfoType* PduInfoPtr),返回 void,重入,同步,用于高级诊断。Nm_RemoteSleepCancellation 取消远程睡眠,参数通道句柄,返回 void,重入,同步,防止误关机。Nm_RemoteSleepIndication 通知所有节点准备睡眠,参数通道句柄,返回 void,重入,同步,协调全局关机。Nm_RepeatMessageIndication 指示重复消息请求,参数通道句柄,返回 void,重入,同步,处理 CBV 位 0。Nm_StateChangeNotification 通知状态变化,参数通道句柄、状态(Nm_StateType nmState)和模式(Nm_ModeType nmMode),返回 void,重入,同步,便于 BusNm 同步。Nm_TxTimeoutException 指示发送失败,参数通道句柄,返回 void,重入,同步,用于异常恢复。PduR_CanNmRxIndication 处理 PDU 接收,参数 PDU ID(PduIdType RxPduId)、长度(PduLengthType RxPduLength)和数据指针,返回 Std_ReturnType,重入,同步,定义在 PduR.h 中,支持路由集成。PduR_CanNmTriggerTransmit 触发数据填充,参数 PDU ID 和 InOut 数据指针,返回 Std_ReturnType,重入,同步,用于动态注入。PduR_CanNmTxConfirmation 确认传输结果,参数 PDU ID 和结果,返回 void,重入,同步,更新定时器。这些接口增强了 CanNm 的灵活性,在复杂 AUTOSAR 系统中避免总线洪泛和状态不同步问题。

结语:CanNm 是 AUTOSAR 中低功耗管理的“隐形英雄”,掌握它,你的项目将更高效、更可靠!

   
45   次浏览       3 次
相关文章

中央计算的软件定义汽车架构设计
汽车电子控制系统中的软件开发过程
一文读懂汽车芯片-有线通信芯片
OTA在汽车上有哪些难点痛点?
相关文档

汽车设计-汽车的整体结构及动力系统
自动驾驶汽车软件计算框架
SysML在汽车领域的应用实践
电子电气架构-大陆汽车系统架构平台
相关课程

AutoSAR原理与实践
功能安全管理体系(基于ISO26262)
MBSE(基于模型的系统工程)
基于SOA的汽车电子架构设计与开发

最新活动计划
企业架构助力业务与IT协作 1-17[在线]
LLM大模型与智能体开发实战 1-17[在线]
AI大模型编写高质量代码 1-14[在线]
AI原生应用的微服务架构 1-22[在线]
需求分析与管理 1-22[北京]
视觉大模型及其应用 1-30[在线]
UAF与企业架构 2-3[北京]
 
 
最新文章
ASPICE中配置管理是个什么东西?
了解软件安全分析与组件鉴定
掌握Autosar ComStack的精髓!
基于整车功能的正向诊断需求开发
搞定Autosar SWC开发秘籍,码住!
汽车OTA更新的系统性威胁评估
最新课程
基于SOA的汽车电子架构设计与开发
Auto SAR原理与实践
AUTOSAR架构与实践(从CP到 AP )
AUTOSAR架构建模方法与工具(EA)
ASPICE4.0核心开发过程指南
MBSE(基于模型的系统工程)
更多...   
成功案例
某知名车企 AUTOSAR应用设计与开发
吉利汽车 MBSE工程体系汽车建模及评估
某整车企业 《功能需求分析与设计》
富奥汽车零部件 建模工具EA
零跑汽车 建模工具EA及服务
北汽福田 建模工具EA
小鹏汽车 建模工具EA
更多...