网络关闭但ECU没有休眠前如何进行网络唤醒呢?

电子说

1.2w人已加入

描述

前言

最近在做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:=, mode:= COMM_NO_COMMUNICATION)关闭Can控制器(CanDriver)的收发报文能力。

我们具体来看CanSM对Can Transceiver的操作,以及此时Transceiver的状态。

CAN网络

CAN网络

CanSM-->CanIf-->CanTrcv最终会拉低TJA1043收发器的STB_N脚,这个时候TJA1043收发器的INH脚是处于高电平状态。

CAN网络

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功能。

CAN网络

2)User判断Can Transceiver进入到Standby模式后,通过CanIf_SetTransceiverMode --> CanTrcv_SetTransceiverMode设置收发器到Sleep模式。

CAN网络

CAN网络

软件设置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,整个网路开启。







审核编辑:刘清

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分