基于CAN的AutoSAR网络管理知识要点
上篇文章介绍了OSEK网络管理知识要点,本篇介绍AutoSAR网络管理知识要点。
01 AutoSAR网络管理机制
AutoSAR网络管理机制比OSEK简单,AutoSAR网络管理机制是基于周期型网络管理报文,这周期型网络管理报文被所有节点接收。只要节点需要总线通信,它就需要发送周期型网络管理报文;当节点不需要总线通信时,它停止发送网络管理报文。若总线上没有网络管理报文并且超过配置时间后节点进入睡眠模式。
02 AutoSAR网络报文定义
网络管理报文ID=BaseID SourceNodeID,例如BaseID为0x400,SourceNodeID为01,网络管理报文ID为0x401。Byte0默认是源节点ID,可配置为控制位向量。Byte1默认是控制位向量,可配置为源节点ID。Byte2-Byte5由整车厂定义,可定义网络唤醒的原因和网络状态转换等信息,若使用得当有利于排查整车异常唤醒和不休眠的问题。
Bit0是重复报文请求位, 当某个节点发的NM报文中的此位置1时,所有接收到该NM报文的节点均要返回Repeat Message State。
03 AutoSAR网络管理运行模式及转换条件
AutoSAR网络管理运行模式有三种:睡眠模式(Bus-Sleep Mode)、网络模式(Network Mode)和准备睡眠模式(Prepare Bus-Sleep Mode)。
睡眠模式
睡眠模式目的是降低ECU功耗,车辆在不使用的状态下(满足休眠条件下),控制器进入睡眠模式后的工作电流非常小。
ECU上常电后要先进行初始化,初始化完成后默认进入睡眠模式。在初始化过程中ECU不能向总线发送报文甚至显性电平。在睡眠模式中控制器既不接收也不发送报文,但激活了唤醒源的监测,即如果此时总线上有网络管理报文在发送(发送成功了或NoAckError后自动重发),CAN NM模块需要通知应用层接收到了唤醒源,并由应用层决定是否被唤醒。
在睡眠状态中如果总线上有应用报文持续发送,控制器是否给ACK取决于所选用的收发器。例如使用TJA 1041,控制器在睡眠状态中收到应用报文后给收发器上电,从而给出ACK应答。但应用报文并不是控制器的唤醒源,应答一段时间后就又关闭收发器。现在有些收发器在自身就带有屏蔽寄存器(TJA1042T\1043T\1145),可以自行判断收到的信号是否为唤醒源。
需要注意,控制器在未上30电时的状态不属于睡眠状态。不同的控制器在上30电后的初始化时间也不相同。
准备睡眠模式
准备睡眠模式的目的是确保网段上所有的节点在进入睡眠模式前有时间停止它们的网络活动(有些ECU在进入睡眠前可能要往EEPROM中写入数据)。在准备睡眠模式节点既不不送也不接收报文(发送缓冲区里面的队列报文可发送)。在准备睡眠模式中节点收发器还未关闭,此时网络持续发送应用报文仍可关闭。
网络模式
网络模式包含三种状态:重复报文状态(Repeat Message State)、正常运行状态(Normal Operation State)、准备睡眠状态(Ready Sleep State)。
ECU从睡眠模式或预睡眠模式跳转到网络模式时均要先进入重复报文状态。进入重复报文状态后,启动CanNmRepeatMessageTimer定时器。该定时器不会重启,超时后就会进入正常工作状态或准备睡眠状态。
重复报文状态能确保从睡眠模式、准备睡眠模式到网络模式的转换可被网络上其它节点可见。ECU进入重复报文状态后会发送自身NM报文,并启动NM-Timeout Timer(也可能是先接收到NM报文,同样会启动该定时器),ECU成功发送或成功或接收一帧NM报文后都会重启该定时器。
当CanNmRepeatMessageTimer超时后,如果控制器维持有本地唤醒条件(有请求网络通信的需求)则会进入正常运行状态。
我们在车辆的使用过程中,绝大部分时间均处在正常运行状态。同样的在正常运行作态,ECU成功发送或成功接收一帧NM报文就会重启NM-Timeout Timer定时器。因为该定时器可以重启,正常运行状态确保了节点可以长期维持网络唤醒,只要它对网络通信有需求。在该状态ECU正常发送和接收NM报文和应用报文。
当CanNmRepeatMessageTimer超时后,如果ECU本地唤醒条件未被触发(没有请求网络通信的需求)则会进入准备睡眠状态。该状态是用来等待其他节点停止网络请求,NM-Timeout Timer超时后进入准备睡眠模式。在该状态中ECU正常发送应用报文,不再发送网络管理报文。正常接收网络管理报文和应用报文。当成功接收到一帧网络管理报文后会重启NM-Timeout Timer,使自身维持在准备睡眠状态。
04 AutoSAR网络管理运行模式转换条件
首先明确如下两个概念。
两个状态:NetworkRequested和NetworkReleased。这是NM模块内部额外的网络管理状态,当处在NetworkRequested状态时,说明ECU有网络通信的请求,会持续发送NM报文,维持着整个网段的唤醒;当处在NetworkReleased状态时,说明ECU没有网络通信的请求,不再发送NM报文,只发送应用报文,等待所有节点释放网络后同时进入准备睡眠模式。
两类事件:本地唤醒事件和远程唤醒事件。本地唤醒事件也可称为主动唤醒事件,意味着ECU自身的本地唤醒条件被触发,需要自身请求网络,进而发送NM报文。例如最常见的KL15电,当KL15继电器闭合后,很多连接在KL15电的控制器被同时触发本地唤醒事件,同时请求网络,均要发出自身的NM报文。车辆在正常工作状态中,KL15继电器是闭合的,所有的有KL15电的节点均有请求网络通信的需求。远程唤醒事件,意味着ECU自身不需要主动请求网络通信,但是其它节点有通信需求,这个时候ECU只需要发送应用报文不发送NM报文,即维持在准备睡眠状态即可。即本地对应主动,远程对应被动。
综上,当触发本地唤醒条件时,会使NM模块进入NetworkRequested状态,会周期的发送NM报文;当收到远程唤醒事件时,会使NM模块进入NetworkReleased状态,重复报文状态后不再发送NM报文,进入准备睡眠状态等待所有节点都释放网络。
运行模式转换条件
Power On后ECU进行初始化工作,CanNM模块初始化完成后进入Bus-Sleep Mode。在Bus-Sleep Mode触发本地唤醒事件(对应Network Requested)或远程唤醒事件(CanNm_PassiveStartUp)后进入Network Mode中的Repeat Message State。
节点处在Repeat Message State时,T1超时后且自身有网络通信需求(Network Requested),进入Normal Operation state。T1超时后且自身无网络通信需求(Network Released),进入Ready Sleep State。
节点处在Normal Operation State时,若有重复报文状态请求(本地或远程)则进入Repeat Message State。节点处在Normal Operation State时,若无网络通信需求(Network Released)则进入Ready Sleep State。
节点处在Ready Sleep State时,T2超时后进入Prepare Bus-Sleep Mode。节点处在Ready Sleep State时,若有重复报文状态请求则进入Repeat Message State。节点处在Ready Sleep State时,若自身有网络通信需求(Network Requested)则进入Normal Operation State。
节点处在Prepare Bus-Sleep Mode时,T3超时则进入Bus-Sleep Mode。节点处在Prepare Bus-Sleep Mode时,若自身有网络通信需求(Network Requested)或收到其它网络管理报文则进入Repeat Mesage State。