目录
1 简介和功能概述
本文档描述了AUTOSAR CAN网络管理 (CanNm) 的概念、核心功能、可配置特性、接口和配置问题。
AUTOSAR CAN网络管理是一个独立于硬件的协议,只能在CAN上使用(有关限制,请参阅章节4.1)。其主要目的是协调网络正常运行和总线睡眠模式之间的转换。
除了核心功能外,还提供了可配置的功能,例如:实现一个服务来检测所有当前节点或检测所有其他节点是否准备好休眠。
CAN网络管理 (CanNm) 功能提供网络管理接口 (NmIf) 和 CAN接口 (CanIf) 模块之间的适配。
总结如下:
- 作用:网络管理就是通过在各个ECU的网络上,发送一些命令制定一套规则,来实现各个ECU的协同睡眠和唤醒。
- 核心思想:如果节点需要保持通信,则节点需要周期的发送NM消息,否则停止发送NM消息。如果总线上的所有节点不需要使用总线,那么总线上过了一段时间没有NM Messages时,则会进入Bus-Sleep Mode。
2 缩略语
2.1 缩写表
缩写 | 描述 | 解释 |
---|---|---|
CanIf | CAN Interface | CAN接口层 |
CanNm | CAN Network Management | CAN网路管理模块 |
CBV | Control Bit Vector | 控制位向量 |
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 术语
术语 | 描述 |
---|---|
PDU transmission ability is disabled | 通过服务CanNm_DisableCommunication禁止NM PDU的发送 |
Repeat Message Request Bit Indication | 在CanNm_RxIndication接收到NM PDU的CBV中的重复消息状态请求位被置1 |
PN filter mask | 配置参数CanNmPnFilterMaskByte的过滤掩码字节,用于过滤与节点相关的NM PDU |
Top-level PNC coordinator | 顶级PNC协调器是一个ECU,它在网络中充当PNC网关,并在所有分配的通道上处理至少一个主动协调的PNC;如果同步PNC关闭被启用且如果网络中没有其他ECU请求它们,顶级PNC协调器触发这些PNC关闭, |
Intermediate PNC coordinator | 中间PNC协调器是一个ECU,它在网络中充当PNC网关,并在至少一个指定的信道上处理至少一个被动协调的PNC。如果启用了同步PNC关闭,它将这些pnc收到的关闭请求转发到相应的主动协调通道,并相应地开始关闭它们 |
Subordinated PNC node | 从属的PNC节点是一个ECU,它在网络中根本不充当PNC协调器。它像处理普通的NM消息一样处理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. 限制
- CanNm的一个通道只关联一个网络中的一个网络管理集群(network management cluster)。
- 一个网络管理集群的一个节点只能有一个CanNm通道。
- CanNm的一个通道只关联同一个ECU内的一个网络。
- CanNm仅适用于CAN系统。
图4-1展示了一个示例ECU中的AUTOSAR网络管理堆栈,该示例ECU至少包含一个CanNm集群。
4.2 适用于汽车领域
CanNm模块可以在上述限制下应用于任何汽车领域。
5 对其他模块的依赖
CAN网络管理(CanNm)主要使用CAN接口(CanIf[4])的服务,并为通用网络管理接口(NmIf[7])提供服务。
6 主要学习方向
- 具备PN功能的网络管理
- 不具备PN功能的网络管理
- 网络协调功能
7 功能规范
7.1 协调算法
AUTOSAR CanNm基于分散的直接网络管理策略,这意味着每个网络节点仅根据在通信系统内收发的网络管理PDU执行自给自足的活动。
AUTOSAR CanNm算法基于周期性的NM PDU,集群中的所有节点接收这些广播传输的NM PDU。NM PDU的接收表明发送节点希望保持网络管理集群处于唤醒状态。如果任何节点准备好进入总线睡眠(Bus-Sleep)模式,它就会停止传输NM PDU,但只要收到来自其他节点的NM PDU,节点就需推迟转换到Bus-Sleep模式。最后,如果由于不再接收到NM PDU而导致专用计时器超时,则每个节点都会启动到总线睡眠模式的转换。
如果网络管理集群中的任何节点需要总线通信,它可以通过传输NM PDU将网络管理集群从总线睡眠模式唤醒。有关唤醒过程本身的更多详细信息,请参阅ComM规范。
AUTOSAR CanNm算法的主要概念可以通过以下两个关键需求来定义:CanNm集群中的每个网络节点只要需要总线通信,就应该定期传输网络管理PDU;否则它将无需传输网络管理PDU。
如果CanNmStayInPbsEnabled被禁用,并且CanNm集群中的总线通信被释放,并且在可配置的(CanNmTimeoutTime + CanNmWaitBusSleepTime)时间里,总线上没有任何NM PDU,则需转换到Bus-Sleep模式。
CanNm算法的整体状态机可以定义如下图:
注意:状态转换最晚必须在下一个主函数中执行。
7.2 运行模式
AUTOSAR CanNm应包含在模块接口上可见的三种操作模式:
网络模式(Network Mode)
准备总线睡眠模式(Prepare Bus-Sleep Mode)
总线睡眠模式(Bus-Sleep Mode)
AUTOSAR CanNm操作模式的变化需通过回调函数通知上层(ComM状态机同步变化)。当CanNm_GetState被调用时,CanNm将返回当前的NM状态和模式。
7.2.1 网络模式
网络模式应包括三个内部状态:
重复消息状态(Repeat Message State)
正常操作状态(Normal Operation State)
就绪睡眠状态(Ready Sleep State)
当从总线睡眠模式(Bus-Sleep Mode)/准备总线睡眠模式(Prepare Bus-Sleep Mode)进入网络模式(Network Mode)时,CanNm模块需默认进入重复消息状态(Repeat Message State)。
当进入网络模式时,CanNm模块需启动NM超时计时器(NM-Timeout Timer),同时通过调用回调函数Nm_NetworkMode通知上层(ComM)新的当前操作模式。
在网络模式下成功接收NM PDU(调用CanNm_RxIndication)后,如果启用了PDU发送,CanNm模块需重置NM超时计时器。
在网络模式下成功发送NM PDU(收到带有E_OK的CanNm_TxConfirmation调用)时,CanNm模块需重置NM超时计时器。
注意:如果启用CanNmImmediateTxConfEnabled,则假定每个NM PDU发送请求都会导致NM PDU发送成功。
CanNm模块需在每次启动或重启时,重置NM超时计时器。
如果在网络模式下调用CanNm_PassiveStartUp,CanNm模块将不执行该服务并返回E_NOT_OK。
如果在CanNmDynamicPncToChannelMappingEnabled设置为TRUE,且CanNm处于网络模式的通道上调用函数CanNm_PnLearningRequest,则 CanNm模块需在该通道上将CBV中的 Repeat Message Request位和部分网络学习Partial Network Learning位设置为1,并更改为或重新启动重复消息状态(Repeat Message State)。
如果在CanNmDynamicPncToChannelMappingEnabled设置为TRUE,且CanNm处于网络模式的通道上接收到的部分网络学习(Partial Network Learning)位和 Repeat Message Request位的值为1,则CanNm应在该通道上将CBV中的Partial Network Learning Bit设置为1,并更改或重新启动重复消息状态(Repeat Message State)。
7.2.1.1. 重复消息状态(Repeat Message State)
对于不处于被动模式的节点(请参阅第7.9.3章节),重复消息状态确保从Bus-Sleep 或 Prepare Bus-Sleep到Network Mode的任何转换,对网络上的其他节点都是可见的。 此外它还确保任何节点在最短的时间内保持活动状态。它可用于存在节点的检测。
当进入重复消息状态时,CanNm模块需(重新)开始传输NM PDU,除非被动模式被启用或者通信被禁止。
Repeat Message State中还分为Immediate transmit(快发,对应主动唤醒源请求)和Normal transmit(慢发,对应被动请求);
当NM超时计时器在重复消息状态中超时,CanNm模块需(重新)启动NM超时计时器,同时需向DET报告CANNM_E_NETWORK_TIMEOUT。
网络管理状态机应在由配置参数CanNmRepeatMessageTime确定的可配置时间内保持在重复消息状态;在此时间后,CanNm模块需离开重复消息状态。
当离开重复消息状态时,如果网络已被请求,CanNm模块需进入正常操作状态(Normal Operation State);如果网络已经被释放(ComM请求了NO-COM),则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将在离开重复消息状态时清除部分网络学习位(PNL)。
7.2.1.2. 正常操作状态
正常操作状态确保只要网络被请求(存在主动唤醒源),任何节点都可以保持网络管理集群处于唤醒状态。
当从就绪睡眠状态(Ready Sleep State)进入正常操作状态(Normal Operation State)时,CanNm模块将开始传输NM 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)。
7.2.1.3. 就绪睡眠状态
就绪睡眠状态(Ready Sleep State)确保只要有其他节点保持网络管理集群处于唤醒状态,网络管理集群中的任何节点就会等待进入准备总线睡眠模式。
当从重复消息状态(Repeat Message State)或正常操作状态(Normal Operation State)进入就绪睡眠状态(Ready Sleep State)时,CanNm模块将停止NM 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)。
7.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模块需传输 NM PDU。
论据:集群中的其他节点仍处于准备总线睡眠模式(Prepare Bus-Sleep Mode)。在上述异常情况下,应避免过渡到总线睡眠模式(Bus-Sleep Mode),并且需尽快恢复总线通信。由于CanNm中网络管理PDU的传输偏移,第一个处于重复消息状态的网络管理PDU的传输可能会显着延迟。为了避免网络延迟重新启动,可以立即请求NM PDU的发送。
注:如果CanNmImmediateRestartEnabled设置为TRUE,并且唤醒硬性(wake-up line)被使用,如果所有网络节点在准备总线睡眠模式(Prepare Bus-Sleep Mode)下收到网络请求,则会发生网络管理PDU突发。
7.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)。
7.3 网络状态
网络状态包括两类:被请求(requested)和被释放(released)。它是AUTOSAR CanNm状态机的两个附加的状态,并与状态机同时存在。
网络状态表示软件组件是否需要在总线上通信。当软件组件需要在总线上通信时,网络状态转换为被请求。当软件组件无需在总线上通信时,网络状态转换为被释放;但需注意的是即使网络被释放了,一个ECU仍然可以通信,因为其他一些ECU仍然在请求网络。
通过调用函数CanNm_NetworkRequest,可以用来请求网络。CanNm模块需将当前的网络状态更改为被请求。
通过调用函数CanNm_NetworkRelease,可以用来释放网络。CanNm模块需将当前的网络状态更改为被释放。
7.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模块应将user data的每个字节设置为0xFF,并且CBV位设置为0x00
在初始化期间,如果CanNmPnEnabled为TRUE,CanNm模块应将PNC位向量的每个字节设置为0x00。
7.5. 执行
7.5.1 处理器架构
AUTOSAR CanNm算法需独立于处理器。这也就意味着,它不应依赖于任何处理器特定的硬件支持,所以它需要支持在AUTOSAR范围内的任何处理器架构上的实现。
7.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)。
7.6 NM PDU结构
下图显示了网络管理PDU的格式,以8字节为例,其中:源节点标识符 (SNI) 位于第一个字节,控制位向量 (CBV) 位于第二个字节。
源节点标识符(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参数定义。启用的系统字节数和长度之间的差异是用户数据字节的数量。
注意:在AUTOSAR的R3.2版本中,位1和位2用作NM协调器ID(低位)。
控制位向量应包括:
位 0:重复消息请求位
0:未请求重复消息状态
1:请求重复消息状态
位1:PN 下电请求位(PNSR)
0: NM消息不包含同步部分网络下电请求
1:NM消息包含至少PNC的同步部分网络下电请求
位 3:部分网络学习位(PNL)一般不被使用
0:PNC学习不被请求
1:PNC学习被请求
位 4: 主动唤醒位
0:节点没有唤醒网络(被动唤醒)
1:节点已唤醒网络(主动唤醒)
位 5: 主动唤醒位
0:节点没有唤醒网络(被动唤醒)
1:节点已唤醒网络(主动唤醒)
位 6:部分网络信息位 (PNI)
0:NM PDU 不包含部分网络请求信息
1:NM PDU 包含部分网络请求信息
位 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。
7.7 通信调度
7.7.1 发送(Transmission)
本节中所描述的传输机制仅适用在网络管理PDU传输能力被启用的情况。网络管理PDU传输能力可通过CanNmPassiveModeEnabled进行配置。
注:本节中描述的传输机制仅在CanNmPassiveModeEnabled为FALSE时被开启。
CanNm模块需提供周期性传输模式。在这种传输模式下,CanNm模块将定期发送NM PDU。
CanNm模块需可选地提供具有降低总线负载的周期性传输模式。在这种传输模式下,CanNm模块将根据特定算法发送NM PDU。
周期性传输模式可用于重复消息状态(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。
如果通过CanNm_NetworkRequest,从Bus Sleep
Mode 或 Prepare Bus Sleep Mode进入重复消息状态(Repeat Message State),且CanNmImmediateNmTransmissions大于零,则在进入重复消息状态(Repeat Message State)后,NM PDU应使用CanNmImmediateNmCycleTime作为周期尽快发送;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。
注:在这种情况下,CanNmImmediateNmTransmissions必须大于零。
如果NM PDU需使用CanNmImmediateNmCycleTime来进行传输,CanNm需确保具有此时间的CanNmImmediateNmTransmissions(包括第一次立即传输)被成功请求。 如果对CanIf的传输请求失败(即:返回E_NOT_OK),CanNm将在下一个主函数中重试传输请求。
接着CanNm需使用CanNmMsgCycleTime来继续传输NM PDU。
注:当使用CanNmImmediateNmCycleTime传输NM PDU时,不得传输其他Nm PDU(即:CanNmMsgCycleTime传输周期已经被停止)。
如果NM PDU的发送已经开始,在下列的两种场景中,CanNm模块需通过调用CanIf_Transmit,发送NM PDU。
如果NM PDU的发送已经开始,CanNm消息周期定时器过期,当CanNmSynchronizedPncShutdownEnabled设置为FALSE或如果设置为TRUE并且没有等待同步PNC关闭的请求时,则canm模块应通过调用CanIf_Transmit来发送 NM PDU。
注:如果CanIf_Transmit的函数调用失败,需按章节7.12中所描述的传输错误处理,通知CanNm模块。
如果NM PDU的发送已经开始,CanNm消息周期计时器到期,并且CanNmSynchronizedPncShutdownEnabled设置为TRUE,同步PNC关闭的请求正等待处理(pending),NM PDU的发送应推迟到下一个CanNm_MainFunction。
注:同步的PNC关闭必须立即发送,所以使用CanNmMsgCycleTime传输的周期的NM消息的处理必须被延迟。在极少数情况下,这可能会导致一个以上主函数周期时间的延迟。
在网络管理时序上,因为必须考虑使用CanNmMsgCycleTime传输的NM消息可能会延迟一个以上的主函数周期时间,所以必须满足以下条件,以容忍这些NM消息的多次延迟:(CanNmPnResetTime – CanNmMsgCycleTime) > n * CanNmMainFunctionPeriod,其中n表示如果没有收到NM消息,则在PnResetTime超时到期之前允许的延迟数。
如果CanNm消息周期计时器到期,则CanNm模块必须使用CanNmMsgCycleTime来重新启动。
如果NM PDU的传输已停止,CanNm模块需取消消息周期计时器。
7.7.2 接收(Reception)
如果成功接收到NM PDU,CanIf模块将调用回调函数CanNm_RxIndication。
在调用回调函数CanNm_RxIndication时,CanNm模块应将函数参数中引用的NM PDU的数据复制到内部buffer。
7.8. 降低总线负载机制
NM PDU的传输周期通常由时间参数CanNmMsgCycleTime决定。对于属于网络管理集群的所有NM节点,该参数必须相等。如果不采取任何行动,这将导致一个总线负载(bus load)的问题。同时问题是依据网络管理集群成员数量所决定的。即使可以通过节点特定时间参数CanNmMsgCycleOffset来防止突发,但也需要一种独立于网络管理集群的大小的机制来减少总线负载。
为了实现这一机制,以下两个方面必须予以考虑:
当接收到一帧NM PDU,CanNm消息周期计时器需使用此节点特定的时间参数CanNmMsgReducedTime进行重新加载。则此节点特定时间CanNmMsgReducedTime应大于 ½ CanNmMsgCycleTime且小于CanNmMsgCycleTime。
当一帧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消息周期计时器。
7.9 附加的功能
7.9.1 远程睡眠指示检测
远程睡眠指示(Remote Sleep Indication)表示为以下的一种特殊的场景。网络管理集群中某一个节点处于正常操作状态(Normal Operation State)。网络管理集群中的所有其他节点都准备好进入睡眠状态,即:都处于就绪睡眠状态(Ready Sleep State)。处于正常操作状态(Normal Operation State)的节点仍将继续保持总线唤醒状态。
远程睡眠指示的检测应使用配置参数CanNmRemoteSleepIndEnabled进行静态配置。
如果CanNm模块在由配置参数CanNmRemoteSleepIndEnabled决定的可配置时间量内,没有接收到处于正常操作状态的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模块,集群中的某些节点不再准备好进入睡眠状态,也就是所谓的远程睡眠取消。
当服务CanNm_CheckRemoteSleepIndication被调用,并且当前状态为总线睡眠模式(Bus-Sleep Mode)、准备总线睡眠模式(Prepare Bus-Sleep Mode)或者重复消息状态(Repeat Message State)时,CanNm模块不应执行该服务并应返回E_NOT_OK。
7.9.2 用户数据
为了支持网络管理用户数据,可以使用配置参数CanNmUserDataEnabled开关进行静态配置。
当CanNm_SetUserData被调用时,CanNm模块需为接下来在总线上传输的NM PDU设置网络管理用户数据。
当CanNm_GetUserData被调用时,CanNm模块需将返回最近收到的NM PDU的网络管理用户数据。
注:如果配置了用户数据,它肯定会在重复消息状态(Repeat Message State)下发送。在正常操作状态(Normal Operation State)下,是否发送用户数据取决于降低总线负载机制的配置。处于就绪睡眠状态(Ready Sleep State)的用户数据将不会被发送。
7.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的长度不匹配,则应在生成配置时报告错误。
注:这里意味着user data被当成signals配置于Com,并通过PduR和CanNM交互,之后将CBV和NodeId字节组合发给CanIf。
7.9.3 被动模式
在被动模式下,节点仅接收NM PDU,但不发送任何NM PDU。
被动模式需使用配置参数CanNmPassiveModeEnabled 开关进行静态配置。
注:必须为一个ECU中的所有NM网络启用或禁用被动模式。
7.9.4 网络管理PDU的Rx指示
在调用回调函数CanNm_RxIndication时,当且仅当配置参数CanNmPduRxIndicationEnabled设置为TRUE时,CanNm模块需调用Nm的回调函数Nm_PduRxIndication。
7.9.5 状态变化通知
如果回调Nm_StateChangeNotification被启用,即:配置参数CanNmStateChangeIndEnabled设置为TRUE,AUTOSAR CanNm状态的所有变化都应通过调用Nm_StateChangeNotification通知上层。
7.9.6 通讯控制
通信控制(Communication Control)需通过配置参数CanNmComControlEnabled进行静态配置。
如果服务CanNm_DisableCommunication被调用,则CanNm模块需禁用NM PDU的传输能力。
注:此行为也同样适用于重复消息状态(Repeat Message State)。通信控制功能不影响重复消息状态(Repeat Message State)的持续时间。
当NM PDU传输能力被禁用时,需执行以下操作:
CanNm模块需停止CanNm消息周期定时器(CanNm Message Cycle Timer),以停止网络管理PDU的传输。
CanNm模块需停止NM超时计时器(NM-Timeout Timer)。
CanNm模块需停止远程睡眠指示检测(Remote Sleep Indication Detection)。
当NM PDU传输能力被启用时,需执行以下操作:
NM PDU的传输应最晚在下一个NM主函数中重新开始。
CanNm模块将重新启动NM超时计时器(NM-Timeout Timer)。
如果CanNmRemoteSleepIndEnabled设置为TRUE,则CanNm模块应重新启动远程睡眠指示检测。
如果NM PDU传输能力被禁用,服务CanNm_RequestBusSynchronization需返回E_NOT_OK。
7.9.7 协调器同步支持
当有多个协调器连接到同一总线时,CBV中有一个特殊位NmCoordinatorSleepReady,用于指示主协调器请求启动关闭序列。该算法的主要功能已在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。
7.10 整车唤醒
整车唤醒位(Car Wakeup bit)在NM-PDU中的位置,由配置参数CanNmCarWakeUpBytePosition和CanNmCarWakeUpBitPosition定义。
7.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)的整车唤醒的子网关是必需的,可以避免错误唤醒。
7.10.2 传输路径(Tx Path)
整车唤醒位的传输需由应用程序来处理,可以通过使用CanNm模块提供的网络管理用户数据(NM user data)机制实现。
7.11 部分网络
7.11.1 NM PDU的Rx处理
如果CanNmPnEnabled为FALSE,CanNm不应从进一步的Rx指示处理中丢弃NM PDU,并且部分网络扩展需被禁用。
如果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。
如果CanNmPnEnabled为TRUE,接收到的NM-PDU中的PNI位为1,则CanNm模块将按照第7.11.3章节NM PDU 过滤算法中的描述处理NM-PDU的部分网络信息。
7.11.2 NM PDU的Tx处理
如果CanNmPnEnabled为TRUE,CanNm模块应将发送的PNI位的值设置为1。
如果CanNmPnEnabled为FALSE,CanNm模块应将发送的PNI位的值始终设置为0。
注意:如果使用部分网络,则必须使用CBV。
7.11.3 网络管理PDU过滤算法
NM-PDU过滤算法的目的是丢弃所有收到的与ECU无关的NM-PDU。如果网络上没有与接收ECU相关的NM-PDU,则NM超时计时器不再重新启动,并且CanNm模块在活动总线通信期间更改为准备总线睡眠模式(Prepare Bus-Sleep Mode)。
为了区分与ECU相关的NM-PDU和不相关的PDU,CanNm评估包含请求ECU提供的PN请求的NM用户数据。PN请求信息的每一位代表一个PN。
如果ECU是某个特定部分网络的一部分。它是静态配置的。如果ECU不是请求的部分网络的一部分,则忽略NM-PDU。
在初始化期间,CanNm需在CanNmPnEnabled为TRUE的所有网络上,禁用NM-PDU过滤算法。
如果CanSm调用CanNm_ConfirmPnAvailability,NM-PDU过滤算法则需在指定的通道上被启用。
论据:这是允许发生故障的PN收发器(PN transceiver)与其余网络同步关闭所必需的。
注:如果未启用NM-PDU过滤算法,例如:由于PN收发器(PN transceiver)故障,CanNm在接收到NM-PDU时会重新启动NM-Timeout Timer,从而接着执行正常的关机行为。
NM-PDU过滤算法应评估接收到的由从字节0开始偏移CanNmPnInfoOffset定义的NM-PDU的字节(以字节为单位),长度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,并且CanNmAllNmMessagesKeepAwake为FALSE,则此PDU应从进一步的处理中删除 。
如果在收到的NM-PDU中没有请求相关的PN,并且CanNmAllNmMessagesKeepAwake为TRUE,则此PDU不应从进一步的Rx指示处理中丢弃。
7.11.3.1 举例
如下图所示,NM PDU只有字节4和字节5包含PN信息:
CanNmPnInfoOffset = 4
CanNmPnInfoLength = 2
对于此示例,定义了两个CanNmPnFilterMaskBytes,例如:
CanNmPnFilterMaskByteIndex = 0,CanNmPnFilterMaskByteValue = 0x01
CanNmPnFilterMaskByteIndex = 1,CanNmPnFilterMaskByteValue = 0x97
过滤器算法的动作和结果将是:
由于其中的一个字节包含相关信息,所以该NM PDU不会在进一步的Rx指示处理中被丢弃。
7.11.4 EIRA的部分网络的聚合
由于部分网络的活动(例如,为了防止错误超时),每个必须切换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)。
如果CanNmPnEiraCalcEnabled为TRUE,CanNm需提供存储在所有相关通道(CanNmPnEnabled为TRUE的所有CanNm通道)上组合的外部和内部请求PN的可能性。在初始化时,所有PN的值应设置为0(未请求)。
如果以下条件都满足,CanNm需要存储这些PN的请求信息(数值为1):
CanNmPnEiraCalcEnabled为TRUE
且收到一个NM-PDU
且在此消息中PN已经被请求。即:比特位设置为1。
且请求的PN在配置的PN过滤器掩码内设置为1。
如果以下条件都满足,CanNm也需要存储这些PN的请求信息(数值为1)。
CanNmPnEiraCalcEnabled为TRUE
且CanNm正在请求发送NM-PDU
且在此消息中PN已经被请求。即:比特位设置为1。
请求的PN在配置的PN过滤器掩码内设置为1。
如果CanNmPnEiraCalcEnabled为TRUE,CanNm需提供监控每个PN的可能性,如果该PN在至少一个相关通道上,仍然被外部或内部请求。
注:这意味着只需要一个计时器就可以处理多个连接的物理通道上的一个PN(一个Timer就能对应多个EIRA)。例如:对于6个物理通道的网关,处理8个部分网络(PN)的请求,只需要8个EIRA重置计时器来处理即可。这样可行是因为PN PDU-Group的切换是由ECU全局完成的,并不依赖于物理通道。
如果CanNmPnEiraCalcEnabled为TRUE,并且在消息接收或发送时,PN被请求 ,则需根据CanNmPnResetTime重新启动对该PN的监视。
注意:必须将CanNmPnResetTime配置为大于CanNmMsgCycleTime的值。如果CanNmPnResetTime配置小于CanNmMsgCycleTime的值,并且只有一个ECU请求PN,则请求状态在EIRA中切换。因为请求的ECU在能够发送下一个NM PDU之前,请求状态已停止。
同时必须将CanNmPnResetTime配置为小于CanNmTimeoutTime的值,以避免在NM已更改为准备总线睡眠后,计时器才可能会超时。
如果CanNmPnEiraCalcEnabled为TRUE,并且在CanNmPnResetTime内未再次请求PN,则该PN的相应存储值应设置为0。
如果CanNmPnEiraCalcEnabled为TRUE,并且存储的PN值更改为已请求或恢复为未请求。CanNm应通过为配置的EIRA PDU,调用PduR_CanNmRxIndication来通知上层模块,即:更改的EIRA信息应传递给COM。
7.11.5 ERA的部分网络的聚合
此功能可供网关使用来只收集外部的PN请求。
外部PN请求被镜像回请求总线,并提供给中央网关的其他(必需的)物理通道。在子网关的情况下,请求位不得镜像回请求的物理通道,以避免中央网关和子网关之间的静态唤醒。该逻辑应由ComM实施。CanNm模块提供是否有PN被外部请求的信息。COM模块用于向上层传输数据。
外部请求 PN 的聚合状态称为ERA外部请求数组(External Request Array)。
如果CanNmPnEraCalcEnabled为TRUE,CanNm应提供在每个相关通道上存储外部请求的PN的可能性。在初始化时,所有PN的值应设置为0,即未被请求状态。
如果以下条件都满足,CanNm需存储这些PN的请求信息(数值为1):
CanNmPnEraCalcEnabled为TRUE
且收到一个NM-PDU
且在此消息中PN已经被请求。即:比特位设置为1。
且请求的PN在配置的PN过滤器掩码内设置为1。
注:PNSR位设置为1只有在请求同步PNC关闭时才有可能。应该跨PN拓扑处理同步的PNC关闭。因此,假设所有协调器都启用了同步PNC关闭,或者所有协调器都禁用了同步PNC关闭。两者的混合将导致不同步的PNC关闭,这是必须避免的。
如果CanNmPnEraCalcEnabled为TRUE,则CanNm应提供在每个相关通道上监视每个PN的可能性,确认每个PN是否仍然被外部请求。
注:这意味着需要一个单独的计时器来处理多个物理通道上的一个PN。例如:对于6个物理通道的网关,处理8个部分网络(PN)的请求,需要48个ERA重置计时器处理。不能像EIRA定时器那样组合复位定时器,因为外部请求不能通过子网关镜像回请求总线,所以需要检测作为请求位源的物理通道。
如果CanNmPnEraCalcEnabled为TRUE,并且消息接收有PN的请求,则需根据CanNmPnResetTime时间重新启动对该PN的监视。
注:同理CanNmMsgCycleTime<CanNmPnResetTime<CanNmTimeoutTime
如果CanNmPnEraCalcEnabled为TRUE,并且在CanNmPnResetTime内未再次请求PN,则该PN的相应存储值应设置为未请求(数值为0)。
如果CanNmPnEraCalcEnabled为TRUE,并且存储的PN值更改为已请求或恢复为未请求。CanNm应通过为配置的ERA PDU,调用PduR_CanNmRxIndication来通知上层模块,即:更改的ERA信息应传递给COM。
如果CanNmPnEiraCalcEnabled为TRUE, 并且CanNmPnEraCalcEnabled为TRUE ,则PN状态信息必须分别存储,同时包含EIRA和ERA信息。
7.11.6 通过CanNm_NetworkRequest自发发送NM PDU
如果CanNm_NetworkRequest被调用,并且CanNmPnHandleMultipleNetworkRequests为TRUE,CanNm处于就绪睡眠状态(Ready Sleep State)、正常操作状态(Normal Operation State)或重复消息状态(Repeat Message State),则CanNm需更改为或者重新启动为重复消息状态(Repeat Message State)。
注:如果CanNmPnHandleMultipleNetworkRequests为TRUE,则CanNm的立即传输(Immediate Transmission)功能是强制性的。
如果PN请求位发生变化,PN控制模块(例如:ComM)负责调用CanNm_NetworkRequest。
本篇其实是我自己复看规范的笔记,比较基础。进阶的PN工程实现可以看下我之前写的博文【AutoSar_PN网络管理】功能和配置方案总结(1)
最后,本文只适用于R20-11版本及其架构,最新版本的规范有变动!!!
8 参考资料
1. AUTOSAR CAN NM(CAN网络管理) - 知乎 (zhihu.com)
2. Autosar网络管理:CanNmPnResetTime对关联Tx PDU的发送影响 - 知乎 (zhihu.com)
3. Autosar网络管理:Partial Network基础 之 ERA/EIRA、PNC Gateway - 知乎 (zhihu.com)