如果不做特殊说明,本文基于4.3规范进行说明。
ComM模块管理所有通信通道的状态,如果还没有阅读上一篇描述ComM模块基础的文章,可以先阅读一下:
[Classic AUTOSAR学习] ComM — Communication Manager 通信管理模块(基础篇)
什么是PNC?为什么需要PNC?
在某些场景下,我们希望关闭其他ECU,仅保留必要设备仍在工作状态,以降低蓄电池电量消耗。我们一般将这些在某种条件下需要保持同样工作状态,且连接在同一总线(或由网关连接)的ECU称之为一组PNC,也即partial network cluster,进行网络管理。
PNC上的这些ECU在逻辑意义上形成了一个网络,例如,实际物理网络中ABCD四个ECU当中,AB两个ECU为一组PNC,它们需要保持同步唤醒或睡眠,但是它们的睡眠和唤醒可以不影响C和D的网络状态。
如果网关使能了PNC,那么PNC的概念可以扩展到不同的总线上,在更大的网络里面形成一组PNC。
没有了部分网络的功能,NM消息只能做到整条总线的唤醒与保持唤醒状态。
规范中PNC相关定义
对于每一组PNC,ComM都维护了一个状态机,它们相互独立。对于PNC,同样需要使用ComM用户的概念来进行网络请求和释放。
规范中展示了7种use-case,简而言之,一组PN可以包括一个或多个通道,必须由User来进行状态请求,一个User可以控制多组PN,但是User不允许直接与通道进行交互(特指部分网络管理场景)。
NM消息的PNC bit vector定义了PNC网络状态,每一组PNC都在bit vector当中使用一个特定的bit位(User data中的某一个bit位)。例如CanNM规范中对于Control Bit Vector的定义,Bit6为1时,代表由PN请求。
如果ComM用户请求了PNC,那么此PN组对应User Data中的bit位被设置为1,如果不再请求PNC,那么设置为0。(需要注意的是,如果可选功能“同步PNC关闭”开启,会需要发送一个PN关闭消息,在这个消息里需要释放的PNC对应的bit位设置为1,其他对应的bit位为0。)<Bus>Nm模块会从网络管理消息中读取PNC bit位,作为COM的信号将通道状态给到ComM模块。
以CanNM规范中的例子说明,我们可以分别配置PnInfo的偏移量为4byte,长度为2byte,那么CanNM报文中,对应的Byte4和Byte5代表PN Info,一共可以代表16组PN。
ComM在与NM和<Bus>Nm模块交换PNC状态信息时定义了三种PNC bit vector类型:EIRA,ERA,IRA。EIRA和ERA的概念由CanNm, FlexRayNm,UdpNm规范进行定义。IRA,即Internal Request Array,代表内部PNC请求。
EIRA/ERA/IRA
无论是开启还是关闭ECU的通信功能,都是需要进行请求的,而这个请求则分为内部请求与外部请求,我们称之为External Internal Request Array,也即EIRA。每一个ECU都需要有EIRA,来根据部分网络活动进而切换IPdu Group的状态。
至于ERA,External Requested Array,它主要用于网关,仅收集外部PN请求的场景。网关会将外部PN请求镜像回请求总线,同时将这个请求发送到其他的总线上。
IRA,Internal Requested Array,代表ECU内部对于PNC状态的请求,既可以是SWC通过RTE直接请求ComM接口,或者在某种条件满足时,由BswM请求ComM接口。
PNC状态机
原文始发于微信公众号(车载嵌入式软件开发):[Classic AUTOSAR学习] ComM — PNC部分网络管理