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

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

3天内不再提示

抠几个CanNM网络状态机的细节

冬至配饺子 来源:开心果 Need Car 作者:开心果 Need Car 2022-08-26 17:30 次阅读

先回答标题问题:“对我自己而言,没有”。有时我自己会有这样的感受,Autosar的某些规范即使看了很多遍,工程上也碰到了些问题,但是每次再去读,发现:依然有些东西是不清晰的。本文就CanNM的网络状态机,再和大家抠几个细节,希望对你有用!

1、CanNmPnHandleMultipleNetworkRequests 作用

如果项目中,网络管理不用PN(Partial Network)功能,可能不太会关注CanNmPnHandleMultipleNetworkRequests。先看一下Autosar规范给出的解释:Specifies if CanNm performs an additional transition from Network Mode to Repeat Message State (true) or not (false).

也就是说,该参数使能与否决定着节点网络状态是否可以切换到RMS(Repeat Message State)。从哪种状态切换到RMS状态呢?

pYYBAGMIkbWARvleAAFUb91givM875.png

由上图可以看出,使用CanNmPnHandleMultipleNetworkRequests参数时,均与CanNm_NetworkRequest()接口的调用相关,主要有两个地方会判断该参数的使能情况。

位置 1

如果节点的网络状态在RSS(Ready Sleep State),调用CanNm_NetworkRequest()接口请求网络时,能否进入NOS(Normal Operation State)取决于CanNmPnHandleMultipleNetworkRequests的使能情况:

CanNmPnHandleMultipleNetworkRequests = FALSE,节点网络状态由RSS切换到NOS;

CanNmPnHandleMultipleNetworkRequests = TRUE,节点网络状态由RSS切换到RMS。

为什么CanNmPnHandleMultipleNetworkRequests = TRUE,网络状态需要切换到RMS状态呢?先看Autosar规范给的解释:

poYBAGMIkcqAV8i4AADTjYNDxvc524.png

CanNmPnHandleMultipleNetworkRequests 的使能,我们需要先意识到一个前提:

PN的使能,即:CanNmPnEnabled == true。使用PN功能,意味着每个节点会关联对应的PNC,只有接收到的PNC和节点相关,节点网络才能唤醒。如下图,假设某CAN BUS上有ECU1、ECU2、ECU3三个节点,ECU1关联PNC 16和PNC17,ECU2关联PNC 16,ECU3关联PNC 17。

pYYBAGMIkdyAHrWoAABU0xyg8G4851.png

假设:

t0时刻,只有ECU1和ECU2在通信,即:NM Msg只包含PNC16,且ECU1进入RSS状态,ECU2在NOS状态,ECU3未有唤醒(处于BSM);

t1时刻,由于ECU1上层主动请求网络,ECU1需要唤醒ECU3参与通信,主动调用CanNm_NetworkRequest()接口请求网络(比如:对应的PNC17的VFC置位),同时发送的NM Msg中包含PNC 17。ECU3收到包含PNC17的NM Msg以后,网络状态由BSM进入RMS状态,为了保证三个节点在同一网络状态,因此,ECU1需要从RSS状态切换到RMS状态,同时,ECU1发送的NM Msg中,Repeat Message Request Bit = 1,将ECU2由NOS状态也拉回RMS状态,以此确保三个节点在相同的网络状态。不理解RMR Bit作用,可以参考前文勘误篇(一):Autosar网络管理:RepeatMessageRequestBit作用,你清楚吗?;

t2时刻,Repeat Message Timer超时,三者脱离RMS状态,ECU1、ECU2、ECU3进入NOS状态。上述过程如下所示:

poYBAGMIkfGAJugOAACGb5no9oc473.png

位置 2

此处说明,只要在NM(Network Mode)模式下调用

CanNm_NetworkRequest()接口,且CanNmPnHandleMultipleNetworkRequests ==TRUE,网络状态需要切换到RMS状态,且重启Repeat Message Timer。分析同上,此处不再赘述。举例说明PNC请求与Channel NM Status关系:

poYBAGMIkgaAVrYTAABzSQVQhIo759.png

t0时刻,PNC #n保持请求(PNC #n = 1),假设PNC #n映射的Channel网络状态为NOS;

t1时刻,PnResetTime(2.95s)内收到PNC #n = 0(或者没有收到),PNC #n释放;

t2时刻,PNC#n再次请求,PNC #n映射的Channel网络状态由NOS进入RMS;

t3时刻,PNC#n保持请求,Channel由RMS进入NOS状态;

t4时刻,2.95s时间内没有PNC#n请求,PNC#n释放,Channel保持NOS状态;

t5时刻,PNC#n再次请求,同t2时刻。

2、网络启动,第一帧是否应该是网络管理报文?

从网络状态机可以看出,CanNm_PassiveStartup()、CanNm_RxIndication()、CanNm_NetworkRequest()接口的调用均可将节点网络状态切换到RMS。

CanNm_NetworkRequest():调用此接口,说明节点需要主动唤醒网络,如果此节点由BSM、PBSM模式进入RMS状态,

第一帧报文需要是网络管理报文,快速将网段内其他节点唤醒;

CanNm_PassiveStartup()、CanNm_RxIndication():调用这两个接口,个人理解:

第一帧报文没有必要是网络管理报文,因为总线上已经有网络管理报文在发送,说明有主动网络节点发送了网络管理报文,承担着快速唤醒网络的“重任”,所以接收节点无需保证第一帧报文是网络管理报文,接收节点需要做的是把应用报文快速发出,保证功能的快速使能。

3、CanNmMsgCycleOffset的使用场景

网络唤醒时,各主动网络节点均发送各自的NM Msg,会增加总线负载,为了降低网络唤醒时的总线负载,会为每个主动网络节点设置一个Offset值,比如:CanNmMsgCycleOffset。CanNmMsgCycleOffset的使能需要注意:使能快发模式时,CanNmMsgCycleOffset不适用,需要注意的其他条件,Autosar也给出了其他解释,如下所示:

CASE 1:

pYYBAGMIkh2AYbFtAADYSWj5xLQ295.png

CASE 2:

poYBAGMIkjGAW3HoAADjR-vvyPw243.png

注意:

C

anNmMsgCycleOffset是发出第一帧网络管理报文时的偏移值,即满足NM Msg发送时,第一次发送NM Msg时的偏移。


审核编辑:刘清

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

    关注

    2

    文章

    137

    浏览量

    35746
  • 状态机
    +关注

    关注

    2

    文章

    492

    浏览量

    27472
  • Nos
    Nos
    +关注

    关注

    0

    文章

    3

    浏览量

    7307
收藏 人收藏

    评论

    相关推荐

    Verilog状态机+设计实例

    在verilog中状态机的一种很常用的逻辑结构,学习和理解状态机的运行规律能够帮助我们更好地书写代码,同时作为一种思想方法,在别的代码设计中也会有所帮助。 一、简介 在使用过程中我们常说
    的头像 发表于 02-12 19:07 3826次阅读
    Verilog<b class='flag-5'>状态机</b>+设计实例

    状态机是什么?什么是消息触发类型的状态机

    状态机可归纳为哪几个要素?状态机可分为哪几种?什么是消息触发类型的状态机
    发表于 04-19 06:02

    如何写好状态机

    如何写好状态机:状态机是逻辑设计的重要内容,状态机的设计水平直接反应工程师的逻辑功底,所以许多公司的硬件和逻辑工程师面试中,状态机设计几乎是必选题目。本章在引入
    发表于 06-14 19:24 97次下载

    状态机举例

    状态机举例 你可以指定状态寄存器和状态机状态。以下是一个有四种状态的普通状态机。 // Th
    发表于 03-28 15:18 972次阅读

    状态机代码生成工具

    状态机代码生成工具状态机代码生成工具状态机代码生成工具状态机代码生成工具
    发表于 11-19 15:12 9次下载

    状态机原理及用法

    状态机原理及用法状态机原理及用法状态机原理及用法
    发表于 03-15 15:25 0次下载

    简述使用QII状态机向导如何创建一个状态机

    如何使用QII状态机向导创建一个状态机
    的头像 发表于 06-20 00:11 4196次阅读
    简述使用QII<b class='flag-5'>状态机</b>向导如何创建一个<b class='flag-5'>状态机</b>

    状态机概述 如何理解状态机

    本篇文章包括状态机的基本概述以及通过简单的实例理解状态机
    的头像 发表于 01-02 18:03 1w次阅读
    <b class='flag-5'>状态机</b>概述  如何理解<b class='flag-5'>状态机</b>

    什么是状态机 状态机的描述三种方法

    状态机 1、状态机是许多数字系统的核心部件,是一类重要的时序逻辑电路。通常包括三个部分:一是下一个状态的逻辑电路,二是存储状态机当前状态的时
    的头像 发表于 11-16 17:39 2.7w次阅读

    FPGA:状态机简述

    本文目录 前言 状态机简介 状态机分类 Mealy 型状态机 Moore 型状态机 状态机描述 一段式
    的头像 发表于 11-05 17:58 7298次阅读
    FPGA:<b class='flag-5'>状态机</b>简述

    什么是状态机状态机5要素

    玩单片还可以,各个外设也都会驱动,但是如果让你完整的写一套代码时,却无逻辑与框架可言。这说明编程还处于比较低的水平,你需要学会一种好的编程框架或者一种编程思想!比如模块化编程、状态机编程、分层思想
    的头像 发表于 07-27 11:23 2w次阅读
    什么是<b class='flag-5'>状态机</b>?<b class='flag-5'>状态机</b>5要素

    状态模式(状态机)

    以前写状态机,比较常用的方式是用 if-else 或 switch-case,高级的一点是函数指针列表。最近,看了一文章《c语言设计模式–状态模式(状态机)》(来源:embed linux
    发表于 12-16 16:53 9次下载
    <b class='flag-5'>状态</b>模式(<b class='flag-5'>状态机</b>)

    从零开始的状态机漫谈(1)——万物之始的语言

    也许从12年前我第一次开始分享状态机编写心得开始,“状态机”就像标签一样紧紧的贴在了“傻孩子”这个网络昵称的额头上——真是都扣不下来...
    发表于 01-26 19:36 2次下载
    从零开始的<b class='flag-5'>状态机</b>漫谈(1)——万物之始的语言

    labview状态机分享

    labview状态机
    发表于 10-31 15:50 13次下载

    什么是状态机状态机的种类与实现

    状态机,又称有限状态机(Finite State Machine,FSM)或米利状态机(Mealy Machine),是一种描述系统状态变化的模型。在芯片设计中,
    的头像 发表于 10-19 10:27 8989次阅读