AUTOSAR CAN NM(CAN网络管理)

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集群。

Figure4_1.png

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算法的操作模式。

Figure7-5

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_PassiveStartUpCanNm模块将不执行该服务并返回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设置为TRUECanNm将在离开重复消息状态时,清除重复消息位。

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

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

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)。

注意:

此需求隐含地包含,如果启用CanNmStayInPbsEnabledCanNm将永远不会因为超时而离开,即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)的转换。

注意:

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

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

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

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

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

CanNm模块在总线睡眠模式(Bus-Sleep Mode)下成功接收到网络管理PDUCanNm_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_PassiveStartUpCanNm模块应进入网络模式(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

在初始化期间,如果CanNmPnEnabledTRUECanNm模块应将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) 位于第二个字节。

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)占用。所有会多一个字节可用于用户数据。
  • 网络管理PDU的长度由全局ECUC模块中的PduLength参数定义。启用的系统字节数和长度之间的差异是用户数据字节的数量。

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

Figure7_2.png

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

控制位向量应包括:

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

注意:

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

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

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

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

6.7. 通信调度

6.7.1. 传输(Transmission)

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

Figure9-1

注意:

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

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设置为TRUECanNm_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)

Figure9-2

如果成功接收到NM PDUCanIf模块将调用回调函数CanNm_RxIndication

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

6.8. 降低总线负载机制

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

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

  1. 当接收到NM PDUCanNm消息周期计时器需使用此节点特定的时间参数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)并且 CanNmBusLoadReductionEnabledTRUECanNm模块需激活降低总线负载机制。

如果降低总线负载机制全局启用,即CanNmBusLoadReductionEnabledTRUE。对于激活的特定网络,PDU传输能力被启用,并为此网络调用了函数CanNm_RxIndicationCanNm模块需使用节点特定的时间参数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_RemoteSleepIndicationCanNm通知模块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_RemoteSleepCancellationCanNm通知模块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_TxConfirmationCanNm将通过调用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设置为TRUEAUTOSAR 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设置为TRUECanNm已进入网络模式(Network Mode)或已调用Nm_CoordReadyToSleepCancellation,则它应在第一次接收到NmCoordinatorSleepReady位设置为1NM PDU时,通过调用Nm_CoordReadyToSleepIndication来通知Nm模块。

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

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

6.10. 整车唤醒

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

6.10.1. 接收路径(Rx Path)

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

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

注意:

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

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

注意:

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

6.10.2. 传输路径(Tx Path)

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

6.11. 部分联网

6.11.1. NM PDU的Rx处理

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

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

注意:

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

如果CanNmPnEnabledTRUE,接收到的NM-PDU中的PNI位0,并且CanNmAllNmMessagesKeepAwakeFALSE,则CanNm模块需忽略所接收到的NM-PDU

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

6.11.2. NM PDU的Tx处理

如果CanNmPnEnabledTRUECanNm模块应将发送的PNI位的值设置为1

如果CanNmPnEnabledFALSECanNm模块应将发送的PNI位的值始终设置为0

注意:

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

6.11.3. 网络管理PDU过滤算法

NM-PDU过滤算法的目的是丢弃所有收到的与ECU无关的NM-PDU。如果网络上没有与接收ECU相关的NM-PDU,则NM超时计时器不再重新启动,并且CanNm模块在活动总线通信期间更改为准备总线睡眠模式(Prepare Bus-Sleep Mode)。

为了区分与ECU相关的NM-PDU和不相关的PDUCanNm评估包含请求ECU提供的PN请求的NM用户数据。PN请求信息的每一位代表一个PN

如果ECU是某个特定部分网络的一部分。它是静态配置的。如果ECU不是请求的部分网络的一部分,则忽略NM-PDU

在初始化期间,CanNm需在CanNmPnEnabledTRUE的所有网络上,禁用NM-PDU过滤算法。

如果CanSm调用CanNm_ConfirmPnAvailabilityNM-PDU过滤算法则需在指定的通道上被启用。

论据:

这是允许发生故障的PN收发器(PN transceiver)与其余网络同步关闭所必需的。

注意:

如果未启用NM-PDU过滤算法,例如:由于PN收发器(PN transceiver)故障,CanNm在接收到NM-PDU时会重新启动NM-Timeout Timer,从而接着执行正常的关机行为。

NM-PDU过滤算法应评估接收到的由CanNmPnInfoOffset定义的NM-PDU的字节(以字节为单位),从字节0开始到CanNmPnInfoLength(以字节为单位)。此范围称为PN信息范围(PN Info Range)。

PN信息范围的每一位代表一个部分网络(Partial Network)。如果该位设置为1,则请求部分网络。如果该位设置为0,则没有对该PN的请求。

过滤算法应将接收到的PN信息与PN过滤掩码进行比较(按位进行与操作),以检测是否请求了相关的PN

PN过滤器掩码的每一位应具有以下含义:

  • 0:PN请求与ECU无关。如果在接收到的NM-PDU中设置了该位,则ECU的通信堆栈不会保持唤醒。
  • 1:PN请求与ECU相关。如果在接收到的NM-PDU中设置了该位,则ECU的通信堆栈保持唤醒。

如果在收到的NM-PDU中请求了至少一个相关的PN,则此PDU不应从进一步的Rx指示处理中丢弃。

如果在收到的NM-PDU中没有请求相关的PN,并且CanNmAllNmMessagesKeepAwakeFALSE,则此PDU应从进一步的处理中删除 。

如果在收到的NM-PDU中没有请求相关的PN,并且CanNmAllNmMessagesKeepAwakeTRUE,则此PDU不应从进一步的Rx指示处理中丢弃。

注意:

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

6.11.3.1. 举例

如下图所示,NM PDU只有字节4和字节5包含PN信息:

  • CanNmPnInfoOffset = 4
  • CanNmPnInfoLength = 2

Figure7-3

对于此示例,定义了两个CanNmPnFilterMaskBytes,例如:

  • CanNmPnFilterMaskByteIndex = 0,CanNmPnFilterMaskByteValue = 0x01
  • CanNmPnFilterMaskByteIndex = 1,CanNmPnFilterMaskByteValue = 0x97

过滤器算法的动作和结果将是:

Figure7-4

由于其中的一个字节包含相关信息,所以该NM PDU不会在进一步的Rx指示处理中被丢弃。

6.11.4. 内部和外部请求的部分网络的聚合

由于部分网络的活动(例如,为了防止错误超时),每个必须切换I-PDU组的ECU都使用到此功能。。

如果内部或外部请求相应的PN,则I-PDU组需要被打开。直到所有对相应PN的内部和外部请求都被释放后,I-PDU组才需要被关闭。

切换I-PDU组的逻辑是由ComM实现。CanNm仅提供某个PN是否被请求的信息。COM模块被用于将数据传输到上层模块。

为了在所有直接连接的ECU上同步切换I-PDU组,CanNm需在每个ECU上,同时或者几乎同时,向上层提供请求变更的信息。这就是为什么在每次接收和发送NM PDU时,都会重启重置计时器(Reset timer)的原因。

内部/外部请求的PN的聚集状态称为EIRA外部内部请求数组(External Internal Request Array)。

如果CanNmPnEiraCalcEnabledTRUECanNm需提供存储在所有相关通道(CanNmPnEnabledTRUE的所有CanNm通道)上组合的外部和内部请求PN的可能性。在初始化时,所有PN的值应设置为0(未请求)。

如果以下条件都满足,CanNm需要存储这些PN的请求信息(数值为1)。

  • CanNmPnEiraCalcEnabledTRUE
  • 收到一个NM-PDU
  • 在此消息中PN已经被请求。即:比特位设置为1
  • 请求的PN在配置的PN过滤器掩码内设置为1

如果以下条件都满足,CanNm也需要存储这些PN的请求信息(数值为1)。

  • CanNmPnEiraCalcEnabledTRUE
  • CanNm正在请求发送NM-PDU
  • 在此消息中PN已经被请求。即:比特位设置为1
  • 请求的PN在配置的PN过滤器掩码内设置为1

如果CanNmPnEiraCalcEnabledTRUECanNm需提供监控每个PN的可能性,如果该PN在至少一个相关通道上,仍然被外部或内部请求。

注意:

这意味着只需要一个计时器就可以处理多个连接的物理通道上的一个PN。例如:对于6个物理通道的网关,处理8个部分网络(PN)的请求,只需要8个EIRA重置计时器来处理即可。这样可行是因为PN PDU-Group的切换是由ECU全局完成的,并不依赖于物理通道。

如果CanNmPnEiraCalcEnabledTRUE,并且在消息接收或发送时,PN被请求 ,则需根据CanNmPnResetTime重新启动对该PN的监视。

注意:

必须将CanNmPnResetTime配置为大于CanNmMsgCycleTime的值。如果CanNmPnResetTime配置小于CanNmMsgCycleTime的值,并且只有一个ECU请求PN,则请求状态在EIRA中切换。因为请求的ECU在能够发送下一个NM PDU之前,请求状态已停止。

同时必须将CanNmPnResetTime配置为小于CanNmTimeoutTime的值,以避免在NM已更改为准备总线睡眠后,计时器才可能会超时。

如果CanNmPnEiraCalcEnabledTRUE,并且在CanNmPnResetTime内未再次请求PN,则该PN的相应存储值应设置为未请求(数值为0)。

如果CanNmPnEiraCalcEnabledTRUE,并且存储的PN值更改为已请求或恢复为未请求。CanNm应通过为配置的EIRA PDU,调用PduR_CanNmRxIndication来通知上层模块,即:更改的EIRA信息应传递给COM

6.11.5. 外部请求的部分网络的聚合

此功能可供网关使用来只收集外部的PN请求。

外部PN请求被镜像回请求总线,并提供给中央网关的其他(必需的)物理通道。在子网关的情况下,请求位不得镜像回请求的物理通道,以避免中央网关和子网关之间的静态唤醒。该逻辑应由ComM实施。CanNm模块提供是否有PN被外部请求的信息。COM模块用于向上层传输数据。

外部请求 PN 的聚合状态称为ERA外部请求数组(External Request Array)。

如果CanNmPnEraCalcEnabledTRUECanNm应提供在每个相关通道上存储外部请求的PN的可能性。在初始化时,所有PN的值应设置为0,即未被请求状态。

如果以下条件都满足,CanNm需存储这些PN的请求信息(数值为1

  • CanNmPnEraCalcEnabledTRUE
  • 收到一个NM-PDU
  • 在此消息中PN已经被请求。即:比特位设置为1
  • 请求的PN在配置的PN过滤器掩码内设置为1

如果CanNmPnEraCalcEnabledTRUE,则CanNm应提供在每个相关通道上监视每个PN的可能性,确认每个PN是否仍然被外部请求。

注意:

这意味着需要一个单独的计时器来处理多个物理通道上的一个PN。例如:对于6个物理通道的网关,处理8个部分网络(PN)的请求,需要48个ERA重置计时器处理。不能像EIRA定时器那样组合复位定时器,因为外部请求不能通过子网关镜像回请求总线,所以需要检测作为请求位源的物理通道。

如果CanNmPnEraCalcEnabledTRUE,并且消息接收有PN的请求,则需根据CanNmPnResetTime时间重新启动对该PN的监视。

注意:

必须将CanNmPnResetTime配置为大于CanNmMsgCycleTime的值。如果CanNmPnResetTime配置小于CanNmMsgCycleTime的值,并且只有一个ECU请求PN,则请求状态在ERA中切换。因为请求的ECU在能够发送下一个NM PDU之前,请求状态已停止。

同时必须将CanNmPnResetTime配置为小于CanNmTimeoutTime的值,以避免在NM已更改为准备总线睡眠后,计时器才可能会超时。

如果CanNmPnEraCalcEnabledTRUE,并且在CanNmPnResetTime内未再次请求PN,则该PN的相应存储值应设置为未请求(数值为0)。

如果CanNmPnEraCalcEnabledTRUE,并且存储的PN值更改为已请求或恢复为未请求。CanNm应通过为配置的ERA PDU,调用PduR_CanNmRxIndication来通知上层模块,即:更改的ERA信息应传递给COM

如果CanNmPnEiraCalcEnabledTRUE, 并且CanNmPnEraCalcEnabledTRUE ,则PN状态信息必须分别存储,同时包含EIRAERA信息。

6.11.6. 通过CanNm_NetworkRequest自发传输NM PDU

如果CanNm_NetworkRequest被调用,并且CanNmPnHandleMultipleNetworkRequestsTRUECanNm处于就绪睡眠状态(Ready Sleep State)、正常操作状态(Normal Operation State)或重复消息状态(Repeat Message State),则CanNm需更改为或者重新启动为重复消息状态(Repeat Message State)。

注意:

如果CanNmPnHandleMultipleNetworkRequests设置为TRUE,则CanNm的立即传输(Immediate Transmission)功能是强制性的。

如果PN请求位发生变化,PN控制模块(例如:ComM)负责调用CanNm_NetworkRequest

6.12. 传输错误处理

根据配置,CanNm需评估NM PDU是否已成功传输的确认。

CanNm将监视这些确认,并在以下情况向上层模块发出警报

  • 收到带有结果E_NOT_OK的传输确认
  • 在特定时间量内未收到传输确认。

对于部分网络(PN),超时监控是必须的。监控确保当网络上的所有ECU使用部分网络收发器时,第一条消息会得到确认。否则CanSM被会通知,并需重新启动CAN驱动程序。

如果CanNmPassiveModeEnabled设置为TRUE或者CanNmImmediateTxConfEnabled设置为TRUECanNm不需执行传输错误处理。

理由:

只有在允许节点传输NM PDU,并且来自CanIf模块的真实确认被评估时,传输错误处理才有意义。

CanNmGlobalPnSupport设置为TRUE,定义了CanNmMsgTimeoutTime,如果CanNm通过调用CanIf_Transmit请求传输NM PDU,则CanNm将使用 CanNmMsgTimeoutTime启动NM消息Tx超时计时器

CanNmGlobalPnSupport设置为TRUE,定义了CanNmMsgTimeoutTime,如果CanNm_TxConfirmation函数被调用,则CanNm将停止NM消息Tx超时计时器

如果下列条件中有一条被满足,则CanNm需调用Nm_TxTimeoutException函数:

  • CanNm_TxConfirmation调用结果为E_NOT_OK
  • CanNmGlobalPnSupport设置为TRUE,并且NM消息Tx超时计时器已经超时。

如果CanNmGlobalPnSupport设置为TRUE,并且NM消息Tx超时计时器已经超时,则CanNm需调用CanSM_TxTimeoutException函数。

6.13. CanNm API的功能需求

如果CanNmNodeDetectionEnabledCanNmRepeatMsgIndEnabled都设置为TRUE,并且接收到重复消息请求位,CanNm模块需调用回调函数Nm_RepeatMessageIndication

如果CanNmUserDataEnabled被启用,但并没有可用的用户数据字节,则CanNm模块将在配置或编译期间引发错误。

6.14. 应用注释

6.14.1. 唤醒通知

唤醒通知在ECU状态管理器规范中有详细定义。

6.14.2. 耦合网络的协调

需支持总线同步,可以使用配置参数CanNmBusSynchronizationEnabled进行静态配置。

注意:

由于可以随时关闭CanNm,所以调用APINm_SynchronizationPoint不被支持。

7. API规范

7.1. 函数定义

7.1.1. CanNm_Init

说明: 初始化CanNm模块。。

void CanNm_Init( const CanNm_ConfigType* cannmConfigPtr )

7.1.2. CanNm_DeInit

说明: 去初始化 CanNm 模块。

void CanNm_DeInit( void )

7.1.3. CanNm_PassiveStartUp

说明: AUTOSAR CAN NM的被动启动。它触发从总线睡眠模式(Bus-Sleep Mode)或者准备总线睡眠模式(Prepare Bus-Sleep Mode)到重复消息状态(Repeat Message State)的网络模式(Network Mode)的转换。

Std_ReturnType CanNm_PassiveStartUp( NetworkHandleType nmChannelHandle )

7.1.4. CanNm_NetworkRequest

说明: ECU需要在总线上通信,而请求网络。

Std_ReturnType CanNm_NetworkRequest( NetworkHandleType nmChannelHandle )

7.1.5. CanNm_NetworkRelease

说明: ECU无需在总线上通信,从而释放网络。

Std_ReturnType CanNm_NetworkRelease( NetworkHandleType nmChannelHandle )

7.1.6. CanNm_DisableCommunication

说明: 由于ISO 14229通信控制 (28 hex) 服务而禁用NM PDU传输能力

Std_ReturnType CanNm_DisableCommunication( NetworkHandleType nmChannelHandle )

7.1.7. CanNm_EnableCommunication

说明: 由于ISO 14229通信控制 (28 hex) 服务而启用NM PDU传输能力

Std_ReturnType CanNm_EnableCommunication( NetworkHandleType nmChannelHandle )

7.1.8. CanNm_SetUserData

说明: 为总线上接下来传输的NM PDU设置用户数据。

Std_ReturnType CanNm_SetUserData( NetworkHandleType nmChannelHandle, const uint8* nmUserDataPtr )

7.1.9. CanNm_GetUserData

说明: 从最近收到的NM PDU中获取用户数据。

Std_ReturnType CanNm_GetUserData( NetworkHandleType nmChannelHandle, uint8* nmUserDataPtr )

7.1.10. CanNm_Transmit

说明: 请求传输PDU

Std_ReturnType CanNm_Transmit( PduIdType TxPduId, const PduInfoType* PduInfoPtr )

7.1.11. CanNm_GetNodeIdentifier

说明: 从最近收到的NM PDU中获取节点标识符。

Std_ReturnType CanNm_GetNodeIdentifier( NetworkHandleType nmChannelHandle, uint8* nmNodeIdPtr )

7.1.12. CanNm_GetLocalNodeIdentifier

说明: 获取为本地节点配置的节点标识符。

Std_ReturnType CanNm_GetLocalNodeIdentifier( NetworkHandleType nmChannelHandle, uint8* nmNodeIdPtr )

7.1.13. CanNm_RepeatMessageRequest

说明: 为总线上下一个传输的NM PDU设置重复消息请求位。

Std_ReturnType CanNm_RepeatMessageRequest( NetworkHandleType nmChannelHandle )

7.1.14. CanNm_GetPduData

说明: 从最近收到的NM PDU中获取整个PDU数据。

Std_ReturnType CanNm_GetPduData( NetworkHandleType nmChannelHandle, uint8* nmPduDataPtr )

7.1.15. CanNm_GetState

说明: 返回网络管理的状态和模式。

Std_ReturnType CanNm_GetState( NetworkHandleType nmChannelHandle, Nm_StateType* nmStatePtr, Nm_ModeType* nmModePtr )

7.1.16. CanNm_GetVersionInfo

说明: 该服务返回该模块的版本信息。

void CanNm_GetVersionInfo( Std_VersionInfoType* versioninfo )

7.1.17. CanNm_RequestBusSynchronization

说明: 请求总线同步。

Std_ReturnType CanNm_RequestBusSynchronization( NetworkHandleType nmChannelHandle )

7.1.18. CanNm_CheckRemoteSleepIndication

说明: 检查远程睡眠指示是否发生。

Std_ReturnType CanNm_CheckRemoteSleepIndication( NetworkHandleType nmChannelHandle, boolean* nmRemoteSleepIndPtr )

7.1.19. CanNm_SetSleepReadyBit

说明: 设置控制位向量中的NM协调器睡眠就绪位。

Std_ReturnType CanNm_SetSleepReadyBit( NetworkHandleType nmChannelHandle, boolean nmSleepReadyBit )

7.2. Callback通知

7.2.1. CanNm_TxConfirmation

说明: 下层通信接口模块确认PDU的传输,或者PDU的传输失败。

void CanNm_TxConfirmation( PduIdType TxPduId, Std_ReturnType result )

7.2.2. CanNm_RxIndication

说明: 指示从较低层通信接口模块接收到的PDU

void CanNm_RxIndication( PduIdType RxPduId, const PduInfoType* PduInfoPtr )

7.2.3. CanNm_ConfirmPnAvailability

说明: 在指定的NM通道上启用PN过滤器功能。可用性:API仅在CanNmGlobalPnSupportTRUE时可用。

void CanNm_ConfirmPnAvailability( NetworkHandleType nmChannelHandle )

7.2.4. CanNm_TriggerTransmit

说明: 在此API中,上层模块将检查可用数据是否适合PduInfoPtr->SduLength报告的缓冲区大小。如果合适,它将其数据复制到PduInfoPtr->SduDataPtr提供的缓冲区中,并在PduInfoPtr->SduLength中更新实际复制数据的长度。如果不是,则返回E_NOT_OK而不更改PduInfoPtr

Std_ReturnType CanNm_TriggerTransmit( PduIdType TxPduId, PduInfoType* PduInfoPtr )

7.3. 周期函数

7.3.1. CanNm_MainFunction

说明: CanNm的主函数。

void CanNm_MainFunction( void )

微信扫一扫,获取更多及时资讯

微信扫一扫