中国汽车工程师之家--聚集了汽车行业80%专业人士 

论坛口号:知无不言,言无不尽!QQ:542334618 

本站手机访问:直接在浏览器中输入本站域名即可 

  • 644查看
  • 0回复

[设计匹配] CAN通讯系列补充篇- NM状态机跳转详解8

[复制链接]

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

    [LV.1]初来乍到

    发表于 3-12-2023 07:41:00 | 显示全部楼层 |阅读模式

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


    本文经CSDN博主- 嵌软小白呗允许转发,感谢支持!作者对CAN NM状态做了详细的介绍,非常有助于大家更深入了解AutoSAR NM机制。本文将在原文基础上稍作修改,也欢迎关注作者其他文章。原文链接:Autosar CAN开发06(Autosar的CanNM----CanNM状态机)-CSDN博客通过 CAN通讯系列补充篇- 为什么要网管报文7 了解了CAN NM在车上的作用后,来看CAN NM状态机是如何实现的。1 CAN NM状态机先看CAN NM的状态机及各状态下报文发送的情况,一个ECU在CAN NM处于不同状态时,对应用报文和网管报文有着不同的发送要求。
    CAN通讯系列补充篇- NM状态机跳转详解8w1.jpg
    比如:在Bus-Sleep-Mode状态,应用报文和网管报文都不往CAN总线上发送;而在Read Sleep State状态,应用报文要往CAN总线上发送,网管报文不往CAN总线上发;具体各个状态是怎样参考下表:
    CAN通讯系列补充篇- NM状态机跳转详解8w2.jpg
    2 CAN NM各个状态的跳转条件2.1 休眠与唤醒为了理解CAN NM状态机的跳转,需要再了解下ECU的休眠唤醒机制。在整车上,某个ECU的休眠唤醒定义如下(比如ECU1):
      休眠:ECU1不向CAN总线外发出报文。唤醒:ECU1向CAN总线外发出报文。
    在开发过程中,经常遇到有同事认为休眠是指ECU没电,而唤醒是指ECU有电。虽然这样理解很多情况下没问题,但实际上对整车来说,一个ECU醒没醒,是通过CAN报文来看的,你向外发出CAN报文,就认为你醒着,你停发CAN报文,就认为你休眠。比如:CAN NM状态处于Prepare Bus-Sleep Mode 时,是不发网管报文和应用报文的,有些企业的需求认为此时ECU已处于休眠状态,当有别的唤醒源唤醒ECU时,需要ECU认为此时更换了唤醒源,但ECU此时并未下电。正常情况下,为了减小功耗,只要ECU没有外发报文的需求,就要立即下电,ECU有外发报文的需求,就要立即上电。好了,那么什么时候ECU要醒来,什么时候ECU要休眠呢?其实情况不多,就两种:被动唤醒和主动唤醒。而当被动唤醒和主动唤醒都释放的时候,就需要休眠。被动唤醒和主动唤醒解释如下:
      被动唤醒(自己没有主动工作需求,是由于别的节点有主动工作需求,自己才被迫唤醒):ECU节点接收到其他节点的网管报文。主动唤醒(自己有主动工作需求,会通过网管报文唤醒别的节点):ECU节点有主动工作需求,如OBC检测到充电的插枪动作。   
    2.2 CAN NM状态机解释有了上文的基础,接下来CAN NM的状态机就好理解了:当进入Repeat Message State、Normal Opearation State、Ready Sleep State时,那么CAN NM处于Network Mode。2.2.1 Bus-Sleep ModeBus-Sleep Mode就是CAN NM状态机处于睡眠状态,一般有两种情况:
      ECU被唤醒刚上电初始化,程序还没跑到处理网管状态跳转的时候(无论是主动唤醒还是被动唤醒)。ECU准备进入休眠时,即程序跑到即将下电前。

    CAN通讯系列补充篇- NM状态机跳转详解8w3.jpg

    2.2.2 Repeat Message State

    从上面的状态机可以看出,ECU被唤醒后,必须先经过Repeat Message State。

    CAN通讯系列补充篇- NM状态机跳转详解8w4.jpg

    Repeat Message是指重复发送网管报文,为什么在这个状态下要重复发网管报文呢?正如前面所说,ECU有主动唤醒和被动唤醒。如ECU1:
      当ECU1有主动唤醒需求时,ECU1是第一个醒来的,它需要整车其他节点快速起来配合工作。因此,ECU1需要重复快发网管报文,使得其他ECU节点快速唤醒。当ECU1有被动唤醒需求时,ECU1被总线其他节点的网管报文唤醒后,ECU1在该状态下需要发送几帧网管报文,作用就类似于告诉别人:我起来啦!
    可以看出主动唤醒和被动唤醒时,Repeat Message State发出的网管报文的作用是不一样的。因此在该状态下,主动唤醒和被动唤醒发出的网管报文周期也不一样。一般来说,主动唤醒需要向外快发网管报文,如20ms一帧,连续快发5帧(如20ms一帧)。被动唤醒则按正常周期发送网管报文(如500ms一帧。这里的正常是指发出的网管报文周期与CAN NM处于Normal状态时发出的NM周期一致)。Repeat Message State状态的停留时间较短,如某车企需求为1.5s,1.5s过后就要跳到Normal Opearation State或Ready Sleep State。
    CAN通讯系列补充篇- NM状态机跳转详解8w5.jpg
    注意:“主动请求”,当ECU处于休眠状态可被主动请求唤醒,当ECU已经处于唤醒的状态时,也是时刻在检测主动请求的。
    2.2.3 Normal Opearation State

    对于进入Normal Opearation State,分两种情况:

    a. 从Repeat Message State跳转至Normal Opearation State条件
      当ECU主动唤醒且当Repeat Message State的时间参数满足后,主动请求还未释放时,状态跳转至Normal Opearation State;或当ECU被动唤醒且在Repeat Message State检测到主动请求,则当Repeat Message State的时间参数满足后,状态跳转至Normal Opearation State
    b. 从Ready Sleep State跳转至Normal Opearation State条件
      处于Ready Sleep State时检测到主动请求,状态跳转至Normal Opearation State。

    CAN通讯系列补充篇- NM状态机跳转详解8w6.jpg
    所谓Normal Opearation State,即正常工作模式,从上面所说的跳转条件可以看出,即只有存在主动请求时,才会跳转到Normal状态。而处于该状态时会持续发出网管报文,至于原因也很好理解,如上篇文章所说的同起同睡机制:当ECU有主动请求一直唤醒时,必须要使其他的ECU节点也保持唤醒,因此有主动请求的ECU必须持续发出网管报文,使得其他节点一直被唤醒而不睡。
    对于退出Normal Opearation State,也分两种情况:

    a. 从Normal Opearation State跳转至Repeat Message State条件
      根据Autosar的CAN网络管理标准,当CAN NM处于Normal Opearation State或Ready Sleep State时接收到总线上网管报文的Byte1的Bit0置1时,需要把状态跳转至Repeat Message State。这个功能的作用实际上是用来检测总线上还有哪些ECU节点在线,因为如前面所说,处于Repeat Message State时需要发出网管报文。
    b. 从Normal Opearation State跳转至Ready Sleep State条件
      释放主动请求。

    CAN通讯系列补充篇- NM状态机跳转详解8w7.jpg

    2.2.4 Ready Sleep State

    当处于Ready Sleep State时,即准备休眠状态,从字面意思也能理解,本ECU此时肯定没有主动唤醒请求,因此不向外发出网管报文。但若此时别的ECU有主动唤醒请求(总线持续存在其他ECU的网管报文),由于同起同睡机制,我们此时不能进入休眠状态,必须保持唤醒,并向外发出应用报文,持续停留在Ready Sleep State状态。在该状态,有个时间参数为NM-Timeout Timer(如NM-Timeout Timer = 2000ms),当接收到网管报文时,程序会将该计数器清0,若但该时间参数到达时仍未接收到网管报文,则认为总线上所有ECU都已经没有主动请求,所有ECU需要进入休眠状态。(另外需要注意的是,该时间参数只要CANNM进入Network Mode就会开始计时,接收或发送一帧网管报文时该时间参数就会清0)对于进入Ready Sleep State,分两种情况:

    a. 从Repeat Message State跳转至Ready Sleep State条件
      当ECU是被动唤醒且Repeat Message State的时间参数已到达后,CANNM状态从Repeat Message State跳转至Ready Sleep State。
    b. 从Normal Opearation State跳转至Ready Sleep State条件
      本ECU释放主动请求。

    CAN通讯系列补充篇- NM状态机跳转详解8w8.jpg
    对于退出Ready Sleep State,分三种情况:a. 从Ready Sleep State跳转至Repeat Message State条件
      根据Autosar的CAN网络管理标准,当CAN NM处于Normal Opearation State或Ready Sleep State时接收到总线上网管报文的Byte1的Bit0置1时,需要把状态跳转至Repeat Message State。这个功能的作用实际上是用来检测总线上还有哪些ECU节点在线,因为如前面所说,处于Repeat Message State时需要发出网管报文。
    b. 从Ready Sleep State跳转至Normal Operation State条件
      检测到主动请求。
    c. 从Ready Sleep State跳转至Prepare Bus-Sleep Mode条件
      未接收到网管报文时间超过NM-Timeout Timer时间。此时认为总线上所有ECU都已经没有主动请求,所有ECU需要进入休眠状态


    CAN通讯系列补充篇- NM状态机跳转详解8w9.jpg

    2.2.5 Prepare Bus-Sleep Mode

    即预休眠状态,在该状态下ECU停发应用报文和网管报文。此时的时间参数为Wait BusSleep Timer(如Wait BusSleep Timer = 5000ms),当该时间参数到达后,则CAN NM进入休眠状态。进入Normal Opearation State条件:
      未接收到网管报文时间超过NM-Timeout Timer时间。此时认为总线上所有ECU都已经没有主动请求,所有ECU需要进入休眠状态

    CAN通讯系列补充篇- NM状态机跳转详解8w10.jpg
    退出Normal Opearation State条件,分两种情况

    a. 从Prepare Bus-Sleep Mode跳转至Repeat Message State条件:
      检测到唤醒源,主动唤醒或被动唤醒
    b. 从Prepare Bus-Sleep Mode跳转至Bus-Sleep Mode条件:
      Wait BusSleep Timer已到达(在该过程中未检测到唤醒源)。

    CAN通讯系列补充篇- NM状态机跳转详解8w11.jpg

    2.2.6 相关时间参数
    上述提到的各个状态的时间参数,示例如下(以某大型车企为例,不同的车企,CAN NM的时间参数需求一般都不一致)
    CAN通讯系列补充篇- NM状态机跳转详解8w12.jpg
    3 小结上述详细了CAN NM状态机的跳转条件,也多次提到网管报文,下篇文章我们来详细了解网管报文8个字节的用途。

    快速发帖

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

    本版积分规则

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

    GMT+8, 20-11-2024 19:37 , Processed in 0.249302 second(s), 30 queries .

    Powered by Discuz! X3.5

    © 2001-2013 Comsenz Inc.