• 125查看
  • 0回复

[底层软件] AUTOSAR架构下ECU休眠唤醒Wakeup Time详解

[复制链接]


该用户从未签到

发表于 19-3-2025 20:16:04 | 显示全部楼层 |阅读模式

汽车零部件采购、销售通信录       填写你的培训需求,我们帮你找      招募汽车专业培训老师


本文从ECU休眠唤醒实际需求问题,介绍ECU休眠后通过一帧NM报文唤醒ECU后在要求时间内通过第二帧NM报文需要唤醒网络。

AUTOSAR架构下ECU休眠唤醒Wakeup Time详解w1.jpg

环境
AUTOSAR工具链:VectorHardware Platform: Infineon Tricore
注:本文章引用了一些第三方工具和文档,若有侵权,请联系作者删除!

1.需求描述



ECU在休眠(断电)状态下收到第一帧NM报文需要唤醒ECU(对外表现就是电流从低功耗开始上升,但无CAN报文发出),在T wakeup timeout内收到第二帧NM报文需要唤醒网络(对外表现就是ECU有CAN报文发出)。要求 1s <= T wakeup timeout <= 3s.
AUTOSAR架构下ECU休眠唤醒Wakeup Time详解w2.jpg




2.测试方法

因为要求1s <= T wakeup timeout <= 3s, 则T wakeup timeout可以为[1s, 3s]内的任一值,如果开发工程师实现T wakeup timeout = 2s. 则测试case如下:
第一帧NM报文和第二帧NM报文的间隔时间ECU对外表现
0.5s, 1s, 1.95sECU被唤醒,电流上升且有报文外发
2.05s, 2.5s3.5sECU被唤醒,电流上升无报文外发

注意:ECU在休眠状态下测试只能通过CANoe工具来测试该需求,通过其他CAN工具(比如TMaster)无法进行测试(TMaster发送一帧NM报文对外表现就把ECU唤醒且唤醒了网络),在使用CANoe工具发送NM报文时必须勾选如下图所示的TxSelf-ACK(其他工具如TMaster无此配置选项)。

AUTOSAR架构下ECU休眠唤醒Wakeup Time详解w3.jpg

3.完成需求的方法

这里直接给出方法,只要按照下图所示配置EcuM中的CAN唤醒源即可(当然前提是CanIf, Cantrcv…等模块已经配置正确)。
AUTOSAR架构下ECU休眠唤醒Wakeup Time详解w4.jpg

Validation Timeout:配置唤醒源的校验时间。Wakeup Source Polling:定义是否需要轮询检测该唤醒源。

4.原理详解

4.1 CanTrcv 接收到第一帧NM报文

如果采用非SBC方案,采用Infineon芯片的ECU在进入休眠状态后一般会设置Tricore核到Standby状态,也会设置Can transceiver到Sleep状态。收到第一帧NM报文后,CanTrcv获取到远程唤醒事件,CanTcv的INH引脚会拉高到High Level唤醒ECU,ECU醒来后程序从头开始运行,CanTcv的Init函数会Check唤醒事件,Check到唤醒事件后会调用EcuM_SetWakeupEvent(ECUM_WAKEUP_SOURCE_CAN). EcuM就会设置ECUM_WAKEUP_SOURCE_CAN状态到ECUM_WKSTATUS_PENDING状态。

AUTOSAR架构下ECU休眠唤醒Wakeup Time详解w5.jpg

ECU接收到第一帧NM报文时ECU被唤醒,Can Cantroller处于Stop状态且CanTrcv处于Sleep状态,Cantroller不会产生CAN接收中断,所以第一帧报文不会被软件处理。
注意:Vector的代码在CanTrcv_Init就能Check唤醒事件,ETAS的代码只能在CanTrcv_MainFuncton里面Check唤醒源事件。

AUTOSAR架构下ECU休眠唤醒Wakeup Time详解w6.jpg

4.2 EcuM接收到唤醒事件

EcuM检测唤醒源状态到ECUM_WKSTATUS_PENDING后就会调用EcuM_StartWakeupSources().
AUTOSAR架构下ECU休眠唤醒Wakeup Time详解w7.jpg

EcuM_StartWakeupSources是一个callout函数,一般在EcuM_StartWakeupSources函数中调用CanSM_StartWakeupSource, CanSM_StartWakeupSource正常会设置Can Controller到Normal状态且设置Can Cantrcv到Normal状态,同时开始唤醒源的校验,也就是开始T wakeup timeout的计时。
AUTOSAR架构下ECU休眠唤醒Wakeup Time详解w8.jpg

EcuM同时开始唤醒源的校验其实就是调用EcuM_CheckValidation函数,EcuM_CheckValidation也是一个Callout函数,一般会在EcuM_CheckValidation函数中调用CanIf_CheckValidation检测有没有收到有效的NM报文:
a.如果在T wakeup timeout也就是Validation Timeout时间内收到有效的NM报文就会设置CAN唤醒源事件状态到ECUM_WKSTATUS_VALIDATED,同时调用ComM_EcuM_WakeUpIndication通知到ComM, ComM一般就会切换到Full状态,Com模块就会发送周期报文,CanNm模块被动唤醒发送进入到RM状态开始慢发NM报文。
b. 如果在T wakeup timeout也就是Validation Timeout时间内没有收到有效的NM报文就会设置CAN唤醒源事件状态到ECUM_WKSTATUS_EXPIRED,EcuM就会调用EcuM_StopWakeupSources(), EcuM_StopWakeupSources是一个callout函数,因EcuM_StopWakeupSources()会调用CanSM_StartWakeupSource, CanSM_StartWakeupSource又会设置Can Controller到Stop状态且设置CanTrcv到Standby状态。
AUTOSAR架构下ECU休眠唤醒Wakeup Time详解w9.jpg

4.3 CanTcv接收到第二帧NM报文

EcuM调用EcuM_StartWakeupSources后Can Cantroller和CanTrcv被打开,如果CanTrcv接收到第二帧NM报文,Can controller就会产生接收中断,Can controller就会调用CanIf_RxIndication将有效报文传递到CanIf模块。这个时候EcuM_CheckValidation -> CanIf_CheckValidation就能完成唤醒源校验。
4.4 EcuM完成唤醒源校验

如4.1, 4.2, 4.3章节所述,ECU 在T wakeup timeout时间内收到2帧有效的NM报文,EcuM就能完成唤醒源检验,对外就是有CAN报文发出。

5. 总结

ECU的休眠唤醒(CAN报文唤醒)需要CanTrcv, Can Controller, CanIf, CanSM, EcuM, Com, ComM这么多模块的共同参与,非常的复杂,通过一篇文章很难全部都讲清楚,本文从T wakeup timeout实际需求出发,简要的介绍了完成这个需求各个模块的功能和动作,希望能给大家带来一些启发。

-end-

分享不易,恳请点个【👍】和【在看】


该用户从未签到

发表于 19-3-2025 21:38:00 | 显示全部楼层
针对您提供的关于AUTOSAR架构下ECU休眠唤醒Wakeup Time的详细描述,以下为专业回复:

在AUTOSAR环境下,ECU的休眠唤醒机制是确保车辆节能与实时性的关键。当ECU进入休眠状态并收到第一帧NM报文时,会触发唤醒过程,电流逐渐从低功耗状态上升到正常工作状态。在这段时间内,需要确保在特定的唤醒时间窗口(T wakeup timeout)内收到第二帧NM报文以完成网络的唤醒。若报文接收延迟超出此时间窗口,可能会导致网络响应不及时或功能异常。因此,合理的设置和管理Wakeup Time对保证ECU及车载网络的稳定运行至关重要。

关于AUTOSAR工具链和硬件平台的具体应用,建议在实际操作中遵循相关标准和厂商提供的指南,确保系统的兼容性和稳定性。若涉及第三方工具和文档使用,请确保遵循版权法规,如有侵权及时与作者沟通解决。以上内容仅供参考,如需更深入的分析或建议,请结合具体应用场景和实际需求进行考虑。
回复 支持 反对

使用道具 举报

快速发帖

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|Archiver|汽车工程师之家 ( 渝ICP备18012993号-1 )

GMT+8, 6-4-2025 13:04 , Processed in 0.443733 second(s), 35 queries .

Powered by Discuz! X3.5

© 2001-2013 Comsenz Inc.