1. 简介和功能概述
PN即Partial Networking,意指部分网络或局部网络。PN的核心思想是在AUTOSAR中实施高效的能源管理,其目标是提供一种节能机制。PN允许在不需要那么多ECU工作的时候,关闭一批ECU的网络通信。其他ECU可以继续在同一总线通道(比如动力CAN)上通信。如下图,在网络中可以将ECU分成若干个小组(包含的ECU处于相同或不同的通道上),每个ECU组成一个PNC(Partial Network Cluster),也就是部分网络集群,PNC小组成员的特点是,同睡同醒。
值得一提的是,每个PNC都有独立的PNC状态机,换句话说,同一个网段上可能存在多个PNC状态机。
2. PNC信息传递的载体
CAN上的网络管理帧有8个字节,通常我们会占用Byte0作为NID(可在CanNM中配置),如NM报文的CanId是0x518,则NIDy应配为0x18。byte1则作为CBV位,其他的bytes称为User data,作为PNC的区域,从byte2~byte7对应PNC16-PNC63。以PNC16举例,如果这个位的值是1,就是PNC生效,部分网络唤醒,反之为0则PNC失效,部分网络休眠。
NM PDU 的字节1 被分配用于发送控制比特向量。其中:
- bit0:重复消息状态请求标志(Repeat Message Request Bit)
0:不请求重复消息状态
1:请求重复消息状态 - bit1:PN关闭请求位(PNSR)
0:NM报文不包含同步PN关闭请求
1:NM报文包含同步PN关闭请求 - bit3:网络管理统筹睡眠标志 (NM Coordinator Sleep Bit)
0:主统筹节点不要求开始同步关闭
1:主统筹节点要求开始同步关闭 - bit4:激活唤醒标志(Active Wakeup Bit)
0:节点不唤醒网络(被动唤醒)
1:节点唤醒网络(主动唤醒) - bit5:PN学习位(PNL)
0:PNC学习未被请求
1:PNC学习被请求 - bit6:部分网络标志(Partial Network Information Bit)
0:网络管理报文不包含部分网络管理请求信息
1:网络管理报文包含部分网络管理请求信息
3. 相关模块
PNC信息的交互及作用到的模块包括:CanTrcv、CanIf、CanNM、CanSM、PduR、COM、BswM、ComM、RTE、SWC、EcuM等,如下所示
4. PNC信息传递
PNC Gateway原则适用于网关节点ECU,对于网关ECU,包含多个物理通道,当PNC跨网段时,则需要将PNC信息路由到目标网段,进而实现不同网段PNC的管理。如下图, ECU7、ECU8都属于CAN 3 ,故PNC17只需在CAN3上即可。而PNC 16关联ECU3和ECU6,ECU3属于CAN 2 BUS,ECU6属于CAN 3 BUS,所以,PNC16信息需要在CAN 2 BUS和CAN 3 BUS之间路由,以便于管理PNC 16的网络状态。
那么,PNC16和PNC17的信息通过什么方式传递呢?EIRA和ERA信号。对于PNC17,其信息只需在同一个网段上传递EIRA信号即可。而PNC16则需要网关路由到其他网段。
此处重点说一下,PNC路由的原则。在Autosar规范中,如果使用PNC Gateway功能,需要使能配置参数ComMPncGatewayEnabled = TRUE。至于通道上能否收到其他通道的ERA信号取决于ComMPncGatewayType
:COMM_GATEWAY_TYPE_ACTIVE或者COMM_GATEWAY_TYPE_PASSIVE。那么这两者有什么区别呢?
假设:某ECU有4个节点,1个Flexray,3个Can。Flexray1和CAN3配置成COMM_GATEWAY_TYPE_PASSIVE;CAN1和CAN2配置成COMM_GATEWAY_TYPE_ACTIVE。Flexray1、CAN1、CAN2、CAN3均关联PNC16。
例1:COMM_GATEWAY_TYPE_PASSIVE节点收到PNC16 = 1,只有通道PncGatewayType配置为COMM_GATEWAY_TYPE_ACTIVE才能转发PNC16,而COMM_GATEWAY_TYPE_PASSIVE的通道不会转发PNC信息。
5. PNC信息的接收和发送
5.1 PNC信息的接收
5.1.1 PNC信息的接收流程
PNC信息包含于User data中,上图以EIRA信号为例,说明NM报文如何传递到ComM。下图以CAN总线为例,分析一下ERA、EIRA信号如何将PNC信息从CanIf传递给ComM:
- CanIf : 当某个CAN节点由CAN总线接收到NM Msg以后,经由CanIf过滤CanId之后通过CanNm_RxIndication传递给CanNM。
- CanNM : 首先,检查CBV中的PNI bit,如PNI为1才能向上传递User Data。然后,由于PN功能的使能,且配置参数CanNmPnEraCalcEnabled = TRUE,CanNmPnEiraCalcEnabled = TRUE。CanNM模块将NM PDU中NID和CBV字节去除,并将User Data(包含PNC信息部分)映射到两种PDU:ERA PDU、EIRA PDU(在这个过程中,CanIf2CanNM_PDU为8 bytes,EIRA_CanNm2PduR_PDU 6bytes,ERA_CanNm2PduR_PDU 6bytes);
注:网关ECU多条通道共用一个Rx_EIRA,每条通道需配置一个Rx_ERA。终端ECU只需要配置一个Rx_EIRA。
3.PduR : CanNM通过PduR中配置的路由路径(配置为Trigger发送)将ERA PDU、EIRA PDU路由给COM模块(其间调用了PduR_CanNMIndication, Com_RxIndication);
4.com : COM模块将接收到的ERA PDU,EIRA PDU进一步拆分成ERA Signal、EIRA Signal。在ERA Signal、EIRA Signal发生改变后,Com会调用ComM_COMCbk_去告知ComM在下一个轮询中去处理PN状态。
5.ComM : 此时,ComM可以通过COM的标准接口Com_ReceiveSignal获取ERA、EIRA 信号中的PNC信息。
5.1.2 PNC #n值复位
当收到外部或者内部PNC #n请求时,ERA_Rx_Signal、EIRA_Rx_Signal的PNC #n =1,PnResetTimer重置(eg:2.95s),如果外部或者内部不再请求PNC #n,当ERA Timer和EIRA PnResetTimer超时,将CanNM存储的PNC #n复位(=0),并通知COM更新ERA_Rx_Signal、EIRA_Rx_Signal的PNC #n( = 0)。
注:每个通道中ERA都有独立的PnResetTimer,而EIRA信号则共用一个PnResetTimer。
PnResetTimer具体配置说明请见[^参考资料4]
5.2 PNC信息的发送
每个通道的PNC信息的发送流程如下:
- Step1:ComM根据每个PNC的局部网络状态,调用Com_SendSignal()置位/复位COM Tx_EIRA_PDU中的PNC #n Bit;
- Step2:每当CanNM的CANNM_MSG_CYCLE_TIME到期以后(eg:1s),CanNM触发NM Msg的发送请求(Trigger),此时CanNM的User Data部分信息为空(Empty),向PduR请求User Data, 而PduR则会向下路由Com中的Tx_EIRA_PDU至CanNM;
- Step3:CanNM将从上层拿到的User Data和 CanNM Header(NID+CBV)组装成NM PDU,调用CanIf_Transmit()发送接口完成NM PDU的发送。如下图所示:
6. 配置说明
6.1 BswM
PNC的状态每次变化除了进入COMM_PNC_NO_COMMUNICATION,会通过BswM_ComM_CurrentPncMode()告知BswM,
故可以根据PNC的状态进行仲裁:
- PNC状态关联某些PDU Group的关闭、打开;
- PNC状态关联是否能够通过唤醒源验证;
- PNC状态关联电源下电
具体的配置方案可根据需求进行设计。
6.2 其他模块配置说明
设计配置项太多了,就不一一赘述了,下表仅供参考,可以翻一下规范。
Module | 终端ECU配置内容 | 网关ECU配置内容 |
---|---|---|
BswM | (按需求和设计方案进行配置) | (按需求和设计方案进行配置) |
ComM | ComMPncSupport = TRUE ComMPncNmRequest = TRUE ComMPncComSignal(EIRA_Rx) ComMPncComSignal(EIRA_Tx) ComMPncComSignalRef(引用Com中的信号) ComMPncId(PNC#n) | ComMPncSupport = TRUE ComMPncNmRequest = TRUE ComMPncComSignal(EIRA_Rx) ComMPncComSignal(EIRA_Tx) ComMPncComSignalRef(引用Com中的信号) ComMPncId(PNC#n ComMPncGatewayEnabled = TRUE ComMPncGatewayType = ACTIVE/PASSIVE (由通道是否需要PNC转发决定) 在网关中可以用一个PNC mapping到多个通道 |
NM | NMComUserDataSupport = TRUE | NMComUserDataSupport = TRUE |
Com | PduGroup_EIRA_Rx PduGroup_EIRA_Tx ComPdu_EIRA_Rx ComPdu_EIRA_Tx ComSignal_EIRA_Rx ComSignal_EIRA_Tx | PduGroup_EIRA/ERA_Rx PduGroup_EIRA_Tx ComPdu_EIRA_Rx(仅有一个EIRA Pdu) ComPdu_ERA_Rx(每条通道都有一个Pdu) ComPdu_EIRA_Tx(每条通道都有一个Pdu) ComSignal_EIRA_Rx*1 ComSignal_ERA_Rx*n ComSignal_EIRA_Tx*n |
PduR | PduR_Routing_Path:Rx_EIRA PduR_Routing_Path:Tx_EIRA | PduR_Routing_Path:Rx_EIRA(所有通道仅需一条path) PduR_Routing_Path:Rx_ERA(每条通道仅需一条path) PduR_Routing_Path:Tx_EIRA(每个通道都要Tx_EIRA path) |
EcuC | NM_Rx_PDU(8bytes) Rx_EIRA_CanNM2PduR_PDU(6bytes) Rx_EIRA_PduR2Com_PDU(6bytes) Tx_EIRA_Com2PduR_PDU(6bytes) Tx_EIRA_PduR2CanNM_PDU(6bytes) NM_Tx_PDU(8bytes) | NM_Rx_PDU(每个通道都需配置) Rx_EIRA_CanNM2PduR_PDU (所有通道Rx_PDU聚合成一个EIRA Rx PDU,故只需配置一个) Rx_EIRA_PduR2Com_PDU (所有通道Rx_PDU聚合成一个EIRA Rx PDU,故只需配置一个) Rx_ERA_CanNM2PduR_PDU Rx_ERA_PduR2Com_PDU Tx_EIRA_Com2PduR_PDU(每个通道都需配置) Tx_EIRA_PduR2CanNM_PDU(每个通道都需配置) NM_Tx_PDU(每个通道都需配置) |
CanNm | CanNmPnEnabled = TRUE CanNmComUserDataSupport = TRUE CanNmActiveWakeupBitEnabled = TRUE CanNmNodeDetectionEnabled = TRUE CanNmNodeIdEnabled = TRUE CanNmPnEiraCalcEnabled = TRUE CanNmPnInfo:配置PN信息(过滤与ECU相关的NM PDUs) CanNmPnResetTime(CanNmMsgCycleTime<CanNmPnResetTime<CanNmTimeoutTime) CanNmPnEiraRxNSduRef (引用EIRA PDU_CanNM2PduR, 所有通道聚合为一个Rx EIRA) CanNmTxUserDataPduRef(每个通道上的Tx EIRA PDU) | CanNmPnEnabled = TRUE CanNmComUserDataSupport = TRUE CanNmActiveWakeupBitEnabled = TRUE CanNmNodeDetectionEnabled = TRUE CanNmNodeIdEnabled = TRUE CanNmPnEiraCalcEnabled = TRUE CanNmPnInfo:配置PN信息(过滤与ECU相关的NM PDUs) CanNmPnResetTime(CanNmMsgCycleTime<CanNmPnResetTime<CanNmTimeoutTime) CanNmPnEiraRxNSduRef (引用EIRA PDU_CanNM2PduR, 所有通道聚合为一个Rx EIRA) CanNmTxUserDataPduRef(每个通道上的Tx EIRA PDU) CanNmAllNmMessagesKeepAwake = TRUE CanNmPnEraCalcEnabled = TRUE CanNmPnEraRxNSduRef(每个通道都要上报ERA,故每个通道都须配置Rx ERA PDU) |
canIf | CanIfTxPduTriggerTransmit = FALSE(与CanNmComUserDataSupport = TRUE相关) CanIfPublicPnSupport = TRUE | CanIfTxPduTriggerTransmit = FALSE(与CanNmComUserDataSupport = TRUE相关) CanIfPublicPnSupport = TRUE |
CanSM | CanSMPncSupport = TRUE | CanSMPncSupport = TRUE |
EcuM | EcuMComMPncRef | EcuMComMPncRef |
最后的最后,希望以后有时间更新一下使用PN的网络管理和电源管理方案~~~
7. 参考资料
1.Autosar网络管理:Partial Network基础 之 ERA/EIRA、PNC Gateway
2.AUTOSAR PNC数据流分析
3.Autosar PN网络管理:PNC信息的收/发流程
4.Autosar网络管理:CanNmPnResetTime对关联Tx PDU的发送影响
5.AUTOSAR_SWS_CANNetworkManagement (R20-11)
6.AUTOSAR_EXP_LayeredSoftwareArchitecture(R20-11)
7.AUTOSAR_SWS_COMManager(R20-11)