跳转至

AUTOSAR CAN NM

1. 简介和功能概述

本文档描述了AUTOSAR CAN网络管理 (CanNm) 的概念、核心功能、可配置特性、接口和配置问题。

AUTOSAR CAN网络管理是一个独立于硬件的协议,只能在CAN上使用(有关限制,请参阅章节4.1)。其主要目的是协调网络正常运行和总线睡眠模式之间的转换。

除了核心功能外,还提供了可配置的功能,例如:实现一个服务来检测所有当前节点或检测所有其他节点是否准备好休眠。

CAN网络管理 (CanNm) 功能提供网络管理接口 (NmIf) 和 CAN接口 (CanIf) 模块之间的适配。有关AUTOSAR网络管理功能的一般理解,请参阅[7]。

2. 缩略语

2.1. 首字母缩写

下面的词汇表包括与CanNm模块相关的首字母缩略词和缩写词,它们未包含在AUTOSAR词汇表中。

CanIf

CAN接口(CAN Interface)的缩写

CanNm

CAN网络管理(CAN Network Management)的缩写

CBV

控制位向量(Control Bit Vector)

CWU

整车唤醒(Car Wakeup)

ERA

外部请求数组(External Request Array)

EIRA

外部和内部请求数组(External and Internal Request Array)

NM

网络管理(Network Management)

PNC

部分网络集群(Partial Network Cluster)

PNI

部分网络信息(Partial Network Information)

PNL

部分网络学习(Partial Network Learning)

SNI

源节点标识符(Source Node Identifier)

2.2. 术语

NM-Timeout Timer

NM超时计时器

PDU传输能力被禁用(PDU transmission ability is disabled)

这意味着网络管理PDU传输已被服务CanNm_DisableCommunication禁用。

重复报文请求位指示(Repeat Message Request Bit Indication)

CanNm_RxIndication在收到的网络管理PDU的控制位向量中找到RptMsgRequest集。

PN过滤遮罩(PN filter mask)

由配置容器定义的过滤器掩码字节向量CanNmPnFilterMaskByte。

顶级PNC协调员(Top-level PNC coordinator)

顶级PNC协调器是一个ECU,它充当网络中的PNC网关,并在所有分配的通道上主动协调处理至少一个PNC。如果启用了同步PNC关闭,如果网络中没有其他ECU请求它们,顶级PNC协调器将为这些PNC触发关闭。

中间PNC协调器(Intermediate PNC coordinator)

中间PNC协调器是一个ECU,它充当网络中的PNC网关,并在至少一个分配的通道上将至少一个PNC处理为被动协调。如果启用了同步PNC关闭,它会将收到的这些PNC的关闭请求转发到相应的主动协调通道,并相应地启动它们的关闭。

PNC叶节点(PNC leaf node)

PNC叶节点是一个ECU,在网络中根本不充当PNC协调器。它像通常的NM消息一样处理PN关闭消息。

PN关闭消息(PN shutdown message)

顶级PNC协调器传输PN关闭消息以指示跨PN拓扑的同步PNC关闭。PN关闭消息是作为NM消息,它在控制位向量中具有PNSR位,并且所有被指示用于同步关闭的PNC都设置为1

3. 相关文档

3.1. 输入文件

[1] General Requirements on Basic Software Modules

AUTOSAR_SRS_BSWGeneral.pdf

[2] Specification of the AUTOSAR Network Management Protocol

AUTOSAR_PRS_NetworkManagementProtocol.pdf

[3] Requirements on Network Management

AUTOSAR_RS_NetworkManagement.pdf

[4] Specification of CAN Interface

AUTOSAR_SWS_CANInterface.pdf

[5] Specification of Communication Stack Types

AUTOSAR_SWS_CommunicationStackTypes.pdf

[6] Specification of ECU Configuration

AUTOSAR_TPS_ECUConfiguration.pdf

[7] Specification of Generic Network Management Interface

AUTOSAR_SWS_NetworkManagementInterface.pdf

[8] Specification of Communication Manager

AUTOSAR_SWS_ComManager.pdf

[9] Specification of Standard Types

AUTOSAR_SWS_StandardTypes.pdf

[10] General Specification of Basic Software Modules

AUTOSAR_SWS_BSWGeneral.pdf

[11] Specification of SystemTemplate

AUTOSAR_TPS_SystemTemplate

3.2. 相关规范

AUTOSAR 提供了基础软件模块的通用规范 [10] (General Specification of Basic Software Modules),它也适用于CAN网络管理。

因此,规范基础软件模块的通用规范应被视为CAN网络管理的附加和必需规范。

4. 约束和假设

4.1. 限制

  1. CanNm的一个通道只关联一个网络中的一个网络管理集群(network management cluster)。
  2. 一个网络管理集群的一个节点只能有一个CanNm通道。
  3. CanNm的一个通道只关联同一个ECU内的一个网络。
  4. CanNm仅适用于CAN系统。

图4-1展示了一个示例ECU中的AUTOSAR网络管理堆栈,该示例ECU至少包含一个CanNm集群。

4.2. 适用于汽车领域

CanNm模块可以在上述限制下应用于任何汽车领域。

5. 对其他模块的依赖

CAN网络管理(CanNm)主要使用CAN接口(CanIf[4])的服务,并为通用网络管理接口(NmIf[7])提供服务。

6. 功能规格

6.1. 协调算法

AUTOSAR CanNm基于分散的直接网络管理策略,这意味着每个网络节点仅根据在通信系统内接收或传输的网络管理PDU执行自给自足的活动。

6.1.1. 概念

AUTOSAR CanNm算法基于周期性的网络管理PDU,集群中的所有节点通过广播传输接收这些PDU。网络管理PDU的接收表明传输节点希望保持网络管理集群处于唤醒状态。如果任何节点准备好进入总线睡眠(Bus-Sleep)模式,它就会停止传输网络管理PDU,但只要收到来自其他节点的网络管理PDU,节点就需推迟转换到总线睡眠模式。最后,如果由于不再接收到网络管理PDU而导致专用计时器超时,则每个节点都会启动到总线睡眠模式的转换。

如果网络管理集群中的任何节点需要总线通信,它可以通过传输网管PDU将网络管理集群从总线睡眠模式唤醒。有关唤醒过程本身的更多详细信息,请参阅通讯管理器规格[8]。

AUTOSAR CanNm算法的主要概念可以通过以下两个关键要求来定义:CanNm集群中的每个网络节点只要需要总线通信,就应该定期传输网络管理PDU;否则它将无需传输网络管理PDU。

如果CanNmStayInPbsEnabled被禁用,并且CanNm集群中的总线通信被释放,并且在可配置的(CanNmTimeoutTime + CanNmWaitBusSleepTime)时间里,总线上没有任何网络管理PDU,则需执行转换到总线睡眠模式。

6.1.2. 状态机

AUTOSAR CanNm算法的整体状态机可以定义如下:

AUTOSAR CanNm状态机应包含从网络管理集群中单个节点的角度来看的AUTOSAR CanNm算法所需的状态、转换和触发器。

注意:

状态转换必须在下一个主函数中最晚执行。

6.2. 操作模式

以下章节将详细介绍AUTOSAR CanNm算法的操作模式。

AUTOSAR CanNm应包含在模块接口上可见的三种操作模式:

  • 网络模式(Network Mode)
  • 准备总线休眠模式(Prepare Bus-Sleep Mode)
  • 总线睡眠模式(Bus-Sleep Mode)

AUTOSAR CanNm操作模式的变化需通过回调函数通知上层。当CanNm_GetState被调用时,CanNm将返回当前的NM状态和模式。

6.2.1. 网络模式

网络模式应包括三个内部状态:

  • 重复消息状态(Repeat Message State)
  • 正常操作状态(Normal Operation State)
  • 就绪睡眠状态(Ready Sleep State)

当从总线睡眠模式(Bus-Sleep Mode)进入网络模式(Network Mode)时,CanNm模块需默认进入重复消息状态(Repeat Message State)。

当从准备总线休眠模式(Prepare Bus-Sleep Mode)进入网络模式(Network Mode)时,CanNm模块需默认进入重复消息状态(Repeat Message State)。

当进入网络模式时,CanNm模块需启动NM超时计时器(NM-Timeout Timer),同时通过调用回调函数Nm_NetworkMode通知上层新的当前操作模式。

在网络模式下成功接收网络管理PDU(调用CanNm_RxIndication)后,如果启用了PDU传输能力,CanNm模块需重新启动NM超时计时器。

在网络模式下成功传输网络管理PDU(使用E_OK调用CanNm_TxConfirmation)时,CanNm模块需重新启动NM超时计时器。

注意:

如果启用CanNmImmediateTxConfEnabled,则假定每个网络管理PDU传输请求都会导致网络管理PDU传输成功。

CanNm模块需在每次启动或重启时,重置NM超时计时器。

如果在网络模式下调用CanNm_PassiveStartUp,CanNm模块将不执行该服务并返回E_NOT_OK。

如果在CanNmDynamicPncToChannelMappingEnabled设置为TRUE,且CanNm处于网络模式的通道上调用函数CanNm_PnLearningRequest,则 CanNm模块需在该通道上将CBV中的重复消息位和部分网络学习(Partial Network Learning)位设置为1,并更改为或重新启动重复消息状态(Repeat Message State)。

如果在CanNmDynamicPncToChannelMappingEnabled设置为TRUE,且CanNm处于网络模式的通道上接收到的部分网络学习(Partial Network Learning)位和 Repeat Message Request位的值为1,则CanNm应在该通道上将CBV中的Partial Network Learning Bit设置为1,并更改或重新启动重复消息状态。

6.2.1.1. 重复消息状态(Repeat Message State)

对于不处于被动模式的节点(请参阅第6.9.3章节),重复消息状态确保从总线睡眠或准备总线睡眠到网络模式的任何转换,对网络上的其他节点都是可见的。 此外它还确保任何节点在最短的时间内保持活动状态。它可用于存在节点的检测。

当进入重复消息状态时,CanNm模块需(重新)开始传输网络管理PDU,除非被动模式被启用或者通信被禁止。

当NM超时计时器在重复消息状态中超时到期时,CanNm模块需(重新)启动NM超时计时器,同时需向DET报告CANNM_E_NETWORK_TIMEOUT。

网络管理状态机应在由配置参数CanNmRepeatMessageTime确定的可配置时间量内保持在重复消息状态;在此时间后,CanNm模块需离开重复消息状态。

当离开重复消息状态时,如果网络已被请求,CanNm模块需进入正常操作状态(Normal Operation State);如果网络已经被释放,则CanNm模块需进入就绪睡眠状态(Ready Sleep State)。

如果CanNmNodeDetectionEnabled设置为TRUE,CanNm将在离开重复消息状态时,清除重复消息位。

如果在重复消息状态(Repeat Message State)、总线睡眠模式(Prepare Bus-Sleep Mode)或总线睡眠模式(Bus-Sleep Mode)中调用服务CanNm_RepeatMessageRequest,CanNm模块应不执行该服务并返回E_NOT_OK。

如果CanNmDynamicPncToChannelMappingEnabled设置为TRUE,CanNm将在离开重复消息状态时清除部分网络学习位。

6.2.1.2. 正常操作状态

正常操作状态确保只要网络被请求,任何节点都可以保持网络管理集群处于唤醒状态。

当从就绪睡眠状态(Ready Sleep State)进入正常操作状态(Normal Operation State)时,CanNm模块将开始传输网络管理PDU。

注意:

如果被动模式被启用或者网络管理PDU传输被禁用,则NM PDU不会被传输,所以无任何操作需被执行。

当NM超时计时器在正常操作状态下超时到期,CanNm模块需(重新)启动 NM超时计时器,同时需向DET报告CANNM_E_NETWORK_TIMEOUT。

当前状态为正常操作状态(Normal Operation State),如果网络被释放,则CanNm模块需进入就绪睡眠状态(Ready Sleep State)。

如果CanNmNodeDetectionEnabled设置为TRUE,并且在正常操作状态(Normal Operation State)下接收到重复报文请求位,则CanNm模块需进入重复消息状态(Repeat Message State)。

如果CanNmNodeDetectionEnabled设置为TRUE,并且在正常操作状态(Normal Operation State)下调用函数CanNm_RepeatMessageRequest,则CanNm模块也需进入重复消息状态(Repeat Message State),并且CanNm模块需设置重复消息位(Repeat Message Bit)。

6.2.1.3. 就绪睡眠状态

就绪睡眠状态(Ready Sleep State)确保只要有其他节点保持网络管理集群处于唤醒状态,网络管理集群中的任何节点就会等待进入准备总线休眠模式。

当从重复消息状态(Repeat Message State)或正常操作状态(Normal Operation State)进入就绪睡眠状态(Ready Sleep State)时,CanNm模块将停止网络管理PDU的传输。

注意:

如果被动模式被启用,则NM PDU不会被传输,所以无任何操作需被执行。

在某些情况下,如果被动模式被禁用,则需要在就绪睡眠状态(Ready Sleep State)下传输NM PDU,以保证网络同步关闭。例如:PN关闭消息(PN shutdown messages)的重新传输。

当NM超时计时器在就绪睡眠状态(Ready Sleep State)下超时到期,CanNm模块将进入准备总线休眠模式(Prepare Bus-Sleep Mode)。

当网络请求时,当前状态为就绪睡眠状态(Ready Sleep State)时,CanNm模块需进入正常操作状态(Normal Operation State)。

如果CanNmNodeDetectionEnabled设置为TRUE,并且在就绪睡眠状态(Ready Sleep State)下收到重复报文请求位,则CanNm模块进入重复消息状态(Repeat Message State)。

如果CanNmNodeDetectionEnabled设置为TRUE,并且在就绪睡眠状态(Ready Sleep State)下调用CanNm_RepeatMessageRequest函数,则CanNm模块需进入重复消息状态(Repeat Message State),并且CanNm模块需设置重复消息位(Repeat Message Bit)。

6.2.2. 准备总线休眠模式

准备总线休眠模式的目的是确保所有节点在进入总线休眠模式之前有时间停止它们的网络活动。在准备总线休眠模式下,总线活动平静下来(即,为了使所有的tx -buffer为空,传输排队的消息),最后,在准备总线休眠模式下,总线上没有活动。

当进入准备总线休眠模式(Prepare Bus-Sleep Mode)时,CanNm模块将通过调用Nm_PrepareBusSleepMode通知上层。

如果CanNmStayInPbsEnabled被禁用,CanNm应在由配置参数CanNmWaitBusSleepTime确定的可配置时间内保持在准备总线休眠模式(Prepare Bus-Sleep Mode)。当时间超时后,需离开准备总线休眠模式(Prepare Bus-Sleep Mode)并进入总线睡眠模式(Bus-Sleep Mode)。

注意:

此需求隐含地包含,如果启用CanNmStayInPbsEnabled,CanNm将永远不会因为超时而离开,即CanNm将一直保持在准备总线休眠模式(Prepare Bus-Sleep Mode),直到ECU进入电源关闭或重启。

在准备总线休眠模式(Prepare Bus-Sleep Mode)下成功接收到网络管理PDU后,CanNm模块需进入网络模式(Network Mode)。在默认情况下,CanNm模块需进入重复消息状态(Repeat Message State)。

在准备总线休眠模式(Prepare Bus-Sleep Mode)下,当网络被请求后,CanNm模块需进入网络模式。并且默认情况下,CanNm模块需进入重复消息状态(Repeat Message State)。

在准备总线休眠模式(Prepare Bus-Sleep Mode)下,当网络被请求后,CanNm模块已进入网络模式,如果配置参数CanNmImmediateRestartEnabled设置为TRUE,则CanNm模块需传输网络管理PDU。

理由:

集群中的其他节点仍处于准备总线休眠模式(Prepare Bus-Sleep Mode)。在上述异常情况下,应避免过渡到总线睡眠模式(Bus-Sleep Mode),并且需尽快恢复总线通信。

由于CanNm中网络管理PDU的传输偏移,第一个处于重复消息状态的网络管理PDU的传输可能会显着延迟。为了避免网络延迟重新启动,可以立即请求网络管理PDU的传输。

注意:

如果CanNmImmediateRestartEnabled设置为TRUE,并且唤醒硬性(wake-up line)被使用,如果所有网络节点在准备总线休眠模式(Prepare Bus-Sleep Mode)下收到网络请求,则会发生网络管理PDU突发。

6.2.3. 总线睡眠模式

总线睡眠模式(Bus-Sleep Mode)的目的是在当没有消息交换时降低节点的功耗。通信控制器(communication controller)被切换到睡眠模式(sleep mode),相应的唤醒机制被激活,最终功耗降低到总线睡眠模式中的适当水平。

如果CanNmStayInPbsEnabled被禁用,可通过配置参数CanNmTimeoutTime + CanNmWaitBusSleepTime来确定的进入总线睡眠模式的时间。当整个网络管理集群中的所有节点都配置了相同的时间,则网络管理集群中使用AUTOSAR网络管理算法协调的所有节点,几乎会在非常接近的一个时间点执行到总线睡眠模式(Bus-Sleep Mode)的转换。

注意:

对于在这个网络管理集群的所有网络节点,参数CanNmTimeoutTime和CanNmWaitBusSleepTime需要具有相同的配置值。但是根据具体实现,总线睡眠模式(Bus-Sleep Mode)的转换会发生可能会在完全相同或者大致相同的一个时间点。

此转换的时间上的误差主要取决于以下因素:

  • 内部时钟精度(振荡器漂移)。
  • 网络任务的周期时间。(如:任务并未进行全局的时间同步)。
  • Tx队列中的网络管理PDU等待时间。(如果在传输请求后立即进行传输确认)。

其实在最佳情况下,一般只需考虑振荡器的漂移即可,该时间可通过值配置参数CanNmTimeoutTime + CanNmWaitBusSleepTime来确定。

除了初始化时默认进入总线睡眠模式(Bus-Sleep Mode)的情况,其他进入总线睡眠模式(Bus-Sleep Mode)时,CanNm模块需通过调用回调函数Nm_BusSleepMode通知上层。

当CanNm模块在总线睡眠模式(Bus-Sleep Mode)下成功接收到网络管理PDU(CanNm_RxIndication调用)时,CanNm模块将通过调用回调函数Nm_NetworkStartIndication通知上层,同时应向DET报告错误CANNM_E_NET_START_IND。

理由:

为了避免网络和模式管理之间的竞争条件和状态不一致,CanNm不会自动执行从总线睡眠模式(Bus-Sleep Mode)到网络模式(Network Mode)的转换。CanNm只会通知必须做出唤醒决策的上层。总线睡眠模式下(Bus-Sleep Mode)的网络管理PDU接收必须根据ECU关闭/启动过程的当前状态进行处理。

如果在总线睡眠模式(Bus-Sleep Mode)或者准备总线休眠模式(Prepare Bus-Sleep Mode)下,调用CanNm_PassiveStartUp,CanNm模块应进入网络模式(Network Mode)。同时在默认情况下,CanNm模块需进入重复消息状态(Repeat Message State)。

注意:

在准备总线休眠模式(Prepare Bus-Sleep Mode)和总线睡眠模式(Bus-Sleep Mode)中,除非有明确的总线通信请求,一般都假定网络已经被释放。

当在总线睡眠模式(Bus-Sleep Mode)模式下,网络被再次请求,CanNm模块应进入网络模式(Network Mode)。同时在默认情况下,CanNm模块需进入重复消息状态(Repeat Message State)。

6.3. 网络状态

网络状态包括两类:被请求(requested)和被释放(released)。它是AUTOSAR CanNm状态机的两个附加的状态,并与状态机同时存在。

网络状态表示软件组件是否需要在总线上通信。当软件组件需要在总线上通信时,网络状态转换为被请求。当软件组件无需在总线上通信时,网络状态转换为被释放;但需注意的是即使网络被释放了,一个ECU仍然可以通信,因为其他一些ECU仍然在请求网络。

通过调用函数CanNm_NetworkRequest,可以用来请求网络。CanNm模块需将当前的网络状态更改为被请求。

通过调用函数CanNm_NetworkRelease,可以用来释放网络。CanNm模块需将当前的网络状态更改为被释放。

6.4. 初始化

如果CanNm模块初始化成功,即:调用函数CanNm_Init成功,则CanNm模块应将网络管理状态设置为总线睡眠模式(Bus-Sleep Mode)。

注意:

CanNm模块应该在CanIf初始化之后,并且在任何其他网络管理服务被调用之前,进行初始化。

初始化后,默认情况下,CanNm模块需将网络状态设置为已释放(released),CanNm模块需进入到总线睡眠模式(Bus-Sleep Mode)。

CanNm_Init函数应通过传递的配置指针参数选择活动配置集。

如果CanNmGlobalPnSupport设置为TRUE,并且CanNm已被初始化(调用CanNm_Init),则CanNm需停止NM消息传输超时计时器(NM Message Tx Timeout Timer)。

在初始化期间,CanNm模块应停用总线,减少总线负载。

初始化后,CanNm模块应通过停止消息周期定时器(Message Cycle Timer)来停止网络管理PDU的传输。

注意:

如果CanNmPassiveModeEnabled设置为TRUE,因为此类节点不传输网络管理 PDU,所有不需要CanNm消息周期(Message Cycle)。

在初始化期间,CanNm模块应将用户数据的每个字节设置为0xFF,并且控制位向量设置为0x00

在初始化期间,如果CanNmPnEnabled为TRUE,CanNm模块应将PNC位向量的每个字节设置为0x00。

6.5. 执行

6.5.1. 处理器架构

AUTOSAR CanNm算法需独立于处理器。这也就意味着,它不应依赖于任何处理器特定的硬件支持,所以它需要支持在AUTOSAR范围内的任何处理器架构上的实现。

6.5.2. 时间参数

配置参数CanNmTimeoutTime定义了AUTOSAR CanNm的NM超时的时间(NM-Timeout Time)。

配置参数CanNmRepeatMessageTime定义了AUTOSAR CanNm的重复消息发送的时间(Repeat Message Time)。

配置参数CanNmWaitBusSleepTime定义了AUTOSAR CanNm 的等待总线睡眠时间(Wait Bus-Sleep Time)。

配置参数CanNmRemoteSleepIndTime定义了AUTOSAR CanNm远程睡眠指示时间(Remote Sleep Indication Time)。

6.6. 网络管理PDU结构

下图显示了网络管理PDU的格式,以8字节为例,其中:

  1. 源节点标识符 (SNI) 位于第一个字节。
  2. 控制位向量 (CBV) 位于第二个字节。
  3. 同时用户数据(user data)和部分网络(partial network)已被启用。同时用户数据的范围位于:系统字节(System Bytes)和PNC位向量之间。

Figure7_1.png

源节点标识符(Source Node Identifier)的位置应可通过CanNmPduNidPosition配置为字节0,字节1或者关闭(off)。

注意:

将CanNmPduNidPosition设置为off,意味着在NM PDU中没有空间被源节点标识符占用,所以会多一个字节可用于用户数据或PNC位向量。

控制位向量(Control Bit Vector)的位置应可通过CanNmPduCbvPosition配置为字节0,字节1或者关闭(off)。

注意:

  • 将CanNmPduCbvPosition设置为Off,意味着在NM PDU中没有空间被控制位向量(CBV)占用。所有会多一个字节可用于用户数据。
  • PNC位向量的位置可通过相应NM通道的NmPncBitVectorOffset和NmPncBitVectorLength进行配置。PNC位向量的位置位于系统字节(CBV和SNI)之后,并且在NM-PDU的PduLength内。

未分配给Nm系统字节或PNC位向量的剩余字节,可以用于用户数据(User Data)。

注意:

用户数据的使用和位置是可配置的。如果使用了用户数据,则用户数据被放置在NM-PDU的PduLength内,并且不与系统字节或PNC位向量的范围重叠。

如果启用了部分网络功能(即:CanNmPnEnabled设置为TRUE),并且使用了用户数据,则用户数据范围位于系统字节和PNC位向量之间,或者PNC位向量和NM-PDU的末尾之间。

用户数据范围的长度可以根据以下限制计算: * 如果用户数据范围位于系统字节和PNC位向量之间,则用户数据范围的长度等于PNC位向量偏移量和系统字节长度的差值。 * 如果用户数据范围位于PNC位向量和NM-PDU的末尾之间,则用户数据范围的长度等于NM-PDU长度与最后一个PNC位向量的字节的位置的差值。

如果禁用了部分网络功能(即:CanNmPnEnabled设置为FALSE,并且使用了用户数据,则用户数据范围等于NM-PDU长度和系统字节长度的差值。

网络管理PDU的长度由全局ECUC模块中的PduLength参数定义。

下图描述了控制位向量的格式:

Figure7_2.png

注意:在AUTOSAR的R3.2版本中,位1和位2用作NM协调器ID(低位)。

控制位向量应包括:

  1. 位 0:重复消息请求位
    • 0:未请求重复消息状态
    • 1:请求重复消息状态
  2. 位 1:PN关闭请求位 (PNSR)
    • 0:NM 消息不包含同步的部分网络关闭请求
    • 1:NM 消息确实包含至少一个 PNC 的同步部分网络关闭请求
  3. 位 3:NM协调器休眠位
    • 0:主协调器未请求启动同步关机
    • 1:主协调器请求启动同步关机
  4. 位 4: 主动唤醒位
    • 0:节点没有唤醒网络(被动唤醒)
    • 1:节点已唤醒网络(主动唤醒)
  5. 位 5: 部分网络学习位 (PNL)
    • 0:不请求 PNC 学习
    • 1:请求 PNC 学习
  6. 位 6:部分网络信息位 (PNI)
    • 0:NM PDU 不包含部分网络请求信息
    • 1:NM PDU 包含部分网络请求信息
  7. 位 2和位 7:保留用于将来的扩展
    • 0:禁用/保留以供将来使用

注意:

CBV在初始化时用0x00进行初始化。

CanNm模块需使用配置参数CanNmNodeId设置源节点标识符,除非CanNmPduNidPosition设置为关闭。

如果CanNm由于调用CanNm_NetworkRequest(即:主动唤醒)而执行从总线睡眠模式(Bus Sleep Mode)或者准备总线休眠模式(Prepare Bus Sleep Mode)到网络模式(Network Mode)的状态更改,并且CanNmActiveWakeupBitEnabled为TRUE,则CanNm需在CBV中设置ActiveWakeupBit。

如果CanNm模块离开网络模式并且CanNmActiveWakeupBitEnabled为TRUE,则CanNm模块需清除CBV中的ActiveWakeupBit。

6.7. 通信调度

6.7.1. 传输(Transmission)

本节中所描述的传输机制仅适用在网络管理PDU传输能力被启用的情况。网络管理PDU传输能力可通过CanNmPassiveModeEnabled进行配置。

注意:

本节中描述的传输机制仅在CanNmPassiveModeEnabled为FALSE时被开启。

CanNm模块需提供周期性传输模式。在这种传输模式下,CanNm模块将定期发送网络管理PDU。

CanNm模块需可选地提供具有降低总线负载的周期性传输模式。在这种传输模式下,CanNm模块将根据特定算法传输网络管理PDU。

周期性传输模式可用于重复消息状态(Repeat Message State)和正常操作状态(Normal Operation State)。具有降低总线负载的周期性传输模式仅在正常操作状态(Normal Operation State)下可用。

注意:

如果禁用了降低总线负载机制,则在重复消息状态(Repeat Message State)和正常操作状态(Normal Operation State)中可使用周期性传输模式。

如果启用了降低总线负载机制,则仅在正常操作状态(Normal Operation State)中使用具有降低总线负载的周期性传输模式。

即时传输确认机制(Immediate transmission confirmation)应可通过CanNmImmediateTxConfEnabled进行配置。

注意:

即时传输确认机制用于不想使用CanIf的真实确认的系统。

理由:

如果总线访问完全通过离线系统设计工具进行调节,则通知网络管理传输成功的实际传输确认可被视为是多余的。由于最大仲裁时间是已知的,所以在传输请求时间立即提出确认是可以接受的。

此外,在这样的系统中仅针对一条NM消息,执行多余的实际传输确认,将意味着与整个Can接口(CanIf)和Can驱动程序层的执行时间有关的重大性能损失,从而使计算的时间的效率低下。

如果不是通过调用CanNm_NetworkRequest,进入重复消息状态(Repeat Message State),或者CanNmImmediateNmTransmissions为零,则在进入重复消息状态(Repeat Message State)后,NM PDU的传输应延迟CanNmMsgCycleOffset。

如果从就绪睡眠状态(Ready Sleep State)进入正常操作状态(Normal Operation State),则需立即开始NM PDU的传输。

如果CanNmPnHandleMultipleNetworkRequests设置为TRUE,CanNm_NetworkRequest将触发从网络模式(Network Mode)到重复消息状态(Repeat Message State)的状态转换。如果启用了PDU传输能力,则需使用CanNmImmediateNmCycleTime作为周期时间来传输NM PDU。第一帧NM PDU的传输需尽快地被触发。 在PDU被传输后,消息周期计时器需用CanNmImmediateNmCycleTime进行重新加载 。在这种情况下不应使用CanNmMsgCycleOffset。

注意:

在这种情况下,由于ECUC_CanNm_00056,所以CanNmImmediateNmTransmissions必须大于零。

如果NM PDU需使用CanNmImmediateNmCycleTime来进行传输,CanNm需确保具有此时间的CanNmImmediateNmTransmission(包括第一次立即传输)被成功请求。 如果对CanIf的传输请求失败(即:返回E_NOT_OK),CanNm将在下一个主函数中重试传输请求。

接着CanNm需使用CanNmMsgCycleTime来继续传输NM PDU。

注意:

当使用CanNmImmediateNmCycleTime传输NM PDU时,不得传输其他Nm PDU(即:CanNmMsgCycleTime传输周期已经被停止)。

如果NM PDU的传输已经开始,在下列的两种场景中,CanNm模块需通过调用CanIf_Transmit,发送NM PDU。

  1. CanNmSynchronizedPncShutdownEnabled设置为FALSE,并且CanNm消息周期计时器(Message Cycle Timer)超时。
  2. CanNmSynchronizedPncShutdownEnabled设置为TRUE,并且没有同步PNC关闭的请求在等待处理(pending),

注意:

如果CanIf_Transmit的函数调用失败,需按章节6.12中所描述的传输错误处理,通知CanNm模块。

如果NM PDU的传输已经开始,CanNm消息周期计时器到期,并且CanNmSynchronizedPncShutdownEnabled设置为TRUE,同步PNC关闭的请求正等待处理(pending),NM PDU的传输应推迟到下一个CanNm_Main函数调用。

注意:

  • 同步的PNC关闭必须立即发送,所以使用CanNmMsgCycleTime传输的周期的NM消息的处理必须被延迟。在极少数情况下,这可能会导致一个以上主函数周期时间的延迟。
  • 在网络管理时序上,因为必须考虑使用CanNmMsgCycleTime传输的NM消息可能会延迟一个以上的主函数周期时间,所以必须满足以下条件,以容忍这些NM消息的多次延迟:(CanNmPnResetTime – CanNmMsgCycleTime) > n * CanNmMainFunctionPeriod,其中n表示如果没有收到NM消息,则在PnResetTime超时到期之前允许的延迟数。

如果CanNm消息周期计时器到期,则CanNm模块必须使用CanNmMsgCycleTime来重新启动。

如果NM PDU的传输已停止,CanNm模块需取消消息周期计时器。

6.7.2. 接收(Reception)

如果成功接收到NM PDU,CanIf模块将调用回调函数CanNm_RxIndication。

在调用回调函数CanNm_RxIndication时,CanNm模块应将函数参数中引用的NM PDU的数据复制到内部缓冲区。

6.8. 降低总线负载机制

NM PDU的传输周期通常由时间参数CanNmMsgCycleTime决定。对于属于网络管理集群的所有NM节点,该参数必须相等。如果不采取任何行动,这将导致一个总线负载(bus load)的问题。同时问题是依据网络管理集群成员数量所决定的。即使可以通过节点特定时间参数CanNmMsgCycleOffset来防止突发,但也需要一种独立于网络管理集群的大小的机制来减少总线负载。

为了实现这哥1机制,以下两个方面必须予以考虑:

  1. 当接收到NM PDU,CanNm消息周期计时器需使用此节点特定的时间参数CanNmMsgReducedTime进行重新加载。则此节点特定时间CanNmMsgReducedTime应大于 ½ CanNmMsgCycleTime且小于CanNmMsgCycleTime。
  2. 当NM PDU被传输后,CanNm消息周期定时器需使用此网络管理集群特定的时间参数CanNmMsgCycleTime进行重新加载。

这会导致以下行为:

只有两个具有最小CanNmMsgReducedTime时间的节点,在网络上交替传输NM PDU。如果其中一个节点停止传输,则下一个最小CanNmMsgReducedTime时间的节点将开始传输NM PDU。如果网络上只有一个节点需要总线通信,则每个CanNmMsgCycleTime传输一个NM PDU。

该算法确保总线负载限制为每个CanNmMsgCycleTime最多只有两个NM PDU。

降低总线负载机制需通过参数CanNmBusLoadReductionEnabled进行静态配置。

当从总线睡眠模式(Bus-Sleep Mode)、准备总线休眠模式(Prepare Bus-Sleep Mode)、正常操作状态(Normal Operation State)或就绪睡眠状态(Ready Sleep State)进入重复消息状态(Repeat Message State)时,CanNm模块应停用降低总线负载机制。

当从重复消息状态(Repeat Message State)或就绪睡眠状态(Ready Sleep State)进入正常操作状态(Normal Operation State)并且 CanNmBusLoadReductionEnabled为TRUE,CanNm模块需激活降低总线负载机制。

如果降低总线负载机制全局启用,即CanNmBusLoadReductionEnabled为TRUE。对于激活的特定网络,PDU传输能力被启用,并为此网络调用了函数CanNm_RxIndication,CanNm模块需使用节点特定的时间参数CanNmMsgReducedTime,重新启动CanNm消息周期计时器。

6.9. 附加的功能

6.9.1. 远程睡眠指示检测

远程睡眠指示(Remote Sleep Indication)表示为以下的一种特殊的场景。

  1. 网络管理集群中某一个节点处于正常操作状态(Normal Operation State)。
  2. 网络管理集群中的所有其他节点都准备好进入睡眠状态,即:都处于就绪睡眠状态(Ready Sleep State)。
  3. 处于正常操作状态(Normal Operation State)的节点仍将继续保持总线唤醒状态。

远程睡眠指示的检测应使用配置参数CanNmRemoteSleepIndEnabled进行静态配置。

如果CanNm模块在由配置参数CanNmRemoteSleepIndTime决定的可配置时间量内,没有接收到处于正常操作状态的NM PDU,则CanNm模块需调用回调函数 Nm_RemoteSleepIndication。

通过调用Nm_RemoteSleepIndication,CanNm通知模块Nm模块,集群中的所有节点都准备好​​进入睡眠状态,也就是所谓的远程睡眠指示(Remote Sleep Indication)。

先前已检测到远程睡眠指示,并且在正常操作状态(Normal Operation State)或就绪睡眠状态(Ready Sleep State)中接收到NM PDU,则模块CanNm需调用回调函数Nm_RemoteSleepCancellation。

先前已检测到远程睡眠指示,并且从正常操作状态(Normal Operation State)或就绪睡眠状态(Ready Sleep State)进入重复消息状态(Repeat Message State),则CanNm模块需调用回调函数Nm_RemoteSleepCancellation。

通过调用Nm_RemoteSleepCancellation,CanNm通知模块Nm模块,集群中的某些节点不再准备好进入睡眠状态,也就是所谓的远程睡眠取消(Remote Sleep Cancellation)。

当服务CanNm_CheckRemoteSleepIndication被调用,并且当前状态为总线睡眠模式(Bus-Sleep Mode)、准备总线休眠模式(Prepare Bus-Sleep Mode)或者重复消息状态(Repeat Message State)时,CanNm模块不应执行该服务并应返回E_NOT_OK。

6.9.2. 用户数据

为了支持网络管理用户数据,可以使用配置参数CanNmUserDataEnabled开关进行静态配置。

当CanNm_SetUserData被调用时,CanNm模块需为接下来在总线上传输的NM PDU设置网络管理用户数据。

当CanNm_GetUserData被调用时,CanNm模块需将返回最近收到的NM PDU的网络管理用户数据。

注意:

如果配置了用户数据,它肯定会在重复消息状态(Repeat Message State)下发送。在正常操作状态(Normal Operation State)下,是否发送用户数据取决于降低总线负载机制的配置。处于就绪睡眠状态(Ready Sleep State)的用户数据将不会被发送。

6.9.2.1. COM 用户数据

除了使用CanNm API来设置和获取用户数据之外,CanNm还可以使用COM来检索其用户数据。

如果CanNmComUserDataSupport被启用,则API CanNm_SetUserData将不再可用。

如果CanNmComUserDataSupport被启用,并且NM-PDU 未配置为CanIf中的触发传输,即:CanIfTxPduTriggerTransmit设置为FALSE,则CanNm需通过调用PduR_CanNmTriggerTransmit,从被引用的NM I-PDU收集网络管理用户数据。同时在它每次请求传输相应的NM PDU之前,将用户数据与NM字节组进行合并。

注意:

在触发式传输的情况下,传输请求不需要数据,只需要长度。数据将在CanNm_TriggerTransmit中收集。

如果CanNmComUserDataSupport被启用,并且PduR_CanNmTriggerTransmit 返回E_NOT_OK,则NM将使用最后传输的NmUserData值。

注意:

避免过时的NM数据的传输,可以通过不停止COM中用于网络管理用户数据传输的I-PDU。

如果CanNmComUserDataSupport被启用,并调用CanNm_TxConfirmation,CanNm将通过调用PduR_CanNmTxConfirmation将传输确认结果转发给PduR。

如果CanNmComUserDataSupport被启用,并且可用的用户数据字节数与引用的I-PDU的长度不匹配,则应在生成配置时报告错误。

6.9.3. 被动模式

在被动模式下,节点仅接收NM PDU,但不发送任何NM PDU。

被动模式需使用配置参数CanNmPassiveModeEnabled 开关进行静态配置。

注意:

必须为一个ECU中的所有NM网络启用或禁用被动模式。

6.9.4. 网络管理PDU的Rx指示

在调用回调函数CanNm_RxIndication时,当且仅当配置参数CanNmPduRxIndicationEnabled设置为TRUE时,CanNm模块需调用Nm的回调函数Nm_PduRxIndication。

6.9.5. 状态变化通知

如果回调Nm_StateChangeNotification被启用,即:配置参数CanNmStateChangeIndEnabled设置为TRUE,AUTOSAR CanNm状态的所有变化都应通过调用Nm_StateChangeNotification通知上层。

6.9.6. 通讯控制

通信控制(Communication Control)需通过配置参数CanNmComControlEnabled进行静态配置。

如果服务CanNm_DisableCommunication被调用,则CanNm模块需禁用NM PDU的传输能力。

注意:

此行为也同样适用于重复消息状态(Repeat Message State)。通信控制功能不影响重复消息状态(Repeat Message State)的持续时间。

当NM PDU传输能力被禁用时,需执行以下操作:

  1. CanNm模块需停止CanNm消息周期定时器(CanNm Message Cycle Timer),以停止网络管理PDU的传输。
  2. CanNm模块需停止NM超时计时器(NM-Timeout Timer)。
  3. CanNm模块需停止远程睡眠指示检测(Remote Sleep Indication Detection)。

当NM PDU传输能力被启用时,需执行以下操作:

  1. NM PDU的传输应最晚在下一个NM主函数中重新开始。
  2. CanNm模块将重新启动NM超时计时器(NM-Timeout Timer)。
  3. 如果CanNmRemoteSleepIndEnabled设置为TRUE,则CanNm模块应重新启动远程睡眠指示检测。

如果NM PDU传输能力被禁用,服务CanNm_RequestBusSynchronization需返回E_NOT_OK。

6.9.7. 协调器同步支持

当有多个协调器连接到同一总线时,CBV中有一个特殊位NmCoordinatorSleepReady,用于指示主协调器请求启动关闭序列(shutdown sequence)。该算法的主要功能已在Nm模块中进行了描述。

如果CanNmCoordinatorSyncSupport设置为TRUE,CanNm已进入网络模式(Network Mode)或已调用Nm_CoordReadyToSleepCancellation,则它应在第一次接收到NmCoordinatorSleepReady位设置为1的NM PDU时,通过调用Nm_CoordReadyToSleepIndication来通知Nm模块。

如果CanNmCoordinatorSyncSupport设置为TRUE,CanNm调用Nm_CoordReadyToSleepIndication并且仍处于网络模式(Network Mode),则它应在第一次接收到NmCoordinatorSleepReady位设置为0的NM PDU时,通过调用Nm_CoordReadyToSleepCancellation来通知Nm模块。

如果CanNmCoordinatorSyncSupport设置为TRUE,并且CanNm_SetSleepReadyBit函数被调用,则CanNm应将NM协调器睡眠就绪位(NM Coordinator Sleep ready Bit)设置为传递的值,并触发单个NM PDU。

6.10. 整车唤醒

整车唤醒位(Car Wakeup bit)在NM-PDU中的位置,由配置参数CanNmCarWakeUpBytePosition和CanNmCarWakeUpBitPosition定义。

6.10.1. 接收路径(Rx Path)

如果接收到的NM PDU中的整车唤醒位为1,并且CanNmCarWakeUpRxEnabled为TRUE,CanNmCarWakeUpFilterEnabled为FALSE, 则CanNm需调用Nm_CarWakeUpIndication,并执行标准Rx指示处理。

如果在Nm_CarWakeUpIndication上下文中,CanNm_GetPduData被调用,并且CanNmNodeDetectionEnabled或者CanNmUserDataEnabled或者CanNmNodeIdEnabled设置为TRUE,CanNm需返回导致Nm_CarWakeUpIndication被调用的PDU中所包含的PDU数据。

注意:

这是使ECU能够识别有关整车唤醒请求发送者的详细信息所必需的。

如果CanNmCarWakeUpFilterEnabled为TRUE,接收到的NM PDU中的整车唤醒位为1,同时CanNmCarWakeUpRxEnabled为TRUE,并且接收到的NM PDU中的节点ID等于CanNmCarWakeUpFilterNodeId,CanNm模块应调用Nm_CarWakeUpIndication,并执行标准的Rx指示处理。

注意:

整车唤醒过滤器对于只考虑实现中央网关(Central Gateway)的整车唤醒的子网关是必需的,可以避免错误唤醒。

6.10.2. 传输路径(Tx Path)

整车唤醒位的传输需由应用程序来处理,可以通过使用CanNm模块提供的网络管理用户数据(NM user data)机制实现。

6.11. 部分联网

6.11.1. NM PDU的Rx处理

如果CanNmPnEnabled为FALSE,CanNm不应从进一步的Rx指示处理中丢弃NM PDU,并且部分网络(partial networking)扩展需被禁用。

如果CanNmPnEnabled为TRUE,接收到的NM-PDU中的PNI位为0,并且CanNmAllNmMessagesKeepAwake为TRUE,则CanNm模块不应从进一步的 Rx指示处理中丢弃NM PDU,并需省略部分网络的扩展。

注意:

这是使网关在任何类型的NM-PDU上都能保持唤醒所必需的。

如果CanNmPnEnabled为TRUE,接收到的NM-PDU中的PNI位为0,并且CanNmAllNmMessagesKeepAwake为FALSE,则CanNm模块需忽略所接收到的NM-PDU。

6.11.1.1. 基于NM-PDU的过滤算法(已过时)

如果CanNmPnEnabled为TRUE,接收到的NM-PDU中的PNI位为1,则CanNm模块将按照第6.11.4章节NM PDU 过滤算法中的描述处理NM-PDU的部分网络信息。

6.11.1.2. 基于PNC位向量

如果CanNmPnEnabled为TRUE,接收到的NM-PDU中的PNI位为1,PNSR位为0,则CanNm模块将根据部分网络配置从接收到的NM-PDU中提取 PNC位向量(NmPncBitVectorOffset 和NmPncBitVectorLength对应的NM通道),并通过调用Nm_PncBitVectorRxIndication转发PNC位向量。

如果CanNmPnEnabled为TRUE, 并且Nm_PncBitVectorRxIndication已经被调用,则接收到的NM PDU仅应在以下某一个条件满足的情况下,考虑进行进一步处理:

  • CanNmAllNmMessagesKeepAwake设置为TRUE
  • CanNm_ConfirmPnAvailability尚未被调用。
  • RelevantPncRequestDetectedPtr的输出值被设置为TRUE

注意:

  • 为了让网关在任何类型的NM-PDU上保持唤醒,需要设置参数CanNmAllNmMessagesKeepAwake。
  • 如果PN可用性未被CanSM确认,则所有PNC请求都被认为是相关的,所以Nm在接收到NM-PDU时重新启动NM超时计时器。这是允许故障的部分网络依赖硬件(例如:支持PN的CAN收发器)与其余网络关闭同步所必需的。
  • 如果不是所有消息都应使ECU保持唤醒,并且PN可用性已经被确认但未检测到相关PN信息,则不考虑对NM PDU进行进一步处理。
6.11.1.3. 举例
  • CanNmPduCbvPosition = 0
  • CanNmPduNidPosition = 1
  • NmPncBitVectorOffset = 4
  • NmPncBitVectorLength = 4
  • Calculated length of user data range = 2

NM PDU的字节2和字节3包含用户数据,NM PDU的字节4到字节7包含PNC位向量:

Figure7-3

对于此示例,定义了四个NmPnFilterMaskBytes。PN滤波器掩码的值根据部分网络设计使用。

例如:

  • NmPnFilterMaskByteIndex = 0,NmPnFilterMaskByteValue = 0x01
  • NmPnFilterMaskByteIndex = 1,NmPnFilterMaskByteValue = 0x97
  • NmPnFilterMaskByteIndex = 2,NmPnFilterMaskByteValue = 0x00
  • NmPnFilterMaskByteIndex = 3,NmPnFilterMaskByteValue = 0x00

注意:

PNC位向量的偏移量来自Nm模块(NmPncBitVectorOffset)。 PNC位向量长度则是来自Nm模块的每个NM通道(NmPncBitVectorLength)。PN过滤器掩码(NmPnFilterMaskByteIndex和NmPnFilterMaskByteValue)位于Nm模块中并被使用。

6.11.1.4. 同步PNC关闭

如果CanNmSynchronizedPncShutdownEnabled设置为TRUE,当接收到PNI位和PNSR位为1的NM PDU时,同时由CanNmComMNetworkHandleRef配置的ComMChannel被主动协调,即ComMPncGatewayType设置为COMM_GATEWAY_TYPE_ACTIVE,CanNm模块需忽略接收到的NM-PDU。

此外,CanNm模块还需: * 向DET模块报告运行时错误CANNM_E_INVALID_PN_SYNC_SHUTDOWN_REQUEST。 * 如果CanNmPnSyncShutdownErrorReactionEnabled设置为TRUE,则最晚在下一个主函数(Main Function)调用中请求发送具有当前PN信息NM PDU。

如果CanNmSynchronizedPncShutdownEnabled设置为TRUE,则接收到的NM-PDU中的PNI位需设置为1,PNSR位也需设置为1,CanNm模块应根据部分网络配置(即:对应的NM通道的NmPncBitVectorOffset和NmPncBitVectorLength),从收到的NM-PDU中提取PNC位向量,并通过调用Nm_ForwardSynchronizedPncShutdown转发PNC位向量。

注意:

仅当请求同步PNC关闭时,PNSR位才可能设置为1。同步的PNC关闭需在PN拓扑中处理。所以假设所有协调器都启用了同步PNC关闭,或者所有协调器都禁用了同步PNC关闭。两者的混合会导致非同步的PNC关闭。这种情况是需要避免的。

6.11.2. NM PDU的Tx处理

如果CanNmPnEnabled为TRUE,CanNm模块应将发送的PNI位的值设置为1。

如果CanNmPnEnabled为FALSE,CanNm模块应将发送的PNI位的值始终设置为0。

注意:

如果使用部分网络,则必须使用CBV。

6.11.2.1. 同步PNC关闭

如果CanNmPnEnabled为TRUE,则NM-PDU未配置为CanIf中的触发传输,即:CanIfTxPduTriggerTransmit设置为FALSE,没有同步PNC关闭的请求正待处理,并且NM-PDU必须被传输,CanNm模块需按照给定的顺序执行以下操作:

  • 调用Nm_PncBitVectorTxIndication(\<NM-channel>, \<buffer to store the unfiltered PNC bit vector of aggregated internal PNC requests>) 来指示传输请求和取得内部PNC请求。
  • 通过相应NM通道的NmPncBitVectorOffset和NmPncBitVectorLength,将接收到的用于内部PNC请求的PNC位向量复制到NM-PDU。
  • 如果启用了用户数据,则获取可用数据(启用了CanNmComUserDataSupport,则从Com获取。否则从内部存储中获取)并复制NM-PDU的用户数据范围中的数据。
  • 通过调用CanIf_Transmit触发NM-PDU的传输。

如果CanNmSynchronizedPncShutdownEnabled为TRUE,并且服务CanNm_RequestSynchronizedPncShutdown被调用,CanNm模块应将每个给定NM通道 (nmChannelHandle) 的给定PNC(pncId)存储为一个待处理的同步PNC关闭的请求。

注意: 所有同步PNC关闭请求的PNC的聚集,作为PN关闭消息进行传输(将CBV中的PNSR位设置为1),并在CanNm_MainFunction的上下文中异步完成。

6.11.3. 内部请求的部分网络集群的处理

所有内部PNC请求均由ComM维护。ComM将每个通道的聚集内部PNC请求作为PNC位向量转发到NmIf。这个PNC位向量携带了所谓的内部请求数组IRA(Internal Request Array)。每次发送NM PDU时,CanNm都必须从NmIf获取最新的IRA。NmIf将IRA信息提供给CanNm,并更新PNC重置计时器。即每次发送相关PNC时,重新启动PNC重置计时器。

注意:

对于CanNmPnEnabled为TRUE的所有已配置NM通道,CanNm将调用Nm_PncBitVectorTxIndication(\<NM-channel>, \< buffer to store the unfiltered PNC bit vector of the aggregated internal PNC requests>),来指示传输并获取当前内部PNC请求作为相应配置NmPncBitVectorLength的PNC 位向量。CanNm将接收到的内部PNC请求复制到NM-PDU的PNC位向量字节。

6.11.4. 网络管理PDU过滤算法(已过时)

6.11.5. 内部和外部请求的部分网络的聚合(已过时)

6.11.6. 外部请求的部分网络的聚合(已过时)

6.11.7. 通过CanNm_NetworkRequest自发传输NM PDU

6.12. 传输错误处理

6.13. CanNm API 的功能要求

6.14. 主函数调度