前言
我们知道ECU的网络管理是按照AUTOSAR标准开发的话,诊断报文是无法唤醒ECU且唤醒网络的,因为CanNm状态机处于Bus-Sleep Mode的时候,因为ComM-->CanSm-->CanIf-->CanTrcv, CanDriver关闭了Can收发器和控制器,则在Bus-Sleep Mode下通信协议栈是无法收到Can报文的,诊断报文也就无法唤醒网络。但是,但CanNm处于Prepare Bus-Sleep Mode时Cantrcv和CanDriver还是没被关闭,则诊断报文是可以被通信协议栈收到的,那么CanNm处于Prepare Bus-Sleep Mode时诊断报文是可以唤醒网络的(注意:前面这些结论如果不能理解的朋友可以参考以下的文章)。
ECU系统休眠后通过诊断报文唤醒ECU且唤醒网络后快发NM报文
网络关闭但ECU没有休眠前如何网络唤醒
AUTOSAR架构下CanTrcv休眠唤醒问题再探
ECU系统休眠后通过诊断报文唤醒ECU且唤醒网络
AUTOSAR 架构下EcuM唤醒源事件详解
那么,我们的问题来了,CanNm处于Prepare Bus-Sleep Mode时收到诊断报文唤醒网络,到底是主动唤醒还是被动唤醒了?
这个问题的答案很容易得到,我们在CanNm处于Prepare Bus-Sleep Mode时发送诊断报文唤醒网络,看NM报文是否有快发过程就能轻易的确定是主动唤醒还是被动唤醒。
这里直接给出答案,CanNm处于Prepare Bus-Sleep Mode时收到诊断报文唤醒网络是主动唤醒,那么为什么了?
正文
CanNm专题机从Prepare Bus-Sleep Mode切换到Nework Mode的Repeat Message State是如果是通过CanNm_PassiveStartUp()条件切换的就是被动唤醒,如果是通过CanNm_NetworkRequest()条件切换的就是主动唤醒。
那么,DCM诊断报文使得CanNm状态机从Prepare Bus-Sleep Mode切换到Nework Mode的Repeat Message State调用的是CanNm_PassiveStartUp()还是CanNm_NetworkRequest()了?
CaNm处于Prepare Bus Sleep Mode时,ComM处于COMM_FULL_COM_READY_SLEEP模式,如果DCM模块收到诊断报文,则DCM模块会调用ComM_DCM_ActiveDiagnostic()这个callback函数,就会切换ComM模块状态机到COMM_FULL_COM_NETWORK_REQUESTED模式。
ComM从COMM_FULL_COM_READY_SLEEP模式切换到COMM_FULL_COM_NETWORK_REQUESTED模式后会执行什么动作了?-- 调用Nm_NetworkRequest()函数主动唤醒网络。
本文的结论容易得出,DCM模块唤醒网络是主动唤醒且是AUTOSAR规范定义的。但是,要想至下而上理清楚网络休眠和唤醒还是挺不容易的,我们需要理解CanTrcv, CanDriver, CanIf, CanNm, EcuM, ComM, Dcm这么多模块的功能及其之间的耦合关系才能真正理解。至于怎么把这么多模块理清楚还能串起来,个人是从CanTrcv开始自底向上学习各个模块,然后以报文唤醒和网络唤醒源这条线索把所有的模块给串起来的。
End
「汽车电子嵌入式在CSDN上同步推出AUTOSAR精进之路专栏,本专栏每个模块完全按实际项目中开发及维护过程来详细介绍。模块核心概念介绍、实际需求描述、实际工程配置、特殊需求介绍及背后原理、实际工程使用经验总结。目的是让读者看完每一个章节后能理解原理后根据需求完成一个模块的配置或者解决一个问题。」
点击文章最后左下角的阅读原文可以获取更多信息
或者复制如下链接到浏览器获取更多信息
https://blog.csdn.net/qq_36056498/article/details/132125693
文末福利
2.为便于技术交流,创建了汽车电子嵌入式技术交流群,可尽情探讨AP,CP,DDS,SOME/IP等前沿热点话题,后台回复“加群”即可加入;
注:本文引用了一些第三方工具和文档,若有侵权,请联系作者删除!
推荐阅读
汽车电子嵌入式精彩文章汇总第一期:20210530-20230703
汽车电子嵌入式精彩文章汇总第2期
TC3xx芯片GTM模块-CMU,CCM,TBU详解
TC3xx芯片GTM模块-TOM详解
AUTOSAR架构下PWM模块配置实践
TC3xx芯片GTM模块-TIM详解
AUTOSAR架构下ICU模块配置实践
TC3xx芯片电源管理系统PMS详解
TC3xx DMA模块详解
编译链接专题第1篇-make和makefile介绍
编译链接专题第2篇-初识makefile结构
编译链接专题第3篇-初识makefile中的伪目标
编译链接专题第4篇-变量和变量的不同赋值方式
编译链接专题第5篇-预定义变量的使用
编译链接专题第6篇-变量的高级主题(上)
End
欢迎点赞,关注,转发,在看,您的每一次鼓励,都是我最大的动力!
汽车电子嵌入式
微信扫描二维码,关注我的公众号