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
    +关注

    关注

    146

    文章

    16848

    浏览量

    349788
  • AUTOSAR
    +关注

    关注

    10

    文章

    345

    浏览量

    21438
  • ecu
    ecu
    +关注

    关注

    14

    文章

    875

    浏览量

    54354
  • DET
    DET
    +关注

    关注

    0

    文章

    3

    浏览量

    8576
收藏 人收藏

    评论

    相关推荐

    文搞懂Linux进程的睡眠和唤醒

    : 使用 sleep() 函数让进程暂停执行一段时间 使用 usleep() 函数,使进程睡眠0.5秒,精确度更高 使用 nanosleep(),使进程睡眠1.5秒,可以精细控制时间 2.
    发表于 11-04 15:15

    TAS5825正常播放一段时间后,进入Sleep模式喇叭没有声音,为什么?怎么解决?

    TAS5825正常输出音频信号一段时间后,芯片进入sleep模式,喇叭没有声音。 读取相关寄存器发现DEVICE_CTRL2 寄存器设置为0x03,上电之后STATE_RPT 寄存器值为0x03
    发表于 10-15 08:19

    风机运行一段时间跳闸的原因

    风机在运行一段时间后跳闸,可能的原因有多种,以下是些常见的因素及其解决方法: 、电气因素 起动电流过大 : 对于大功率容量的风机,建议采用降压起动方式以减少起动电流。 检查电气系统,确保电气元件
    的头像 发表于 09-30 10:11 709次阅读

    求助,有没有上升沿和下降沿触发后保持一段时间可以恢复的芯片?

    电源输出 然后在板子上电时SN74LVC1G80-Q1的Q pin就直接输出了高电平,并不能停止输出 我想咨询有没有上升沿和下降沿触发后保持一段时间可以恢复的芯片
    发表于 09-23 07:16

    使用labview调用python运行一段时间后,报错

    使用labview调用python运行一段时间后,报错。 labview版本:2018*64; python:3.6x64 怎么解决~
    发表于 08-26 10:16

    如何让蜂鸣器响一段时间停止

    蜂鸣器是种常见的电子元件,广泛应用于各种电子设备中,如闹钟、电话、电子玩具等。蜂鸣器的工作原理是通过电磁线圈产生磁场,使蜂鸣片振动产生声音。本文将介绍如何让蜂鸣器响一段时间停止,包括硬件连接、软件
    的头像 发表于 08-09 10:06 580次阅读

    ESP32 CAM板子在light_sleep模式唤醒时有定概率重启的原因?

    我使用ESP32-CAM板子,程序逻辑是每工作一段时间(比如60s)然后进入light sleep模式100s,设置light sleep的唤醒方式为timer。 但是程序有定概率
    发表于 06-18 08:29

    STM3218B20读取一段时间后出0是怎么回事?

    18b20读取一段时间后出0
    发表于 04-22 06:58

    STM8串口工作一段时间后出现通讯异常的原因?

    能串口。发送数据前先发送几个0x00唤醒对方再发有用数据。通讯速率很低。 产品在终端客户手上使用一段时间后可能会出现通讯不上的问题。出现问题后过一段时间可能会自行恢复。通过对STM8L052R8T6
    发表于 04-15 08:05

    两个控制器间SPI通信片选使能后为什么一段时间才收发数据?

    求助各位大佬,[抱拳]:两个控制器间SPI通信片选使能后为什么一段时间才收发数据?收发完数据后为什么过一段时间才拉高片选?如附图示时间段1和时间
    发表于 03-13 08:13

    tc264隔一段时间会复位有些什么原因呢?

    tc264隔一段时间会复位有些什么原因呢
    发表于 02-02 07:31

    LTM4700负载满载时,运行一段时间电源会掉电下如何解决?

    您好, 使用LTM4700遇到个问题:在负载不满载时,没有问题,负载满载时(电流约60A),运行一段时间电源会掉电下,怀疑是过流导致电源保护,环路补偿设置不合适,但是环路补偿如何
    发表于 01-04 08:01

    AD7655芯片工作一段时间后异常是什么原因引起的?

    一段时间后,AD7655芯片会急剧增温,AVDD电平拉低。 不知道这是什么原因引起的? 在线等。。那位大神指点下啊?谢谢!
    发表于 12-14 06:00

    维修力科示波器604ZI开机一段时间黑屏

    近日某院校送修力科示波器604ZI,客户反馈开机一段时间黑屏,对仪器进行初步检测,确定与客户描述故障基本致。本期将为大家分享本维修案例。 下面就是力科-604ZI维修情况 力科示波器604ZI开机
    的头像 发表于 12-11 16:18 440次阅读

    一段时间内有100个离散的加速度,如何通过C语言求出这一段时间里的位移?

    一段时间内 有100个离散的加速度如何通过C语言求出这一段时间里的位移?
    发表于 11-07 08:17