接上篇基于CAN汇流排的Autosar网路管理简述。。。。。
2.3.1状态跳转
注:图片引自《AUTOSAR_SWS_CANNetworkManagement》
在睡眠状态中触发本地唤醒事件或被动唤醒事件,ECU进入重复报文状态。CanNm_NetworkRequest()表示的触发本地唤醒事件后ECU请求网路;CanNm_PassiveStartup()表示的是接收到被动唤醒事件后ECU请求网路;
快发次数和快发周期AUTOSAR中并没有指定特定的数字,一般由OEM决定。多数开发周期为10ms或20ms,快发次数为10或20次。
这里注意,NM报文的周期要为时基的整数倍。
前面已经说过NM-Timeout Timer定时器在超时之前在成功发送或成功接收到一帧NM报文后就会重启,NM-Timeout Timer重启并不会改变NM报文的周期。NM报文的周期从开发发送后只要ECU没有ReleaseNetwork就一直按周期发送,与NM-Timeout Timer定时器无关,与状态跳转也无关。
当所有节点均没有本地唤醒事件了,最后一个维持网路的节点请求释放网路,不在发送NM报文,待NM-Timeout Timer超时后,同时进入预睡眠状态。
如果在预睡眠状态中接收到诊断请求或者触发本地或远程唤醒事件,则ECU进入重复报文状态。
在预睡眠状态中收发器不能关闭,需要能够正常应答报文。
以上即为状态跳转的大体过程,这里有几个问题大家可以讨论下:
目前OEM有要求ECU从睡眠状态中被唤醒后发出的第一帧报文必须释NM报文,然后再发送应用报文。被唤醒后偏移多长时间开发发送NM报文可通过CanNmMsgCycleOffset来配置。
这个参数的目的有两个:一是避免某节点被本地事件唤醒后触发NM报文快发机制,如果offset=0有可能会以brust方式发送。二是避免同一时刻很多控制器一起向汇流排发送报文,造成汇流排负载率过高(这个理由个人觉得意义不大,即使同时上15电,控制器也很难一起初始化完成一起请求网路,即唤醒时间是不同的。)
NM报文的周期必须要小于CanNmTimeoutTime,如果大於则可能还没收到就超时了,就不会重启了。CanNmWaitBusSleepTime、Repeat Message Time一般看OEM的需求自行定义,一般均在4s以内。
如果使用了局部网路管理,则CanNmMsgCycleTime<CanNmPnResetTime<CanNmTimeoutTime
CANstateManagement里有明确的规定,此种情况下ECU虽然即接收不到NM报文也发送不出NM报文,但NM-Timeout Timer定时器超时后需要重启,也就是故障恢复后ECU必须仍然处在正常工作状态。
2.4函数和参数配置
就先写到这吧,下面介绍CAN_COM。
推荐阅读: