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

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

3天内不再提示

唤醒事件(也称唤醒源)有效性验证为什么要设置一段时间?

冬至配饺子 来源:开心果 Need Car 作者:开心果 Need Car 2022-08-23 11:25 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

前言

上一篇中讲只有Transceiver、Controller处于正常工作模式以后才能有效的收发报文,进而才能识别报文的类型(NM Message、XCPMessage、Diagnostic Message、APPMessage)。但识别出这些报文需要一个前提:ECU上电同时整个主程序运行起来,且需要一定的时间去识别报文类型。

项目中,唤醒事件(也称唤醒源)有效性验证为什么要设置一段时间?ECU上电,整个主程序如何运行起来?

本篇就上述问题进行分析。

唤醒事件有效性验证时间分析

在实际的网络管理项目中,大家可能会遇到这样的需求:收到有效唤醒事件(如:网络管理报文),网络激活,报文正常收发;如果收到的报文是非网络管理报文,ECU需要保持一定时间后休眠(如:ECU保持5s,即5s内ECU处于供电状态)。注意后者网络仍然在BSM(BusSleepMode),只能此时间内接收报文,不能发送报文。如果ECU在该时间内收到有效唤醒事件(多数是网络管理报文,也可能是有效的Power ON信号报文),网络将激活,进而进行正常的报文收发。

注意:ECU唤醒是网络唤醒的前提条件,ECU唤醒并不一定网络唤醒,如果网络激活(进入NormalMode)则ECU一定唤醒(RUN模式)

为什么要ECU保持一段时间呢?这里说一下个人理解,ECU自身并不知道唤醒事件是不是有效,ECU只要被供电就从启动文件指定的位置开始执行程序。如果要识别该唤醒事件是不是有效需要上层模块(EcuM)识别,而EcuM从开始验证到确认该事件的有效性需要调用底层模块确认(如:Controller或者Transceiver),这需要时间,且EcuM的验证和确认一般是异步执行,这也需要时间。上述时间其实并不长,项目不同执行的时间不等(每个项目初始化模块数量和读NVM时间不同),但多数在几十毫秒内执行完,但又为什么会要求1s或者5s或者更长呢?个人理解:ECU被唤醒,整个冷启动(可以理解为与电压相关的启动)花费了“较长”的时间,废了这么大劲立马Shutdown有点“过分”,如果ECU下电又被干扰起来还需要重头再来(各个模块、外设初始化、读NVM等),既然这样还不如等待一段时间确定没有有效唤醒事件以后,ECU再走Shutdown流程,进而避免ECU频繁的唤醒->休眠->唤醒,注意是ECU,不是网络被唤醒->休眠->唤醒,网络只有有效唤醒源才能激活。

ECU上电,程序运行过程分析

ECU如果要正常的运行程序,则需要供电,之后程序开始执行:启动文件->BootLoader->Application,进入“main”函数,也就是我们熟知的用户代码程序。用户代码程序包含ASWC的runnable以及各个模块的mainhandler(如:CanTrcv_30_Tja1145_MainFunction),这些程序在OS的调度下周期性或者事件触发执行,这也是上层模块可以收到消息和处理消息的基础。

这里主要分析EcuM管理的上电到程序运行过程。AUTOSAR中,EcuM分为Flexible和Fixed两种类型,因为Fixed并不支持多核且不灵活,本文主要讨论Flexible类型的EcuM。

pYYBAGMESDyAX8xwAACoYJ2kfXY991.png

如上图(1)所示,CInitCode一般是应用程序的main函数,即EcuM_Init在应用程序的main函数被调用,EcuM将控制ECU的启动流程,EcuM调用StartOS,让Os完成Task的激活。

EcuM_Init并不能完成MCU所有的初始化动作,在StartPreOS Sequence阶段主要完成DET模块(最先完成初始化,以便其它模块可以上报开发错误)以及一些硬件外设的初始化,如MCU、Port、Internal Watchdog等(主要根据项目需求设置要初始化的外设模块)。

poYBAGMESFKAP1JDAADR9R37i-A697.png

如上图,EcuM_StartupTwo将完成SchM(Os),BSW模块的初始化,其中各个模块的初始化(Can_Init、CanIf_Init等)在BswM中完成。程序所需的所有外设、模块初始化之后,启动Scheduler 定时,即周期性的执行BSW/SWCs任务,至此Application程序得以运行。



审核编辑:刘清

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

    关注

    147

    文章

    19265

    浏览量

    405354
  • AUTOSAR
    +关注

    关注

    11

    文章

    414

    浏览量

    23821
  • ecu
    ecu
    +关注

    关注

    14

    文章

    1003

    浏览量

    57618
  • DET
    DET
    +关注

    关注

    0

    文章

    3

    浏览量

    8832
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    在使用HMC439鉴相器功能的验证过程中,总是工作一段时间后挂掉这是为什么?

    ,Vpp为3V的信号CH1,CH2分别接到REF和VCO口,电压表接NU和ND口。 改变CH2初始相位,两路信号相位差改变,刚开始电压表读数会随着改变,两者不是线性关系;验证进行一段时间,在某个节点后
    发表于 05-07 07:50

    变频器运行一段时间电机会过热处理方法

    变频器驱动电机运行一段时间后出现过热,通常不是单原因,需要按顺序排查。以下是系统的处理方法: 、首先区分是电机过热还是变频器误报 用手背触摸电机外壳 :若烫得手不能停留超过3秒(约>
    的头像 发表于 04-27 17:37 1211次阅读
    变频器运行<b class='flag-5'>一段时间</b>电机会过热处理方法

    JL杰理AC696N系列芯片开发经验:芯片复位与唤醒深度解析

    很多,它的复位和唤醒机制其实挺灵活的,但官方文档分散在各个模块里,新手容易漏配置。最近在AC696N开发板上调试低功耗方案,把复位唤醒IO这块理了下,整理出来方便后面排查问题用。
    发表于 03-28 10:57

    LAT1594_基于事件唤醒低功耗之介绍

    客户反馈在 STM32U575 上使用 standby 模式时,无法使用 WKUP 管脚唤醒,检查客户配置后,发现是唤醒管脚配置错误导致,修改为正确配置后能正常唤醒 CPU。Cortex-MCPU
    发表于 03-11 10:48 0次下载

    使用芯CW32 MCU来实现低功耗模式下的RTC定时唤醒功能

    RTC时钟为外部低速晶振(LSE),并设置时间和日期。 进入低功耗模式:然后,将MCU置于睡眠模式,并通过RTC定时唤醒唤醒后的处理:
    发表于 12-04 07:55

    请问外部事件立即唤醒MCU如何设置

    应用中外部事件如按钮按下、传感器检测到特定信号等需要立即唤醒MCU。该如何设置外部中断?怎么能在低功耗模式下仍然可靠触发唤醒
    发表于 12-04 06:56

    请问如何合理设置这些唤醒条件?

    CW32A030 MCU支持从Sleep和DeepSleep模式通过外部中断或实时时钟唤醒。如何合理设置这些唤醒条件,以实现最佳的功耗和响应速度平衡呢?
    发表于 11-26 06:59

    MCU典型的睡眠唤醒时间delay的概念

    模式唤醒时,CPU不会立即执行后面的指令,而是会有定的delay,这个delsy通常在8个系统时钟以内。当唤醒后,系统时钟和外设时钟会重新使能,器件就重新启动 并以先前配置的当前时钟
    发表于 11-25 08:03

    AQ6370D使用一段时间会无法通讯问题(TCP通讯)

    使用LAN通讯方式与AQ6370D光谱仪通讯,通讯无问题,但是过一段时间通讯失败
    发表于 11-19 14:47

    如何验证电能质量在线监测装置硬件层实时监测冗余切换功能的有效性

    验证硬件层冗余切换功能的有效性,核心是 模拟真实故障场景 + 量化关键指标(切换时间、数据完整、精度稳定性)+ 长期工况验证 ,通过 “实
    的头像 发表于 11-09 17:03 1446次阅读

    单片机运行一段时间死机,为什么?

    问题: 单片机运行一段时间死机,想通过在死机前异常时利用cmbacktrace捕捉log保存,让系统重启重启后通过shell打印出死机时信息,用addr2line分析死机原因
    发表于 09-29 08:26

    如何验证硬件冗余设计的有效性

    硬件冗余设计的核心目标是应对单点故障、保障系统连续运行,其有效性验证需围绕 “故障发生时的切换能力、数据完整、业务连续” 三大核心指标展开,通过 “静态配置检查 + 动态故障模拟
    的头像 发表于 09-18 16:36 1767次阅读
    如何<b class='flag-5'>验证</b>硬件冗余设计的<b class='flag-5'>有效性</b>?

    使用USB传输数据一段时间后能正常运行但是不会再上发数据,为什么?

    尝试过两种程序都会出现这种问题:使用USB传输数据一段时间后能正常运行但是不会再上发数据,都是基于正点原子水星开发板,主控为STM32H743iit6进行测试 使用的是PB14/PB15的HS,上发
    发表于 09-18 07:59

    AD7606BSTZ正常工作一段时间后,ad停止转换是什么原因导致的?

    您好,我的控制板上采用AD7606BSTZ来采集逆变器的三相电流。在变流器没有跑功率的时候,AD芯片可以直工作;跑功率时运行20min左右之后,AD转换的数值开始发生错误,会出现较长时间结果为0;再过一段时间芯片就完全不工作了
    发表于 07-29 08:58

    使用USB传输数据一段时间后能正常运行但是不会再上发数据,为什么?怎么解决?

    尝试过两种程序都会出现这种问题:使用USB传输数据一段时间后能正常运行但是不会再上发数据,都是基于正点原子水星开发板,主控为STM32H743iit6进行测试 使用的是PB14/PB15的HS,上发
    发表于 06-10 08:22