CP AUTOSAR CAN 网络管理简介
前言在上一篇公众号里已经对Communication的管理模块ComM做了详细的介绍, ComM是整个通信的服务管理模块,掌控整个AutoSAR的通信,在通信协议栈中除了ComM之外,网络管理也是主要的通信控制和管理模块,因此本篇主要对CAN的AutoSAR提供的网络管理功能做详细的介绍。所有内容可在《搞一下汽车电子》公众号后台回复 '搞一下汽车电子' 或查看菜单栏。一、概述在汽车电子ECU开发过程中,网络管理的主要目的在于减少功耗,根据整车通信网络拓扑结构,会将不同的ECU分布到不同的功能域中,各种通信总线在特定的情况下根据功能需要选择休眠还是正常工作,通过区分不同的通信总线结构实现特定功能下特定ECU之间的通信,而不需要参与该功能的ECU就可以进入到休眠中,减少能量损耗。针对整车的网络管理功能,目前的主流方式为OSEK的网络管理和AutoSAR的网络管理。两者在当前的汽车ECU网络管理中应用十分广泛,下面就对这两种网络管理的功能做简单的概述二、OSEK 网络管理 与 AUTOSAR 网络管理 比较1相同点在网络管理中都需要一个特定的ECU发起唤醒报文。都是直接的网络管理方式,每个ECU都有自己的节点ID,都需要特定的网络管理报文。目的一样,都是协调多个ECU在特定功能下的唤醒和休眠,最终达到低功耗的目的。2不同点建立网络的过程方式不同,一般OSEK对于网络管理的建立要求比较严格,当某个ECU节点唤醒后,发出的第一条帧为Alive类型,采用的是令牌环(唤醒的ECU向下一个节点发送Ring报文)参与到整个网络中,而AutoSAR的网络管理要求比较简单,基于广播式的网络管理报文,唤醒的ECU直接发送网络管理报文就可以,所有的ECU节点想参与到通信中的只要各自发送网络管理报文就可以PDU格式不一样,OSEK由于唤醒过程要知道下一个唤醒的ECU,因此在PDU中包含了自己的地址和下一个唤醒的ECU的地址,而AutoSAR网络管理报文主要包含自己的ECU地址就可以,其它的一些指令信息数据也不一样。休眠方式不一样,OSEK的休眠是一个请求和确认的过程,在休眠过程中要等待休眠的确认帧,而AutoSAR下直接停止发送网络管理的报文就可以准备进入休眠。对于OSEK和AUTOSAR的网络管理详细的不同可以参考详细的标准可以做深入的研究,这里就不做详细的描述了,下面主要对AUTOSAR的网络管理做详细的介绍。三、AUTOSAR 网络管理功能介绍AutoSAR网络管理属于一种直接的分布式网络管理,在AutoSAR的网络管理在定义中包含了两个主要的属性直接和分布,直接主要是说每个ECU都有自己的网络管理报文,在该报文中直接包含网络管理相关的信息和数据以及需要进行的通信总线节点,NM报文的数据和NM的逻辑可以不相关;分布主要是指在AutoSAR网络管理中所有的节点都一样,不存在Master和Slave之分,每个参与的节点根据需要都可以被唤醒也可以唤醒别的ECU。AutoSAR的网络管理根据CAN Node接收和发送的NM Message进行该节点活动,根据NM Message控制整个网络对Normal模式和Sleep模式的切换。根据CAN NM 报文来检测网络上的其他节点的状态,进行同步休眠等,支持支持主动唤醒/被动唤醒模式,支持Gateway功能和PN局部网络管理。在CAN的网络管理中,周期性的NM Message在发送节点广播式的发送,节点可以周期接收到NM PDU,接收到NM PDU表明相应的节点想要保持网络正常工作。节点想要进入Sleep模式,那么停止发送NM PDU准备进入Sleep,如果此时网络还有别的节点在发送NM PDU,则延迟进入Sleep。在所有节点停止发送NM PDU并且设置的超时时间到,这时候整个网络上的节点同步进入Sleep模式。节点想要从Sleep进入到Normal模式,则请求发送NM PDU或者接收到其它节点发送的NM PDU。四、AUTOSAR NM PDU 格式在AutoSAR网络管理中,所有参与的网络节点采用相同的NM PDU格式。一个NM的报文主要包含下面的内容:CAN NM 定义Byte0Source Node IdentifierByte1Control Bit VectorByte2-7Userdata0-Userdata5其中,Byte0(Source Node Identifier)表示发送节点的ID,11位NM报文的ID中一般ID的高位表示网络管理类型的ID,后边低八位表示具体的节点。Byte1(Control Bit Vector)的定义如下 :Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit0含义ResPNIResActive WakeupNMCoordinator SleepResResRepeat Message Request每个Bit的含义如下:Bit 0: Repeat Message Request 表明Repeat Message是否被请求。Bit 3: NM Coordinator Sleep Bit 表明是否开始同步的Shutdown。Bit 4:Active Wakeup Bit 表明是否唤醒通信网络。Bit 6: Partial Network Information Bit (PNI)。Bit 1/2/5/7用于后期扩展。Byte2-Byte7(Userdata0-Userdate5):该6个Byte主要根据每个OEM的使用场景可以定义具体的数据信息,在PNC中一般包括PNC的请求,也可以定义ECU被唤醒的原因,该部分的数据在AutoSAR中可以路由到Com层进行处理。五、AUTOSAR 网络管理状态转换在AutoSAR CAN的网络管理中,主要包含三个状态Network Mode、Pre-Bus Sleep Mode和Bus Sleep Mode,其中Network Mode又拆分成了三个子状态Repeat Message State、Normal Operation State以及Ready Sleep State。整个AutoSAR CAN网络管理的状态转换如下图所示:
CAN的网络管理在设计和实现的过程中主要分为两中策略,分别是被动网络管理和主动网络管理。对于被动网络管理(Passive)而言,AutoSAR CAN的网络管理中基本只有Network Mode、Pre-Bus Sleep Mode和Bus Sleep Mode三种状态转换,Network Mode内部的状态被动网络管理节点不会进行参与,被动网络管理不能够请求网络也不能释放网络,不能发送NM Messages,因此不会参与NM的逻辑,但是可以接收和发送Application Messages,不会进行入到Normal State状态。在被动模式下接收到NM报文则上层模块调用PassiveStartUp的命令继续进入到Network Mode,在Network Mode收不到主动节点发来的NM报文一段时间(NM Time-Out)后会进入到Pre-Bus Sleep Mode,然后进行下电休眠的计数器开始休眠前的同步,当定时器时间达到后仍然没有收到NM报文,那么就进入到Bus Sleep Mode;在Pre-Bus Sleep Mode接收到NM报文则上层模块调用PassiveStartUp的命令继续进入到Network Mode。主动网络管理(Active)模式下,整个AutoSAR CAN网络管理定义的状态都会进行参与,主动网络管理的节点除了接收网络相关的唤醒外,也可以根据Local的唤醒源(KL15、定时唤醒等)主动从Bus-Sleep Mode下发送Network Request进入到Network Mode中的Repeat Message State,快速请求整个网络上的其他节点进入到正常工作模式(主动节点唤醒其余通信节点)。同时在Network Mode内部下根据实际需要可以收到Request或者Release网络进行内部的状态切换。一般Request或者Release的请求可以是User自己进行操作也可以是根据收到的网络管理报文切换。六、Partial 网络管理(PN)在CAN的通信过程中一般分为三种通信方式,分别为不支持唤醒(TJA1040)、支持任意帧唤醒(TJA1043)、支持特定帧唤醒(TJA1145),对应三种不同的唤醒需要外部的Trcv也是不同的。TJA1040这种Trcv一般不要特殊的IO控制,供电后就可以工作。对于支持任意帧唤醒的TJA1043,需要使用IO控制其状态转换,将其INT相关的引脚在电路设置的时候关联到MCU的唤醒引脚或者SBC的唤醒引脚,在系统进入到休眠前将TJA1043通过IO设置成Trcv进入休眠,然后MCU休眠后,当CAN总线上有任意报文的时候就可以将MCU唤醒。对于TJA1145这种支持PN唤醒的Trcv一般需要借助其他的通信总线(SPI等)进行设置,在下电的时候设置唤醒该ECU的特定ID以及特定的Data域,这样在MCU休眠前将特定唤醒报文的信息通过SPI写到TJA1145寄存器中,当MCU休眠后,TJA1145 Trcv检测到配置好的ID和Data就可以将MCU唤醒。
对于PN而言,需要注意的是一般会在NM报文的Userdata中设计相关的PNC节点,一般Userdata中的一个Bit可以映射一个PNC,在网络设计中就可以根据具体的需要决定特定帧的定义来实现网络唤醒和网络管理。对于网络管理PNC相关的状态设置转换可以参考ComM的上一篇公众号介绍。七、AUTOSAR 网络管理的主要配置CAN的网络管理应用种关联的模块比较多,主要包括CanTrcv、SPI、CanIf、CanNM、CanSM、Com、ComM、BswM、APP等,下面简单概述下每个模块的主要配置信息。CanTrcv:主要关注的是外部使用的Trcv类型,如果是支持任意帧唤醒的,一般关联到DIO模块来控制模式的转换,如果是支持特定帧唤醒的那么需要关联到SPI。同时Trcv也会设置唤醒帧的相关信息(ID、Data Length、Payload等)SPI:设置SPI的Sequence、Job、Channel、Device等配置实现Trcv调用SPI驱动和设置外部的Trcv硬件CanIf:主要设置网络管理相关的报文的UL,一般选择为CanNM,同时需要设置相关API的使能CanNM:配置网络管理报文相关的参数(Byte0和Byte1),PN的使能以及相关数据设置,EIRA下信号的路由(主要是关联到COM层相关的Userdata中的数据)等, Gateway功能设置CanSM:主要结合ComM对每一个PNC的状态进行状态切换管理,同时要关联到特定的TrcvCom:一般处理NM的Userdata数据,PN下会使用Com相关的接口函数处理PN的网络管理。ComM:选择网络管理的类型,并根据PNC的使用建立一个的通道管理,如果支持Gateway功能,还要设置Gateway下的控制,同时根据使用的Channel关联到BswM和User中实现对状态的通知和接收来自BswM或者User的控制。BswM:设计基于网络管理的状态切换的Rules,合理设计对通信通道以及PDU的控制APP:建立网络管理与应用层的交互,通过设计NM报文中的Userdata中的内容,应用层也可以参与到网络管理的逻辑控制。对于详细的参数配置,请参考AUTOSAR官方文件,这里就不一一说明了。本期分享就到这里,欢迎大家一起交流学习,如果有不合理的地方也请大家指正,愿和大家一起学习进步,一步步做好汽车电子软件开发。如有兴趣进入技术交流群交流,可联系小编微信。