概述
AutoSAR中CAN通信的网络管理主要是根据CANNode接收和发送的NMMessage进行该节点在整个网络中的活动的,根据NM Message控制整个网络对Normal模式和Sleep模式的切换。
同时可以根据CAN NM PDU来检测网络上的其他节点的状态,进行同步休眠等。主要包含以下内容:
1.周期性的NMMessage在发送节点广播式的发送,节点可以周期接收到NM PDU。
2.对于接收节点而言,接收到NMPDU表明相应的节点想要保持网络正常工作。
3.节点想要进入Sleep模式,那么停止发送NM PDU准备进入Sleep,如果此时网络还有别的节点在发送NMPDU,则延迟进入Sleep。
4.在所有节点停止发送NMPDU并且设置的超时时间到,这时候整个网络上的节点同步进入Sleep模式。
5.节点想要从Sleep进入到Normal模式,则请求发送NMPDU。
NM****状态切换
在NM中状态切换主要有两个方面的考虑,其中一个是整个CAN NM的网络切换关系,主要由三个主要的状态,分别是Network Mode、Pre-Bus Sleep Mode和Bus Sleep Mode,对于其内部的转换关系如下图所示。
系统上电后,首先在Bus Sleep模式,如果有NM的通信请求就进入正常的通信模式也就是下中的Network Mode。
在Network Mode主要处理整个系统的网络管理的正常运行,如果NM上的节点停止发送NM PDU,则在定义的TimeOut后进入到Pre-Bus Sleep模式,等待整个通信上的网络达到Bus TimeOut后彻底进入Bus Sleep模式,如果在Pre-Bus Sleep模式下,收到了其它节点的NM请求,则进入正常的Network模式。
在NM的状态切换中还有一个比较重要的就是Network Mode的内部状态切换。无论是Bus Sleep还是Pre-Bus Sleep状态下进入到Network模式都会直接进入Repeat Message State发送NM PDU,处于RepeatMessage State下的节点对于整个网络上的节点来说是有效的节点,并确保其它节点在该状态上保持激活状态。Repaet模式下定义的TimeOut时间到同时接收到NM的请求进入到Normal Operation State,在该模式下只有NN的请求就保持节点处于Awake状态。
接收到RepeatMsg的请求或者对应的RepeatMsg对应的控制Bit接收,则进入Repeat模式,如果接收到NMReleased请求则进入ReadySleep States,ReadySleep States状态下等待其它节点进入到Sleep状态,如果NM TimeOut时间达到进入到Pre-Bus Sleep等待总线Sleep。具体的状态转换如下所示。
网络管理的状态切换中一般主要是由TimeOut和Requested/Released进行切换的,同时包含了对外部NMReq的处理,在使用的时候注意几个TimeOut的时间,尤其是在做整个网络上的Sleep机制的时候要充分考虑不同节点产生的jitters,该部分的考虑主要从内部时钟、NM相关模块函数的循环时间和发送方式进行考虑,由于该部分还有连调连试过,所有先不详细介绍,等后期如果进行相关的工作再补充更新。
NM PDU
AutoSAR中NM的PDU主要包括三大部分,分别是节点的ID、控制位以及用户数据。在标准的CANFrame的具体定义如下:
其中Control Bit Vector的定义如下
Bit0: Repeat Message Request 表明Repeat Msg是否被请求。
Bit3: NM Coordinator Sleep Bit 表明是否开始同步的ShutDown。
Bit4:Active Wakeup Bit 表明是否唤醒通信网络。
Bit6: Partial Network Information Bit (PNI)。
Bit1/2/5/7用于后期扩展。
对于Byte0和Byte1两个Byte,AutoSAR定义的是通用的设置Byte,尤其是Byte0是Source的ID,只取其中的低八位,一般OEM都会定义特定的NM报文,而对于在NM PDU机制中的实现和定义主要写入低八位的ID就可以。
对于UserData不同的OEM会有不同的定义,这个取决于自己的设置,之前参与Daimler的一个项目的时候,他们会把UserData0作为WakeUp Reason使用。
如果使用Partial Network Cluster(PNC),一般会在特定的UserData中包含PNC上节点所在的位置。对于NMPDU的使用根据具体的OEM要求设置即可。
Partial Network Cluster
PartialNetwork Cluster(PNC)的使用主要是关掉某些网络上的不需要通信的节点,而一些必须的节点可以正常通信,从而更好的节约能量,减少消耗。
只有在该节点的PNC功能使能,同时接收的NM PDU中PNI位为1的时候才进行正常的PNC处理。同样作为PNC的一个节点在发送NM PDU的时候PNI位也必须设置为1。
PNC在实现的时候在CANNM模块提供了一种滤波机制,用来忽略无效的NMPDU。在使用PNC功能的时候,对于NMPDU 不用的OEM会在UserData中相应的Bit表示一个PNC的网络节点,每一个Bit表示了一个PN节点。
对于滤波机制的使用一般从UserData数据开始,指定需要比较的Byte长度,然后设置需要的比较信息(定义需要接收的Byte Value和Mask Value),进行比较即可,只有满足比较条件才认为接收到的NM PDU是一条有效的NMPDU,否则忽略。
在PNC中提供了两种NM的管理机制,分别为Internal and External Requested(EIR)PN和ExternalRequested(ER)PN。
对于EIR PN而言,主要是用于在接收到NM后,ECU根据接收到的NM PDU通知COMM模块和BSWM去控制相关的NM通道中的I-PDU的使能和禁用,同时可以将接收和发送的数据通过COM模块与APP层进行交互。
ER PN而言主要是作为NM的Gateway收集外部的PN PDU使用,用于路由NM相关的PNC到指定的通信Bus通道,进行PN控制。
PNC在AutoSAR****中的实现
对于PNC在AutoSAR中的实现将从CAN相关的PNC做阐述,因为现在CAN的PNC网络管理也是用的最多的。
CAN的PNC在AutoSAR架构中主要包括了支持CAN PNC的硬件、CAN、CanTrcv(SPI通信)、CanIf、CanNm、CanSM、NmIf、ComM、BSWM以及应用层的SWC。整个PNC的相关状态切换如下图所示。
根据上面的图片简单介绍几个主要作用:
1.唤醒:MCU被唤醒后,对于带有唤醒功能的TJA1145而言会在CANTrcv中将唤醒通知到CANIF,然后在EcuM中调用相关的函数对唤醒的有效性进行判断,从而将当前唤醒的状态通知给BswM进行状态处理。
2.PNC通信:在CANIf收到相关的NMPDU后,通知CANNM做PNC的有效性校验,在PNC校验有效后通过PDUR和COM两个模块将有效PNC信息告知COMM中特定的PNC通道,然后COMM将PNC的状态发送给BSWM,BSWM根据PNC的状态和特定的Rules反馈给COMM进行PNC通信请求,同时通过CANSM模块经CANIf去控制CNATrcv进行通信模式切换。
3.在应用层的SWC可以直接建立与BSWM的Mode Req CS接口或者SWC建立与COMM的用于请求通信的CS接口,实现SWC对通信的请求。
4.对于NM PDU的发送一般需要NM模块进行请求或者释放,其控制指令也是在COMM受到BSWM或者SWC请求后发出控制指令。
5.对于PNC的NM PDU Group的使能和禁用开关需要BSWM结合具体的Rules进行控制,从而StartNM PDU 和StopNM PDU。
6.TJA1145这款芯片的模式操作和唤醒帧定义需要通过SPI通信进行控制。
审核编辑:刘清
-
CAN通信
+关注
关注
5文章
93浏览量
17829 -
OEM
+关注
关注
4文章
401浏览量
50328 -
AUTOSAR
+关注
关注
10文章
359浏览量
21530 -
OSEK
+关注
关注
2文章
19浏览量
13022
发布评论请先 登录
相关推荐
评论