• 754查看
  • 0回复

[网络开发] CAN通讯系列补充篇:LimpHome状态12

[复制链接]

  • TA的每日心情
    无聊
    1-7-2015 18:46
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 7-1-2024 16:34:20 | 显示全部楼层 |阅读模式

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


    本文经CSDN博主- 嵌软小白呗允许转发,感谢支持!分享了几篇作者关于AutoSAR NM相关内容后,本文接着了解OSEK NM,OSEK NM也是汽车ECU常用的网络管理方法,后续对两者做个比较,以此可以更清晰地了解网络管理。本文将在原文基础上稍作修改,欢迎关注作者。
    原文链接:全面详细讲解OSEK直接网络管理,并对比Autosar网管。
    之前文章:

      CAN通讯系列补充篇:OSEK NM是什么10

      CAN通讯系列补充篇:OSEK NM异常工况分析11

    分析OSEK NM的正常工况与异常工况,针对异常工况,以及已经提到了LimpHome状态,本文接着上篇文章对LimpHome状态进行详细说明。

    1. 具体如何进入LimpHome状态

    CAN通讯系列补充篇:LimpHome状态12w1.jpg

    1.1 当有主动请求或CAN总线上存在节点SleepInd不为1时,TX失败
    情况A:当处于NMNORMAL状态出现TX失败① 当出现CAN总线上的Ring报文指向我们后,我们开启“TTyp”定时器,定时时间完成后,我们会请求发出网管报文但发送失败(NMtxcounter+1),并开启“TMax”定时器,由于我们没发出网管报文,导致其它ECU的“TMax”计时完成,我们的“TMax”计时也完成同时网管状态进入NMRESET状态。②我们进入REST状态后请求发出Alive报文但发送不成功(NMtxcounter+1),并再次进入NMNORMAL状态。③ 由于我们Alive报文发送不成功,CAN总线的逻辑环不会包含我们节点,因此,逻辑环会跳过我们,我们由于检测到被跳过,因此会请求发送Alive报文,但仍然发送失败(NMtxcounter+1)。④ 不断循环步骤3,直到NMtxcounter等于txlimit。我们的NM状态进入LimpHome状态。情况B:当处于NMRESET状态出现TX失败情况A中除去①,剩下②③④即是处于NMRESET状态出现TX失败的流程。1.2 当有主动请求(Active)时,RX失败由于我们有主动请求,因此不会进入休眠。又由于无法接收报文,我们无法收到指向我们的Ring报文,“TMax”计时完成后,我们会进入RESET状态(NMrxcount+1),并发送Alive报文,然后进入NMNORMAL。不断循环上述情况,直到NMrxcount等于rxlimit。我们的NM状态进入LimpHome状态。1.3 当无主动请求且CAN总线上所有节点SleepInd为1,TX失败当我们无主动请求,且所有节点SleepInd为1时,逻辑环一定会出现某个节点SleepAck为1。由于txlimit为8,理论上来说,当这个NMtxcounter计数器还没到txlimit,我们节点就能接收到SleepAck为1的报文,则直接进入WaitBusSleep模式了。1.4 当无主动请求(Passive)时,RX失败① 由于无法接收到Ring报文,“TMax”计时完成后,我们会进入RESET状态(NMrxcount+1)② 在RESET状态发送Alive报文后,开启“TTyp”定时器,并进入NMNORMAL状态,“TTyp”定时器完成后,由于未收到其它节点的报文,因此我们认为总线上所有节点的SleepInd已置位,然后我们发送SleepAck报文,并进入WaitBusSleep模式。2. 进入LimpHome状态后的动作当ECU处于LimpHome状态,ECU将不再申请加入逻辑环,即不再发送Alive和Ring报文,而是发送LimpHome报文。LimpHome状态如下:
    CAN通讯系列补充篇:LimpHome状态12w2.jpg
    LimpHome报文的发送情况:
    情况1:当有主动请求或接收到CAN总线上存在节点SleepInd不为1时:LimpHome状态处于“NMLimpHome Active”子状态,并按照TError周期发送LimpHome报文。情况2:当无主动请求且接收到CAN总线上所有节点SleepInd都为1时: 发送SleepInd置1的LimpHome报文,LimpHome状态从“NMLimpHomeActive”子状态跳至““NMLimpHomeActivePreSleep” 子状态。发送完该报文同时开启“TMax”计时器,等待计时结束后网管状态进入NMTwbsLimpHome,等待TwaitBusSleep时间后进入BusSleep状态。情况3:当接收到SleepAck置1的网管报文:则直接进入NMTwbsLimpHome状态,等待TwaitBusSlee时间后进入BusSleep状态。另外,当在NMTwbsLimpHome状态再次有主动请求或接收到CAN总线上存在节点SleepInd不为1时,则根据上述的情况1、2、3执行对应操作。3. 如何从LimpHome状态恢复简单来说,就是在LimpHome状态时,如果成功发送LimpHome报文且成功接收到网管报文后,网管状态则跳转至Reset状态。但是你看上面的LimpHome状态图,可以看到其实状态图里面描述的是很复杂的,其实它只不过是详细拆开了各种情况去讲解:
    CAN通讯系列补充篇:LimpHome状态12w3.jpg
    另外,下面再贴上一些OSEK网管的状态图:①:OSEK网管的完整简化状态图
    CAN通讯系列补充篇:LimpHome状态12w4.jpg
    ② 从唤醒状态,到休眠状态,再到唤醒状态的过程状态图
    CAN通讯系列补充篇:LimpHome状态12w5.jpg

    4 小结到此就介绍完了LimpHome状态,本文纯技术层面探讨了这个话题,可能还是需要静心去消化下。总体来说,通过这三篇文章对OSEK NM做了一个全面的介绍,这将为了解AutoSAR NM打下很好的基础,因为AutoSAR NM 其实是基于OSEK NM发展而来的。后续就开始转向AutoSAR NM介绍,当然之前已经发了几篇文章做了铺垫:
      AUTOSAR CAN网络管理CAN通讯系列补充篇- NM状态机跳转详解8

    快速发帖

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

    本版积分规则

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

    GMT+8, 1-2-2025 14:41 , Processed in 0.321336 second(s), 32 queries .

    Powered by Discuz! X3.5

    © 2001-2013 Comsenz Inc.