0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

摳幾個CanNM網(wǎng)絡(luò)狀態(tài)機(jī)的細(xì)節(jié)

冬至配餃子 ? 來源:開心果 Need Car ? 作者:開心果 Need Car ? 2022-08-26 17:30 ? 次閱讀

先回答標(biāo)題問題:“對我自己而言,沒有”。有時我自己會有這樣的感受,Autosar的某些規(guī)范即使看了很多遍,工程上也碰到了些問題,但是每次再去讀,發(fā)現(xiàn):依然有些東西是不清晰的。本文就CanNM的網(wǎng)絡(luò)狀態(tài)機(jī),再和大家摳幾個細(xì)節(jié),希望對你有用!

1、CanNmPnHandleMultipleNetworkRequests 作用

如果項目中,網(wǎng)絡(luò)管理不用PN(Partial Network)功能,可能不太會關(guān)注CanNmPnHandleMultipleNetworkRequests。先看一下Autosar規(guī)范給出的解釋:Specifies if CanNm performs an additional transition from Network Mode to Repeat Message State (true) or not (false).

也就是說,該參數(shù)使能與否決定著節(jié)點網(wǎng)絡(luò)狀態(tài)是否可以切換到RMS(Repeat Message State)。從哪種狀態(tài)切換到RMS狀態(tài)呢?

pYYBAGMIkbWARvleAAFUb91givM875.png

由上圖可以看出,使用CanNmPnHandleMultipleNetworkRequests參數(shù)時,均與CanNm_NetworkRequest()接口的調(diào)用相關(guān),主要有兩個地方會判斷該參數(shù)的使能情況。

位置 1

如果節(jié)點的網(wǎng)絡(luò)狀態(tài)在RSS(Ready Sleep State),調(diào)用CanNm_NetworkRequest()接口請求網(wǎng)絡(luò)時,能否進(jìn)入NOS(Normal Operation State)取決于CanNmPnHandleMultipleNetworkRequests的使能情況:

CanNmPnHandleMultipleNetworkRequests = FALSE,節(jié)點網(wǎng)絡(luò)狀態(tài)由RSS切換到NOS;

CanNmPnHandleMultipleNetworkRequests = TRUE,節(jié)點網(wǎng)絡(luò)狀態(tài)由RSS切換到RMS。

為什么CanNmPnHandleMultipleNetworkRequests = TRUE,網(wǎng)絡(luò)狀態(tài)需要切換到RMS狀態(tài)呢?先看Autosar規(guī)范給的解釋:

poYBAGMIkcqAV8i4AADTjYNDxvc524.png

CanNmPnHandleMultipleNetworkRequests 的使能,我們需要先意識到一個前提:

PN的使能,即:CanNmPnEnabled == true。使用PN功能,意味著每個節(jié)點會關(guān)聯(lián)對應(yīng)的PNC,只有接收到的PNC和節(jié)點相關(guān),節(jié)點網(wǎng)絡(luò)才能喚醒。如下圖,假設(shè)某CAN BUS上有ECU1、ECU2、ECU3三個節(jié)點,ECU1關(guān)聯(lián)PNC 16和PNC17,ECU2關(guān)聯(lián)PNC 16,ECU3關(guān)聯(lián)PNC 17。

pYYBAGMIkdyAHrWoAABU0xyg8G4851.png

假設(shè):

t0時刻,只有ECU1和ECU2在通信,即:NM Msg只包含PNC16,且ECU1進(jìn)入RSS狀態(tài),ECU2在NOS狀態(tài),ECU3未有喚醒(處于BSM);

t1時刻,由于ECU1上層主動請求網(wǎng)絡(luò),ECU1需要喚醒ECU3參與通信,主動調(diào)用CanNm_NetworkRequest()接口請求網(wǎng)絡(luò)(比如:對應(yīng)的PNC17的VFC置位),同時發(fā)送的NM Msg中包含PNC 17。ECU3收到包含PNC17的NM Msg以后,網(wǎng)絡(luò)狀態(tài)由BSM進(jìn)入RMS狀態(tài),為了保證三個節(jié)點在同一網(wǎng)絡(luò)狀態(tài),因此,ECU1需要從RSS狀態(tài)切換到RMS狀態(tài),同時,ECU1發(fā)送的NM Msg中,Repeat Message Request Bit = 1,將ECU2由NOS狀態(tài)也拉回RMS狀態(tài),以此確保三個節(jié)點在相同的網(wǎng)絡(luò)狀態(tài)。不理解RMR Bit作用,可以參考前文勘誤篇(一):Autosar網(wǎng)絡(luò)管理:RepeatMessageRequestBit作用,你清楚嗎?;

t2時刻,Repeat Message Timer超時,三者脫離RMS狀態(tài),ECU1、ECU2、ECU3進(jìn)入NOS狀態(tài)。上述過程如下所示:

poYBAGMIkfGAJugOAACGb5no9oc473.png

位置 2

此處說明,只要在NM(Network Mode)模式下調(diào)用

CanNm_NetworkRequest()接口,且CanNmPnHandleMultipleNetworkRequests ==TRUE,網(wǎng)絡(luò)狀態(tài)需要切換到RMS狀態(tài),且重啟Repeat Message Timer。分析同上,此處不再贅述。舉例說明PNC請求與Channel NM Status關(guān)系:

poYBAGMIkgaAVrYTAABzSQVQhIo759.png

t0時刻,PNC #n保持請求(PNC #n = 1),假設(shè)PNC #n映射的Channel網(wǎng)絡(luò)狀態(tài)為NOS;

t1時刻,PnResetTime(2.95s)內(nèi)收到PNC #n = 0(或者沒有收到),PNC #n釋放;

t2時刻,PNC#n再次請求,PNC #n映射的Channel網(wǎng)絡(luò)狀態(tài)由NOS進(jìn)入RMS;

t3時刻,PNC#n保持請求,Channel由RMS進(jìn)入NOS狀態(tài);

t4時刻,2.95s時間內(nèi)沒有PNC#n請求,PNC#n釋放,Channel保持NOS狀態(tài);

t5時刻,PNC#n再次請求,同t2時刻。

2、網(wǎng)絡(luò)啟動,第一幀是否應(yīng)該是網(wǎng)絡(luò)管理報文?

從網(wǎng)絡(luò)狀態(tài)機(jī)可以看出,CanNm_PassiveStartup()、CanNm_RxIndication()、CanNm_NetworkRequest()接口的調(diào)用均可將節(jié)點網(wǎng)絡(luò)狀態(tài)切換到RMS。

CanNm_NetworkRequest():調(diào)用此接口,說明節(jié)點需要主動喚醒網(wǎng)絡(luò),如果此節(jié)點由BSM、PBSM模式進(jìn)入RMS狀態(tài),

第一幀報文需要是網(wǎng)絡(luò)管理報文,快速將網(wǎng)段內(nèi)其他節(jié)點喚醒;

CanNm_PassiveStartup()、CanNm_RxIndication():調(diào)用這兩個接口,個人理解:

第一幀報文沒有必要是網(wǎng)絡(luò)管理報文,因為總線上已經(jīng)有網(wǎng)絡(luò)管理報文在發(fā)送,說明有主動網(wǎng)絡(luò)節(jié)點發(fā)送了網(wǎng)絡(luò)管理報文,承擔(dān)著快速喚醒網(wǎng)絡(luò)的“重任”,所以接收節(jié)點無需保證第一幀報文是網(wǎng)絡(luò)管理報文,接收節(jié)點需要做的是把應(yīng)用報文快速發(fā)出,保證功能的快速使能。

3、CanNmMsgCycleOffset的使用場景

網(wǎng)絡(luò)喚醒時,各主動網(wǎng)絡(luò)節(jié)點均發(fā)送各自的NM Msg,會增加總線負(fù)載,為了降低網(wǎng)絡(luò)喚醒時的總線負(fù)載,會為每個主動網(wǎng)絡(luò)節(jié)點設(shè)置一個Offset值,比如:CanNmMsgCycleOffset。CanNmMsgCycleOffset的使能需要注意:使能快發(fā)模式時,CanNmMsgCycleOffset不適用,需要注意的其他條件,Autosar也給出了其他解釋,如下所示:

CASE 1:

pYYBAGMIkh2AYbFtAADYSWj5xLQ295.png

CASE 2:

poYBAGMIkjGAW3HoAADjR-vvyPw243.png

注意:

C

anNmMsgCycleOffset是發(fā)出第一幀網(wǎng)絡(luò)管理報文時的偏移值,即滿足NM Msg發(fā)送時,第一次發(fā)送NM Msg時的偏移。


審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • RMS
    RMS
    +關(guān)注

    關(guān)注

    2

    文章

    139

    瀏覽量

    35853
  • 狀態(tài)機(jī)
    +關(guān)注

    關(guān)注

    2

    文章

    492

    瀏覽量

    27607
  • Nos
    Nos
    +關(guān)注

    關(guān)注

    0

    文章

    3

    瀏覽量

    7331
收藏 人收藏

    評論

    相關(guān)推薦

    Verilog狀態(tài)機(jī)+設(shè)計實例

    在verilog中狀態(tài)機(jī)的一種很常用的邏輯結(jié)構(gòu),學(xué)習(xí)和理解狀態(tài)機(jī)的運(yùn)行規(guī)律能夠幫助我們更好地書寫代碼,同時作為一種思想方法,在別的代碼設(shè)計中也會有所幫助。 一、簡介 在使用過程中我們常說
    的頭像 發(fā)表于 02-12 19:07 ?4280次閱讀
    Verilog<b class='flag-5'>狀態(tài)機(jī)</b>+設(shè)計實例

    狀態(tài)機(jī)是什么?什么是消息觸發(fā)類型的狀態(tài)機(jī)?

    狀態(tài)機(jī)可歸納為哪幾個要素?狀態(tài)機(jī)可分為哪幾種?什么是消息觸發(fā)類型的狀態(tài)機(jī)?
    發(fā)表于 04-19 06:02

    如何寫好狀態(tài)機(jī)

    如何寫好狀態(tài)機(jī):狀態(tài)機(jī)是邏輯設(shè)計的重要內(nèi)容,狀態(tài)機(jī)的設(shè)計水平直接反應(yīng)工程師的邏輯功底,所以許多公司的硬件和邏輯工程師面試中,狀態(tài)機(jī)設(shè)計幾乎是必選題目。本章在引入
    發(fā)表于 06-14 19:24 ?97次下載

    狀態(tài)機(jī)舉例

    狀態(tài)機(jī)舉例 你可以指定狀態(tài)寄存器和狀態(tài)機(jī)狀態(tài)。以下是一個有四種狀態(tài)的普通狀態(tài)機(jī)。 // Th
    發(fā)表于 03-28 15:18 ?994次閱讀

    狀態(tài)機(jī)代碼生成工具

    狀態(tài)機(jī)代碼生成工具狀態(tài)機(jī)代碼生成工具狀態(tài)機(jī)代碼生成工具狀態(tài)機(jī)代碼生成工具
    發(fā)表于 11-19 15:12 ?9次下載

    狀態(tài)機(jī)原理及用法

    狀態(tài)機(jī)原理及用法狀態(tài)機(jī)原理及用法狀態(tài)機(jī)原理及用法
    發(fā)表于 03-15 15:25 ?0次下載

    簡述使用QII狀態(tài)機(jī)向?qū)绾蝿?chuàng)建一個狀態(tài)機(jī)

    如何使用QII狀態(tài)機(jī)向?qū)?chuàng)建一個狀態(tài)機(jī)
    的頭像 發(fā)表于 06-20 00:11 ?4259次閱讀
    簡述使用QII<b class='flag-5'>狀態(tài)機(jī)</b>向?qū)绾蝿?chuàng)建一個<b class='flag-5'>狀態(tài)機(jī)</b>

    狀態(tài)機(jī)概述 如何理解狀態(tài)機(jī)

    本篇文章包括狀態(tài)機(jī)的基本概述以及通過簡單的實例理解狀態(tài)機(jī)
    的頭像 發(fā)表于 01-02 18:03 ?1.1w次閱讀
    <b class='flag-5'>狀態(tài)機(jī)</b>概述  如何理解<b class='flag-5'>狀態(tài)機(jī)</b>

    什么是狀態(tài)機(jī) 狀態(tài)機(jī)的描述三種方法

    狀態(tài)機(jī) 1、狀態(tài)機(jī)是許多數(shù)字系統(tǒng)的核心部件,是一類重要的時序邏輯電路。通常包括三個部分:一是下一個狀態(tài)的邏輯電路,二是存儲狀態(tài)機(jī)當(dāng)前狀態(tài)的時
    的頭像 發(fā)表于 11-16 17:39 ?2.7w次閱讀

    FPGA:狀態(tài)機(jī)簡述

    本文目錄 前言 狀態(tài)機(jī)簡介 狀態(tài)機(jī)分類 Mealy 型狀態(tài)機(jī) Moore 型狀態(tài)機(jī) 狀態(tài)機(jī)描述 一段式
    的頭像 發(fā)表于 11-05 17:58 ?7495次閱讀
    FPGA:<b class='flag-5'>狀態(tài)機(jī)</b>簡述

    什么是狀態(tài)機(jī)?狀態(tài)機(jī)5要素

    玩單片機(jī)還可以,各個外設(shè)也都會驅(qū)動,但是如果讓你完整的寫一套代碼時,卻無邏輯與框架可言。這說明編程還處于比較低的水平,你需要學(xué)會一種好的編程框架或者一種編程思想!比如模塊化編程、狀態(tài)機(jī)編程、分層思想
    的頭像 發(fā)表于 07-27 11:23 ?2.1w次閱讀
    什么是<b class='flag-5'>狀態(tài)機(jī)</b>?<b class='flag-5'>狀態(tài)機(jī)</b>5要素

    狀態(tài)模式(狀態(tài)機(jī))

    以前寫狀態(tài)機(jī),比較常用的方式是用 if-else 或 switch-case,高級的一點是函數(shù)指針列表。最近,看了一文章《c語言設(shè)計模式–狀態(tài)模式(狀態(tài)機(jī))》(來源:embed linux
    發(fā)表于 12-16 16:53 ?9次下載
    <b class='flag-5'>狀態(tài)</b>模式(<b class='flag-5'>狀態(tài)機(jī)</b>)

    從零開始的狀態(tài)機(jī)漫談(1)——萬物之始的語言

    也許從12年前我第一次開始分享狀態(tài)機(jī)編寫心得開始,“狀態(tài)機(jī)”就像標(biāo)簽一樣緊緊的貼在了“傻孩子”這個網(wǎng)絡(luò)昵稱的額頭上——真是都扣不下來...
    發(fā)表于 01-26 19:36 ?2次下載
    從零開始的<b class='flag-5'>狀態(tài)機(jī)</b>漫談(1)——萬物之始的語言

    labview狀態(tài)機(jī)分享

    labview狀態(tài)機(jī)
    發(fā)表于 10-31 15:50 ?15次下載

    什么是狀態(tài)機(jī)?狀態(tài)機(jī)的種類與實現(xiàn)

    狀態(tài)機(jī),又稱有限狀態(tài)機(jī)(Finite State Machine,F(xiàn)SM)或米利狀態(tài)機(jī)(Mealy Machine),是一種描述系統(tǒng)狀態(tài)變化的模型。在芯片設(shè)計中,
    的頭像 發(fā)表于 10-19 10:27 ?9887次閱讀