• 717查看
  • 0回复

[Autosar] AUTOSAR EcuM休眠阶段的具体实现详解

[复制链接]


该用户从未签到

发表于 21-1-2024 10:48:34 | 显示全部楼层 |阅读模式

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


在AUTOSAR EcuM SWS里对于Sleep阶段做出了一个宏观的流程设计,如下:

AUTOSAR EcuM休眠阶段的具体实现详解w1.jpg
从BswM过渡到EcuM的规则仲裁这里暂时不讲,有兴趣可以看之前我遇到的工程问题分析,特别是BswM状态迁移图:
https://blog.csdn.net/djkeyzx/article/details/131652713今天主要聊AUTOSAR规定的sleep两种模式:Halt和Poll,以及这两种模式下,MCU到底是如何工作的。
1.Halt和Poll的概念在规范中,如果休眠模式选用Halt,需要先调用API EcuM_GenerateRamHash,然后将MCU halt住,后续EcuM模块不会再执行任何代码。生成的RamHash会在核从Halt醒来后用API EcuM_CheckRamHash进行校验。
AUTOSAR EcuM休眠阶段的具体实现详解w2.jpg

这里就出现了今天的问题一:既然生成了RAM Hash,那么意味着Halt住后至少对应计算的RAM是保持供电的(想一下英飞凌的standby ram和RH850的retention ram);这种模式下对应CPU具体应该选择什么休眠模式呢?如果休眠模式选用Poll,则意味着EcuM要在一个循环里不停去检查是否有唤醒。

AUTOSAR EcuM休眠阶段的具体实现详解w3.jpg

而上述两种模式具体到MCU,是否真的就支持呢?下面我基于RH850 F1KM系列进行分析。
2.F1KM Stand-By Mode首先我们来了解F1Kx系列的电源域分配,如下图:
AUTOSAR EcuM休眠阶段的具体实现详解w4.jpg

AWO(Always-On Area),ISO(Isolated Area)。
其中,AWO的STBC、Reset Controller用于控制整个电源域;ISO可以单独关闭或者打开。这里我们就需要进一步了解和思考不同standby模式下的功耗。
那么RH850/F1KM 具有有哪些运行模式,结合手册,得到如下:
AUTOSAR EcuM休眠阶段的具体实现详解w5.jpg

    在系统层级的低功耗状态,该芯片支持STOP/DeepSTOP有限功能的低功耗操作,该芯片支持Cyclic RUN/ Cyclic STOP
进一步的,这些模式的迁移如下:
AUTOSAR EcuM休眠阶段的具体实现详解w6.jpg

很明显,CPU从RUN状态,只能切换至STOP/DeepSTOP/HALT模式,而要进入Cyclic RUN只能通过HALT、DEEPSTOP。Cyclic STOP只能由Cyclic RUN进入。

结合之前EcuM的GoHalt和GoPoll,这里就出现了一个疑问,什么时候进入除了HALT之外的其他四种模式?而这四种模式对功耗的影响究竟有多大?下面分析各种模式下的CPU、外设的运行状态。
2.1 HALT模式

HALT模式由指令HALT进入,该模式既不影响电源域也不影响时钟域,除了CPU以及CPU的时钟停止外,所有的外设均处于正常供电状态下运行;异常或者任意中断都可以从HALT模式恢复到RUN模式。

这种模式几乎就不存在低功耗,因此EcuM的GoHalt,我个人认为与这颗芯片的HALT模式完全是两回事。

2.2 STOP模式

STOP模式相较于HALT模式要睡得更香一点,首先是CPU子系统的时钟关闭,PLL关闭(其他时钟源继续运行),然后是在进入该模式之前,所有外设功能都停止,仅有Local RAM、Retention RAM以及IO buffer状态保持内容,注意,这里仅是时钟,所有的供电都还存在。

从STOP返回到RUN,需要WUF(Wake-up Factor)寄存器中的唤醒事件产生(具体可查对应User Mannul STBC章节)。2.3 DeepSTOP模式
相比STOP,这种模式最香;看模式迁移那张图,在DeepSTOP模式下,ISO这块区域是灰色的,也即不仅要停掉大部分时钟,还要关掉电源。

但是AWO里还需要继续运行的外设将会选择合适的时钟继续运行。

在该模式下继续运行的有Osc、HS IntOSC、LS IntOSC、WDTA0、RTCA、TAUJ0\2、POC、LVI等。

值得注意的是,结合状态迁移图,当有唤醒事件产生时,DeepSTOP就可以返回RUN模式,也可以进入Cyclic RUN模式。这是依据WUF寄存器里定义的不同唤醒事件来决定的,例如WUF0\WUF_ISO0标志位会返回到RUN状态,WUF20会进入Cyclic RUN。

AUTOSAR EcuM休眠阶段的具体实现详解w7.jpg

这里还有一点,在DeepSTOP模式下,如有唤醒事件的产生,CPU则会从复位向量首地址开始运行代码,可以从RESF检查标志位从而判断是否是从DeepSTOP返回的,唤醒事情也可从寄存器WUF0/ISO0读取;这里又与我理解的EcuM的GoPoll有很大差异。
2.4 Cyclic RUN和STOP模式Cyclic RUN与RUN模式类似,但CPU是在retention RAM里获取指令,同时只有AWO外设、RLIN3、CSIG0可以使用。这种模式字面意思很好解,就是系统周期性唤醒来检查某些事件。所以要使用这种模式,首先是要进DeepSTOP模式,然后配置后几个Wake up factor2的唤醒事件--例如TAUJ0/2的周期唤醒,将要运行的代码放置在Retention RAM里。当从这种模式唤醒时,CPU是从Retention RAM首地址开始取指运行。
Cyclic STOP也可以参考STOP模式,但是除AWO外设和RLIN3其余全部会停止。3.EcuM的Sleep目标与MCUStand by模式对应关系
在系统设计时,我们考虑到ECU有两种休眠模式,一种是正常休眠,这种情况个人认为是要进到最低功耗,也即DeepSTOP。还有一种是电压不稳导致的休眠,这我是在座舱里遇到的,电压低于6V,导致中控、仪表屏电供不上了,但是MCU还是可以在较低电压做一些动作,这种情况就使用Sleep或者Halt,等待电压回复,然后做具体分析。

那么结合AUTOSAR代码,我们来具体分析。

    首先是正常下电流程,在BswM完成NvM的写和验证后,选择进入Sleep,此时将控制权让渡给EcuM,假设现在EcuM的SleepMode配置里正常休眠模式配置为Poll,Standby模式选择Stop,则进入函数:

EcuM_InternalEnterPollingMode -> EcuM_McuSetMode ->Mcu_SetMode

AUTOSAR EcuM休眠阶段的具体实现详解w8.jpg

对应芯片的StandBy模式宏定义如下:
AUTOSAR EcuM休眠阶段的具体实现详解w9.jpg

根据所选择的Standby模式,在Mcu_SetMode里做处理:

AUTOSAR EcuM休眠阶段的具体实现详解w10.jpg

    如果选择GoHalt,则如下:

AUTOSAR EcuM休眠阶段的具体实现详解w11.jpg

可以看到,代码是按照AUTOSAR规范来走的,但在实际使用中,为了降低功耗,通常都会选择进入DeepSTOP模式,这时候根据该模式的描述,只要唤醒都会从reset handle开始处理;或者为了快速启动,选择进入STOP,这两种情况CPU时钟都是停掉的;因此EcuM的GoPoll中要求的一直轮询唤醒事件代码,Halt中要求的生成RAM Hash其实都很难实现。所以,AUTOSAR虽然定义非常理想,但在实际开发中,还是要根据芯片本身的低功耗控制来做具体处理。题外话:既然选择DeepStop,那么返回至RUN模式后,在启动阶段通常还会做一件事,那就是从WUK1\2去获取唤醒事件。
AUTOSAR EcuM休眠阶段的具体实现详解w12.jpg


该用户从未签到

发表于 15-3-2025 12:33:00 | 显示全部楼层
尊敬的网友:

AUTOSAR EcuM中的休眠阶段主要分为两种模式:Halt和Poll。在Halt模式下,MCU进入深度休眠状态,所有活动均暂停,仅保留必要的最低功耗运行,例如时钟和复位电路。此时,任何外部或内部事件都无法唤醒MCU,除非通过特定的硬件复位或外部中断。而在Poll模式下,MCU会定期唤醒以执行某些任务,如检查输入信号或发送诊断信息。在AUTOSAR EcuM SWS中,对于Sleep阶段的具体实现涉及状态迁移、中断管理以及低功耗设计等方面。在实现过程中需确保MCU能正确响应不同模式间的切换,并确保系统稳定、可靠运行。有关具体实现细节和工程实践,建议您参考AUTOSAR官方文档和相关工程案例分析。

以上是对AUTOSAR EcuM休眠阶段的专业回复,希望对您有所帮助。
回复 支持 反对

使用道具 举报



该用户从未签到

发表于 15-3-2025 12:33:00 | 显示全部楼层
尊敬的网友:

关于AUTOSAR EcuM休眠阶段的具体实现,AUTOSAR定义了两种休眠模式:Halt和Poll。在Halt模式下,MCU会停止大部分活动,仅保留必要的基本功能运行,以低功耗状态运行。而在Poll模式下,MCU会定期唤醒进行必要的状态检查或任务执行。

在AUTOSAR EcuM SWS中,对于Sleep阶段,其流程设计从BswM过渡到EcuM的规则仲裁是关键环节。在休眠模式选择为Halt时,需调用API EcuMGenerateR进行休眠状态的管理和配置。在MCU进入休眠模式后,其内部定时器、中断等机制会按需配置以保证唤醒和休眠的精准切换。

以上是对AUTOSAR EcuM休眠阶段的基本介绍,更详细的技术实现细节需要结合具体的硬件平台和软件架构进行深入分析和研究。希望以上内容对您有所帮助。如有更多问题,欢迎进一步交流探讨。
回复 支持 反对

使用道具 举报



该用户从未签到

发表于 15-3-2025 12:33:00 | 显示全部楼层
好的,针对您提到的AUTOSAR EcuM休眠阶段的具体实现,我可以为您进行专业解答。

AUTOSAR EcuM中的休眠阶段主要包括两种模式:Halt和Poll。在Halt模式下,MCU会停止大部分活动,仅保留必要的基本运行,如内存保持等。而在Poll模式下,MCU会定期唤醒进行必要的检查或任务处理。

在AUTOSAR EcuM SWS中,对于Sleep阶段的实现,其宏观流程设计会涵盖从BswM过渡到EcuM的规则仲裁。在Halt模式下,API EcuMGenerateR将被调用以生成休眠请求,随后进入休眠状态。在Poll模式下,MCU会根据设定的周期唤醒并执行相关任务。

具体到MCU的工作方式,会根据不同的MCU型号和厂商实现有所不同。但总体上,在休眠模式下,MCU会尽可能地降低功耗,同时确保在需要时能够迅速响应并恢复正常运行。

以上是对AUTOSAR EcuM休眠阶段的一个简要介绍,更多细节建议您查阅AUTOSAR相关文档或参考具体的工程实践。
回复 支持 反对

使用道具 举报

快速发帖

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

本版积分规则

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

GMT+8, 19-8-2025 10:45 , Processed in 0.351555 second(s), 37 queries .

Powered by Discuz! X3.5

© 2001-2013 Comsenz Inc.