0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

理一理AUTOSAR架构下的唤醒源事件

832065824 来源:汽车电子嵌入式 2023-07-14 09:11 次阅读

前言

最近的项目负责网络管理部分,网路唤醒和ECU系统的休眠关系紧密,对系统的唤醒源事件感觉理解的不是很透彻,今天就来理一理AUTOSAR架构下的唤醒源事件。本文就先介绍AUTOSAR架构下EcuM模块管理的唤醒源事件,然后介绍每一个和唤醒源相关的接口函数及其适用场景,然后回答以下几个问题:

1.唤醒源有哪几种状态,每个状态之间是怎么切换的?

2.唤醒源会影响系统的下电/休眠流程吗?

3.断电系统,唤醒后没有Wakeup Sequences, 有 Wakeup validation sequence么?

正文

1.唤醒源状态

EcuM模块管理所有的唤醒源,每个唤醒源有四个状态:ECUM_WKSTATUS_NONE,ECUM_WKSTATUS_PENDING,ECUM_WKSTATUS_VALIDATED, ECUM_WKSTATUS_EXPIRED。ECU上电后(复位后)每个唤醒源处于ECUM_WKSTATUS_NONE状态。

79c83d00-21dd-11ee-962d-dac502259ad0.png

从上图可以看出,唤醒源的每次状态切换都需要通过BswM_EcuM_CurrentWakeup接口通知到BswM模块。

ECUM_WKSTATUS_NONE切换到ECUM_WKSTATUS_PENDING或ECUM_WKSTATUS_VALIDATED状态

唤醒源事件可以通过底层的AUTOSAR标准模块(如:Can Transceiver等)主动上报(需要配置Transceiver的唤醒源检测功能),也可以通过手写模块来轮询检测上报(不配置AUTOSAR标准模块的唤醒检测功能,全部统一由手写模块来管理)。无论是配置还是手写模块,统一使用EcuM_SetWakeupEvent接口上报唤醒源事件,EcuM模块根据该唤醒源是否配置了校验切换唤醒状态从ECUM_WKSTATUS_NONE切换到ECUM_WKSTATUS_PENDING或ECUM_WKSTATUS_VALIDATED状态。

ECUM_WKSTATUS_PENDING状态切换到ECUM_WKSTATUS_VALIDATED状态

背景知识1:本地(如IGN硬线)唤醒源唤醒一般不配置(在EcuM模块中配置)唤醒源的校验(Validation),远程网络(如Can唤醒)唤醒源一般配置唤醒源检验。CAN网络唤醒需要配置CanTrcv和CanIf模块,且一般配置只有收到NM网络管理报文唤醒,也就是说,只有收到NM网络管理报文后CanIf才会设置一个有效唤醒源的标志Flag,EcuM的轮询检测可以通过CanIf_CheckValidation读取唤醒标致。

背景知识2:想分析唤醒事件是不是有效的总线唤醒源(网络管理报文),需要Ecu有正常的收发报文能力,想要收发报文,Transceiver和Controller两个模块均需要启动。一般来讲,Transceiver会在程序初始化时进入正常的工作模式,而Controller进入正常的工作模式是EcuM调用EcuM_StartWakeupSources的结果,而该接口为Callout函数,内部功能自定义实现,一般在EcuM_StartWakeupSources中调用CanSM_StartWakeupSource,CanSM模块会开启Can Controller。也就是说,在EcuM模块调用CanIf_CheckValidation校验唤醒源事件前,需要先调用EcuM_StartWakeupSources。

EcuM的Mainfunction中会轮询唤醒源状态,在检测到唤醒源状态切换为ECUM_WKSTATUS_PENDING后就会开启唤醒源状态校验: EcuM_MainFunction --> EcuM_CheckValidation --> CanIf_CheckValidation -->读取网路唤醒源标志 --> 如果唤醒源标志置位则调用EcuM_ValidateWakeupEvent,唤醒源头从ECUM_WKSTATUS_PENDING状态切换到ECUM_WKSTATUS_VALIDATED状态。

ECUM_WKSTATUS_PENDING状态切换到ECUM_WKSTATUS_EXPIRED

EcuM的Mainfunction在轮询唤醒源状态时并没有检测到有效的唤醒源(通过CanIf_CheckValidation并没有读取到有效的唤醒标志,比如通过应用报文唤醒ECU后设置了WakeupEvent),在ValidateWakeup timer超时(Expired)后就会切换唤醒转到到ECUM_WKSTATUS_EXPIRED

从其他状态切换到ECUM_WKSTATUS_NONE:

系统中调用调用了EcuM_ClearWakeupEvent接口后,唤醒源状态切换回ECUM_WKSTATUS_NONE。唤醒源的清除需要User去调用,如果是手写模块监控唤醒源的话,可以实时Set/Clear唤醒源,如果通过AUTOSAR标准模块管理唤醒源的话,在系统满足休眠条件前清除掉所有唤醒源,在进入Shutdown的判断条件中加上唤醒源都不为Pending/Valid的条件。

2.唤醒源相关的接口函数

EcuM提供以下接口来获取唤醒源专题:

· EcuM_GetPendingWakeupEvents

· EcuM_GetValidatedWakeupEvents

· EcuM_GetExpiredWakeupEvents

通过以下接口操作唤醒源的状态:

· EcuM_ClearWakeupEvent

· EcuM_SetWakeupEvent

· EcuM_ValidateWakeupEvent

· EcuM_CheckWakeup

· EcuM_DisableWakeupSources

· EcuM_EnableWakeupSources

· EcuM_StartWakeupSources

· EcuM_StopWakeupSources

EcuM_GetPendingWakeupEvents

EcuM_GetValidatedWakeupEvents

EcuM_GetExpiredWakeupEvents

这三个接口用来获取唤醒源的状态,一般在BswM管理ECU状态中会使用,也就是上文所说的在ECU进入Shutdown/Sleep状态前会通过这几个接口来判断唤醒状态是不是都已经为NONE状态了。

EcuM_ClearWakeupEvent

EcuM_SetWakeupEvent

EcuM_ValidateWakeupEvent

这3个接口的分析见第2章节的分析

EcuM_CheckWakeup

这个接口为Callout函数,也就是内容由User自定义实现。这个函数只有深度休眠系统/EcuM走GoSleep Sequence才会用到,一般EcuM_CheckWakeup -> CanIf_CheckWakeup -> CanTrcv_CheckWakeup,CanTrcv_CheckWakeup函数中会检测收发器(TJA1043)的STB和ERR引脚来判断是否有总线唤醒事件,如果有的话吗,CanTrcv_CheckWakeup调用EcuM_SetWakeupEvent上报唤醒事件。如果配置了Check Wakeup Timeout的话,在EcuM_CheckWakeup函数中调用EcuM_StartCheckWakeup,启动相应WakeupSource的CheckWakeupTimer,如果唤醒源的检查是异步完成的(CheckWakeupTimer),CheckWakeupTimer参数是EcuM延迟ECU关闭的时间的初始值,一般不配置CheckWakeupTimer。

7a68b460-21dd-11ee-962d-dac502259ad0.png

EcuM_DisableWakeupSources

EcuM_EnableWakeupSources

这两个接口为Callout函数,也就是内容由User自定义实现。这两个函数只有深度休眠系统/EcuM走GoSleep Sequence才会调用到。深度休眠系统需要在下电前把唤醒引脚配置为中断口,在休眠起来后把唤醒引脚的中断属性Disable,可以通过这两个Callout函数实现。也就是在EcuM_EnableWakeupSources函数Enbale唤醒引脚的INT功能,在EcuM_DisableWakeupSources函数中Disable唤醒引脚的INT功能。

EcuM_StartWakeupSources

EcuM_StopWakeupSources

这两个接口为Callout函数,也就是内容由User自定义实现。EcuM_Mainfunction在检测到唤醒源事件由ECUM_WKSTATUS_NONE切换到ECUM_WKSTATUS_PENDING状态时调用EcuM_StartWakeupSources。在EcuM_StartWakeupSources中一般判断唤醒源是网络唤醒源后调用CanSM_StartWakeupSource,CanSM最终会开启Can Controller,这样Can模块就能正常接收报文,为后面的EcuM_CheckValidation校验做好准备。EcuM_StartWakeupSources需要在EcuM_CheckValidation前调用,因为唤醒源校验需要Can Controller能接收报文

7a858dec-21dd-11ee-962d-dac502259ad0.png

EcuM_Mainfunction在检测到唤醒源事件由ECUM_WKSTATUS_PENDING切换到ECUM_WKSTATUS_EXPIED状态时调用EcuM_StopWakeupSources。在EcuM_StopWakeupSources中一般判断唤醒源是网络唤醒源后调用CanSM_StopWakeupSource,CanSM最终会关闭Can Controller,这样Can模块就不能接收报文,为系统休眠做好准备。

7aa2a490-21dd-11ee-962d-dac502259ad0.png

3.问题回答

问题1:唤醒源有哪几种状态,每个状态之间是怎么切换的?

:唤醒源有ECUM_WKSTATUS_NONE, ECUM_WKSTATUS_PENDING, ECUM_WKSTATUS_VALIDATED, ECUM_WKSTATUS_EXPIRED四种状态,具体切换参考第2节。

问题2:唤醒源会影响系统的下电/休眠流程吗?

:会。但是EcuM_Flex不会去check唤醒源的状态,需要我们自己把唤醒状态的条件加到ECU系统状态切换条件中去。根具体的说,在调用EcuM_GoDown/EcuM_GoHal前需要判断说有唤醒源是不是都已经NONE状态了。

问题3:断电系统,唤醒后没有Wakeup Sequences, 有 Wakeup validation sequence么?

:有。EcuM的Wakeup validation sequence和断电系统或者深度休眠系统无关。






审核编辑:刘清

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

    关注

    10

    文章

    2971

    浏览量

    104788
  • AUTOSAR
    +关注

    关注

    9

    文章

    330

    浏览量

    21138
  • 状态机
    +关注

    关注

    2

    文章

    486

    浏览量

    27182
  • CAN模块
    +关注

    关注

    0

    文章

    19

    浏览量

    8676
  • ECU设计
    +关注

    关注

    0

    文章

    5

    浏览量

    3254

原文标题:AUTOSAR 架构下EcuM唤醒源事件详解

文章出处:【微信号:汽车电子嵌入式,微信公众号:汽车电子嵌入式】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    AUTOSAR分层架构

    AUTOSAR分层架构
    发表于 09-26 11:12

    串级PID为什么需要过零处?如何进行过零处

    串级PID为什么需要过零处?串级PID如何进行过零处?如何判断电机是否过机械零点?
    发表于 06-30 06:48

    AC697N是什么?杰AC697N有哪些优点?

    AC697N是什么?杰AC697N有哪些特性?杰AC697N有哪些优点?AC697N在低功耗、主动降噪、高清音质的表现是什么?
    发表于 07-02 07:12

    功能安全---AUTOSAR架构深度解析 精选资料分享

    AUTOSAR架构深度解析本文转载于:AUTOSAR架构深度解析AUTOSAR的分层式设计,用于支持完整的软件和硬件模块的独立性(Indep
    发表于 07-23 08:34

    AUTOSAR架构深度解析 精选资料推荐

    AUTOSAR架构深度解析本文转载于:AUTOSAR架构深度解析目录AUTOSAR架构深度解析
    发表于 07-28 07:40

    AUTOSAR架构深度解析 精选资料分享

    AUTOSAR架构深度解析本文转载于:AUTOSAR架构深度解析AUTOSAR的分层式设计,用于支持完整的软件和硬件模块的独立性(Indep
    发表于 07-28 07:02

    STM32的核心Cortex-M3处器是什么

    STM32的核心Cortex-M3处器是个标准化的微控制器结构,希望思考一下,何为标准化?简言之,Cortex-M3处器拥有32位CPU,并行总线结构,嵌套中断向量控制单元,调试
    发表于 08-02 08:52

    基于ARM Cortex-M3处架构的STM32系列

    和指令集方面的理解负担,我们使用RISC指令集的CPU。基于ARM Cortex-M3处架构的STM32系列Soc在低功耗嵌入式领域有着比较广泛的应用。因此,我们选择这款Soc作为其硬件平...
    发表于 08-05 06:07

    关于AUTOSAR架构的知识点看完你就懂了

    关于AUTOSAR架构的知识点看完你就懂了
    发表于 10-18 07:41

    STM32的核心Cortex-M3处器的标准化是什么意思

    STM32的核心Cortex-M3处器是个标准化的微控制器结构,希望思考一下,何为标准化?简言之,Cortex-M3处器拥有32位CPU,并行总线结构,嵌套中断向量控制单元,调试
    发表于 12-06 07:53

    AUTOSAR软件架构是由哪些部分组成的

    章节回顾AUTOSAR软件架构)中描述了以下内容:Application Layer应用层Runtime Environment (RTE)运行时环境Basic Software (BSW
    发表于 12-09 07:30

    分享一下RK3399处器的GPU和CPU性能方法

    分享一下RK3399处器的GPU和CPU性能方法
    发表于 03-07 06:36

    Cortex-A9处器技术参考手册

    Cortex-A9处器是款高性能、低功耗的ARM宏单元,具有L1缓存子系统,可提供完整的虚拟内存功能。Cortex-A9处器实现ARMv7-A架构,在Jazelle®状态
    发表于 08-02 16:29

    Arm Cortex-R82处器技术参考手册

    Cortex®-R82处器是款中等性能的多核有序超标量处理器,适用于实时嵌入式应用。 Cortex®-R82处器采用ARM®V8-R AArch64架构。 ARM®V8-R AA
    发表于 08-17 07:45

    AUTOSAR是什么?AUTOSAR软件架构简介

    AUTOSAR的全称是AUTomotive Open System Architecture,直译为汽车开放系统架构
    的头像 发表于 07-08 17:26 9785次阅读
    <b class='flag-5'>AUTOSAR</b>是什么?<b class='flag-5'>AUTOSAR</b>软件<b class='flag-5'>架构</b>简介