前言
最近在做CAN网络管理的工作,发现网络休眠(关闭)后在ECU系统没有休眠/下电前如果又收到了NM报文,ECU的网络没有被重新唤醒(开启),ECU系统也没有结束下电(Shutdown)流程,而是直接下电后再被唤醒,而不是我们期望的在PreShutdown到Shutdown阶段收到NM报文重回到Startup阶段。
正文
1.网络休眠时的相关系统状态
在本地唤醒源(Local wake up source,一般是IGN等硬线信号)Disable掉后,User会调用ComM_RequestComMode请求ComM进入到NoCom状态,如果这个时候没有接收到NM报文,且没有收到诊断请求ComM会切换到NoCom状态,这个时候ComM会调用CanSM_RequestComMode(network:=
我们具体来看CanSM对Can Transceiver的操作,以及此时Transceiver的状态。
CanSM-->CanIf-->CanTrcv最终会拉低TJA1043收发器的STB_N脚,这个时候TJA1043收发器的INH脚是处于高电平状态。
TJA1043收发器处于Standby mode时的报文收发功能是关闭的,也就是收发器在Standby mode下是不能收发报文的。
所以这个时候,ComM处于NoCom状态,NM处于Bus Sleep状态,就算这个时候Can-Bus上有NM报文过来,Can Transceiver根本就收不到,也就是不可能让ECU系统状态机从Preshutdown跳转到Startup。
那能让Can Transceiver别不要进入到Standby Mode么?-- 不能,因为ComM进入NoCom后CanSM-->CanIf-->CanTrcv设置Transceiver进入到Standby mode这个过程是AUTOSAR静态代码自动实现的,我们不可能去改静态代码。
所以我们该怎么做才能实现网络关闭后ECU没有休眠前网络唤醒?
2.网络休眠后重新唤醒网络需要做的准备工作
要实现网络关闭后ECU没有休眠前网络唤醒需要以下必要操作:
1)配置CanIf和EcuM的Wake up validation功能。
2)User判断Can Transceiver进入到Standby模式后,通过CanIf_SetTransceiverMode --> CanTrcv_SetTransceiverMode设置收发器到Sleep模式。
软件设置Can收发器到Sleep模式后通过硬件设计保证INH脚在Sleep模式是以低电平状态输入到MCU。
3)Can收发器进入Sleep模式后如果收到CAN报文就会使得INH脚切换到High电平状态,User通过判断INH脚从Low电平状态跳变为High状态来得知Can-Bus收到了报文,这个时候通过调用CanIf_SetTransceiverMode --> CanTrcv_SetTransceiverMode设置Can Transceiver到Normal状态,这样Can Transceiver就能接收到报文了,报文就能到达CanIf模块。
4)允许网络通信CommunicationAllowed=TRUEComM,这样通过ComM_EcuM_WakeUpIndication(ChX)这个条件就能使得ComM进入到FullCom状态,如果收到的是NM报文,就能维持住网络。
3.总结
想要实现网络关闭但ECU没有休眠前网络唤醒需要通过检测TJA1043收发器的INH脚的电平状态来判断接收到Can报文,然后通过EcuM和CanIf的唤醒源校验(NM报文校验)功能来触发ComM模块切换到FullCom状态,最后ComM进入FullCom后调用CanSM接口唤醒网络,同时NM状态进入到Network Mode的Repeat Message State,整个网路开启。
审核编辑:刘清
-
收发器
+关注
关注
10文章
3428浏览量
105997 -
AUTOSAR
+关注
关注
10文章
362浏览量
21581 -
ecu
+关注
关注
14文章
886浏览量
54500 -
CAN网络
+关注
关注
1文章
44浏览量
16937
原文标题:网络关闭但ECU没有休眠前如何网络唤醒
文章出处:【微信号:汽车电子嵌入式,微信公众号:汽车电子嵌入式】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论