絡(luò)管理(CANNM))
目錄網(wǎng)絡(luò)管理概述狀態(tài)機(jī)Bus Sleep ModePrepare Bus Sleep ModeNetwork ModeRepeat Message StateNormal Operation StateReady Sleep StateNetwork State定時參數(shù)NM PDU網(wǎng)絡(luò)管理報文數(shù)據(jù)格式源節(jié)點地址控制比特向量用戶數(shù)據(jù)狀態(tài)機(jī)梳理網(wǎng)絡(luò)管理概述網(wǎng)絡(luò)管理的重要任務(wù)是保證網(wǎng)絡(luò)通信的安全可靠。網(wǎng)絡(luò)管理可以實現(xiàn)初始化控制器資源啟動網(wǎng)絡(luò)檢測、處理以及通知網(wǎng)絡(luò)和節(jié)點的狀態(tài)協(xié)調(diào)網(wǎng)絡(luò)節(jié)點同步進(jìn)入睡眠等功能。根據(jù)電源模式/KL15 轉(zhuǎn)為 OFF 后 ECU 的通信狀態(tài)本文檔將 CAN(FD)網(wǎng)絡(luò)中的ECU分為兩類INM 類和DNM 類。INM類ECUECU只在電源模式/KL15由OFF切換到ON狀態(tài)時開始通信由非OFF狀態(tài)切換到OFF狀態(tài)之后立刻停止或者延時通信一段時間的節(jié)點DNM類ECUECU 在電源模式/KL15 為 OFF 時可進(jìn)行 CAN 通信并遵循AUTOSAR直接網(wǎng)絡(luò)管理進(jìn)行同步休眠和喚醒的節(jié)點。狀態(tài)機(jī)圖1 CanNm模式切換【Note:】上電之后在CanNm_PassiveStartup()或CanNm_NetworkRequest()函數(shù)接口被調(diào)用之前ECU需要維持在總線睡眠模式(Bus-Sleep Mode).Bus Sleep Mode如果ECU處在總線睡眠模式下CAN(FD)物理層檢測到喚醒信號如報文或總線電平變化ECU應(yīng)打開相應(yīng)CAN(FD)通道的報文接收能力并啟動T_WakeUpTimeout。若ECU在T_WakeUpTimeout時間內(nèi)成功接收到一幀網(wǎng)絡(luò)管理PDU則進(jìn)入正常喚醒流程(調(diào)用CanNm_RxIndication)若ECU在T_WakeUpTimeout時間內(nèi)一直未接收到網(wǎng)絡(luò)管理PDU則在超時后ECU應(yīng)關(guān)閉該通道的報文接收能力。在正常喚醒流程開啟前ECU不應(yīng)發(fā)出任何報文。如果CanNm模塊處于總線睡眠模式且CanNm_NetworkRequest()函數(shù)接口被調(diào)用CanNm模塊應(yīng)進(jìn)入網(wǎng)絡(luò)模式并啟用快發(fā)機(jī)制默認(rèn)情況下CanNm模塊應(yīng)進(jìn)入重復(fù)報文狀態(tài)。如果CanNm 模塊處于總線睡眠模式且CanNm_PassiveStartup ()函數(shù)接口被調(diào)用CanNm模塊應(yīng)進(jìn)入網(wǎng)絡(luò)模式默認(rèn)情況下CanNm模塊應(yīng)進(jìn)入重復(fù)報文狀態(tài)。當(dāng) CanNm 模塊在總線睡眠模式成功接收到一幀網(wǎng)絡(luò)管理 PDU調(diào)用CanNm_RxIndication CanNm 模塊應(yīng)通知上層。理由為了避免網(wǎng)絡(luò)與模式管理之間競爭條件和狀態(tài)的不一致CanNm不會自動執(zhí)行從總線睡眠模式到網(wǎng)絡(luò)模式的轉(zhuǎn)換。CanNm 只會通知需要做出喚醒決策的上層應(yīng)用。總線睡眠模式下對網(wǎng)絡(luò)管理PDU的接收處理必須根據(jù)ECU關(guān)閉/啟動過程的當(dāng)前狀態(tài)進(jìn)行。Prepare Bus Sleep Mode準(zhǔn)備總線睡眠模式(Prepare Bus-Sleep Mode)的作用是保證在進(jìn)入總線睡眠前節(jié)點有足夠的時間停止其網(wǎng)絡(luò)活動。在準(zhǔn)備總線睡眠模式Prepare Bus-Sleep Mode下總線活動減少如存在于發(fā)送緩存中的報文被發(fā)送以清空發(fā)送緩存最終總線將不再有活動即沒有任何報文被發(fā)送.CanNm 模塊應(yīng)處于等待睡眠模式一段時間這段時間由可配置參數(shù)CanNmWaitBusSleepTime 決定該時間超時后CanNm模塊應(yīng)離開等待睡眠模式并進(jìn)入總線睡眠模式。當(dāng)處于準(zhǔn)備總線睡眠模式(Prepare Bus-Sleep Mode)的節(jié)點接收到網(wǎng)絡(luò)管理報文時CanNm_RxIndication 函數(shù)接口被調(diào)用將向網(wǎng)絡(luò)模式(Network Mode)轉(zhuǎn)換默認(rèn)情況下節(jié)點進(jìn)入網(wǎng)絡(luò)模式(Network Mode)中的重復(fù)報文狀態(tài)Repeat Message State當(dāng)節(jié)點處于準(zhǔn)備總線睡眠模式并且 CanNm_PassiveStartup()被調(diào)用時CanNm模塊應(yīng)進(jìn)入網(wǎng)絡(luò)模式默認(rèn)情況下CanNm模塊應(yīng)進(jìn)入重復(fù)報文狀態(tài)。當(dāng) CanNm 處于準(zhǔn)備總線睡眠模式(Prepare Bus-Sleep Mode)且函數(shù)接口CanNm_NetworkRequest()被調(diào)用CanNm 將向網(wǎng)絡(luò)模式(Network Mode)轉(zhuǎn)換并啟用快發(fā)機(jī)制默認(rèn)情況下CanNm應(yīng)進(jìn)入網(wǎng)絡(luò)模式(Network Mode)的重復(fù)報文狀態(tài)(Repeat Message State)。原因這種情況下網(wǎng)絡(luò)中的其他節(jié)點仍處在準(zhǔn)備總線睡眠模式為避免它們進(jìn)入總線睡眠模式并且通信應(yīng)盡可能快地被恢復(fù)。Network Mode網(wǎng)絡(luò)模式(Network Mode)由三種內(nèi)部狀態(tài)組成Repeat Message State/重復(fù)報文狀態(tài)Normal Operation State/常規(guī)運(yùn)行狀態(tài)Ready Sleep State/準(zhǔn)備睡眠狀態(tài)當(dāng)節(jié)點從總線睡眠模式(Bus-Sleep Mode)或準(zhǔn)備總線睡眠模式(Prepare Bus-Sleep Mode)進(jìn)入網(wǎng)絡(luò)模式(Network Mode)時在默認(rèn)情況下需進(jìn)入重復(fù)報文狀態(tài)(RepeatMessage State)。節(jié)點進(jìn)入網(wǎng)絡(luò)模式(Network Mode)后需開啟CanNmTimeoutTime定時器。節(jié)點處于網(wǎng)絡(luò)模式(Network Mode)成功接收或成功發(fā)送一幀網(wǎng)絡(luò)管理報文后需重啟NM-Timeout定時器如果NM模塊從總線睡眠模式進(jìn)入網(wǎng)絡(luò)模式需進(jìn)入重復(fù)報文狀態(tài)(Repeat Message State)。這一過程需在規(guī)定的喚醒時間t內(nèi)完成要求t≤T_WakeUp。圖2 喚醒時間tRepeat Message State無論其睡眠條件是否滿足重復(fù)報文狀態(tài)(Repeat Message State)都可以使節(jié)點保持一段時間的活躍狀態(tài)。該狀態(tài)可以被用來監(jiān)測在線節(jié)點。當(dāng)節(jié)點進(jìn)入重復(fù)報文狀態(tài)(Repeat Message State)后需要開始或重新開始發(fā)送網(wǎng)絡(luò)管理報文。節(jié)點處于重復(fù)報文狀態(tài)(Repeat Message State)NM-Timeout定時器超時溢出時需要重啟NM-Timeout定時器。節(jié)點在進(jìn)入重復(fù)報文狀態(tài)(Repeat Message State)后需要保持一段時間這段時間由參數(shù) CanNmRepeatMessageTime 決定CanNmRepeatMessageTime 超時后CanNm模塊將離開重復(fù)報文狀態(tài)。節(jié)點離開重復(fù)報文狀態(tài)(Repeat Message State)后若節(jié)點對網(wǎng)絡(luò)通信有需求應(yīng)進(jìn)入常規(guī)運(yùn)行狀態(tài)(Normal Operation State)。節(jié)點離開重復(fù)報文狀態(tài)(Repeat Message State)后需將重復(fù)報文請求標(biāo)志位Repeat Message Request Bit清零。如果節(jié)點處于重復(fù)報文狀態(tài)、準(zhǔn)備總線睡眠模式、總線睡眠模式而CanNm_RepeatMessageRequest()服務(wù)被上層調(diào)用CanNm模塊不應(yīng)執(zhí)行此服務(wù)。當(dāng)節(jié)點進(jìn)入重復(fù)報文狀態(tài)(Repeat Message State)后需T_START_NM_TX時間內(nèi)發(fā)送出第一幀網(wǎng)絡(luò)管理報文。圖3 Repeat Message State網(wǎng)絡(luò)管理報文周期定義當(dāng)節(jié)點被本地喚醒或遠(yuǎn)程喚醒后在 T_All_App_TX 時間內(nèi)所有周期應(yīng)用報文必須至少被發(fā)送一次。T_All_App_TX從喚醒事件開始計時。當(dāng)節(jié)點被本地喚醒或遠(yuǎn)程喚醒后在T_AllPlaus_App_TX之后所有應(yīng)用報文中的信號值都應(yīng)為可信的。T_AllPlaus_App_TX從喚醒事件開始計時。節(jié)點進(jìn)入重復(fù)報文狀態(tài)(Repeat Message State)后若需要盡可能快地喚醒總線或恢復(fù)總線通信需使用快速發(fā)送機(jī)制。當(dāng)節(jié)點啟用快發(fā)機(jī)制時需使用 CanNmImmediateNmCycleTime 的周期來發(fā)送網(wǎng)絡(luò)管理報文如圖3所示。使 用 快 速 發(fā) 送 機(jī)制發(fā)送的網(wǎng)絡(luò)管理報文的數(shù)量由參數(shù)CanNmImmediateNmTransmissions 決定。當(dāng)節(jié)點發(fā)送完所有的快速周期報文后需按照參數(shù)CanNmMsgCycleTime規(guī)定的周期發(fā)送網(wǎng)絡(luò)管理報文。若節(jié)點進(jìn)入重復(fù)報文狀態(tài)(Repeat Message State)并且快速發(fā)送機(jī)制未啟動需按參數(shù)CanNmMsgCycleTime 規(guī)定的周期發(fā)送網(wǎng)絡(luò)管理報文如圖4所示。圖4 Repeat Message State網(wǎng)絡(luò)管理報文周期定義當(dāng)節(jié)點從總線睡眠模式(Bus Sleep Mode)或準(zhǔn)備總線睡眠模式(Prepare Bus Sleep Mode)進(jìn)入重復(fù)報文狀態(tài)(Repeat Message State)并成功發(fā)送第一幀網(wǎng)絡(luò)管理報文后需在T_START_App_TX時間內(nèi)將第一幀CAN應(yīng)用報文發(fā)送出來如圖5所示。圖5 T_START_NM_TX參數(shù)定義Normal Operation State常規(guī)運(yùn)行狀態(tài)(Normal Operation State)用于保證只要對網(wǎng)絡(luò)通信有需求任何一個網(wǎng)絡(luò)管理節(jié)點都可以保持網(wǎng)絡(luò)處于喚醒狀態(tài)。當(dāng) 節(jié)點進(jìn)入常規(guī)運(yùn)行狀態(tài)(Normal Operation State) 時需按照CanNmMsgCycleTime 的周期發(fā)送網(wǎng)絡(luò)管理報文。當(dāng)節(jié)點處于常規(guī)運(yùn)行狀態(tài)(Normal Operation State)而 NM-Timeout定時器溢出時需要重啟定時器。當(dāng)節(jié)點處于常規(guī)運(yùn)行狀態(tài)(Normal Operation State)而本地睡眠條件滿足時需進(jìn)入準(zhǔn)備睡眠狀態(tài)(Ready Sleep State)。當(dāng)節(jié)點處于常規(guī)運(yùn)行狀態(tài)(Normal Operation State)而接收到重復(fù)報文請求標(biāo)志位Repeat Message Request Bit置位的網(wǎng)絡(luò)管理報文時需進(jìn)入重復(fù)報文狀態(tài)(Repeat Message State)。當(dāng)節(jié)點處于常規(guī)運(yùn)行狀態(tài)(Normal Operation State) 而CanNm_RepeatMessageRequest()函數(shù)接口被調(diào)用時需進(jìn)入重復(fù)報文狀態(tài)(Repeat Message State)并將報文中重復(fù)報文請求標(biāo)志位Repeat Message Request Bit置位。Ready Sleep State當(dāng)網(wǎng)絡(luò)中仍有節(jié)點對通信有需求時處于準(zhǔn)備睡眠狀態(tài)(Ready Sleep State)的節(jié)點將推遲其向準(zhǔn)備總線睡眠模式(Prepare Bus-Sleep Mode)的轉(zhuǎn)換。當(dāng)節(jié)點進(jìn)入準(zhǔn)備睡眠狀態(tài)(Ready Sleep State)后需停止發(fā)送網(wǎng)絡(luò)管理報文。當(dāng)節(jié)點處于準(zhǔn)備睡眠狀態(tài)(Ready Sleep State)NM-Timeout定時器溢出后需進(jìn)入準(zhǔn)備總線睡眠模式(Prepare Bus-Sleep Mode)。當(dāng)節(jié)點處于準(zhǔn)備睡眠狀態(tài)(Ready Sleep State)但因發(fā)生本地喚醒事件睡眠條件不再滿足時需進(jìn)入常規(guī)運(yùn)行狀態(tài)(Normal Operation State)。當(dāng)節(jié)點處于準(zhǔn)備睡眠狀態(tài)(Ready Sleep State)接收到重復(fù)報文請求標(biāo)志位Repeat Message Request Bit置位的網(wǎng)絡(luò)管理報文后需進(jìn)入重復(fù)報文狀態(tài)(Repeat Message State)。當(dāng)節(jié)點處于準(zhǔn)備睡眠狀態(tài)(Ready Sleep State)Repeat Message Request()函數(shù)接口被調(diào)用時需進(jìn)入重復(fù)報文狀態(tài)(Repeat Message State)并將網(wǎng)絡(luò)管理報文中的重復(fù)報文請求標(biāo)志位Repeat Message Request置位。Network State網(wǎng)絡(luò)狀態(tài)即“請求”和“釋放”是AUTOSAR CanNm狀態(tài)機(jī)的兩個附加狀態(tài)它們與狀態(tài)機(jī)并行存在。網(wǎng)絡(luò)狀態(tài)表示上層軟件是否需要在總線上通信網(wǎng)絡(luò)狀態(tài)被“請求”或者上層軟件是否不需要在總線上通信總線網(wǎng)絡(luò)狀態(tài)隨后被“釋放”注意如果網(wǎng)絡(luò)被釋放一個ECU仍然可以通信因為其他ECU可能仍然在請求網(wǎng)絡(luò)。函數(shù)接口CanNm_NetworkRequest()的調(diào)用將導(dǎo)致網(wǎng)絡(luò)被請求。即CanNm模塊應(yīng)將網(wǎng)絡(luò)狀態(tài)更改為“請求”。函數(shù)接口CanNm_NetworkRelease ()的調(diào)用將導(dǎo)致網(wǎng)絡(luò)被釋放。即CanNm模塊應(yīng)將網(wǎng)絡(luò)狀態(tài)更改為“釋放”。定時參數(shù)參數(shù)值容差描述CanNmRepeatMessageTime1500ms±10%節(jié)點在重復(fù)報文狀態(tài)(Repeat Message State)中持續(xù)的時間CanNmTimeoutTime3000ms±10%節(jié)點進(jìn)入網(wǎng)絡(luò)模式(Network Mode)后即開啟該定時器在準(zhǔn)備睡眠狀態(tài)(Ready Sleep State)中該定時器溢出后節(jié)點進(jìn)入準(zhǔn)備總線睡眠模式(Prepare Bus-Sleep Mode)CanNmWaitBusSleepTime2000ms±10%該定時器的作用是確保所有的節(jié)點都有時間停止其網(wǎng)絡(luò)活動T_START_NM_TX25ms-該參數(shù)定義了節(jié)點從進(jìn)入重復(fù)報文狀態(tài)(Repeat Message State)到發(fā)出第一幀網(wǎng)絡(luò)管理報文的最大允許時間間隔。 原則上這個時間越短越好。T_All_App_TX700ms-所有周期應(yīng)用報文必須至少被發(fā)送一次的最大允許時間。該時間間隔從喚醒事件開始計時。T_AllPlaus_App_TX1000ms-所有應(yīng)用報文中的信號值在此最大允許時間間隔之后均應(yīng)為可信的。該時間間隔從喚醒事件開始計時。T_START_App_TX20ms-第一幀NM報文發(fā)出后第一幀應(yīng)用報文發(fā)出的最大時間間隔。CanNmImmediateNmCycleTime20ms±10%節(jié)點啟動快速發(fā)送機(jī)制時需以此參數(shù)作為網(wǎng)絡(luò)管理報文的發(fā)送周期CanNmMsgCycleTime500ms±10%在網(wǎng)絡(luò)模式(Network Mode)除去準(zhǔn)備睡眠狀態(tài)中若快速發(fā)送機(jī)制未被啟動節(jié)點應(yīng)以此參數(shù)作為網(wǎng)絡(luò)管理報文的發(fā)送周期T_WakeUp75ms-處在Bus-Sleep Mode的節(jié)點從喚醒事件發(fā)生到轉(zhuǎn)換到Repeat Message State的最大允許時間間隔CanNmImmediateNmTransmissions10-當(dāng)節(jié)點處于重復(fù)報文狀態(tài)并啟用快速發(fā)送機(jī)制時節(jié)點使用CanNmImmediateNmCycleTime為周期發(fā)送網(wǎng)絡(luò)管理報文的數(shù)量T_WakeUpTimeout3000ms~5000ms-本參數(shù)定義了在監(jiān)測到CAN(FD)物理層喚醒事件后ECU應(yīng)使能報文接收能力的最大允許時間。NM PDU每一個節(jié)點都會被分配一個唯一的標(biāo)識符NODE_ID。網(wǎng)絡(luò)管理報文需使用統(tǒng)一的基地址0x400唯一標(biāo)識符NODE_ID網(wǎng)絡(luò)管理報文數(shù)據(jù)格式源節(jié)點地址源節(jié)點地址Source Node Identifier在 PDU中的位置必須設(shè)置為Byte 0。每一個參與直接網(wǎng)絡(luò)管理的節(jié)點都會被分配一個唯一的標(biāo)識符NODE_ID存放于網(wǎng)絡(luò)管理報文的Byte0Source Node Identifier中??刂票忍叵蛄靠刂票忍叵蛄緾ontrol Bit Vector在 PDU中的位置必須設(shè)置為Byte 1??刂票忍叵蛄恐行璋˙it 0: 重復(fù)報文請求標(biāo)志位(Repeat Message Request Bit)信號值描述為0x0該報文發(fā)送節(jié)點未請求其他節(jié)點進(jìn)入重復(fù)報文狀態(tài)0x1該報文發(fā)送節(jié)點請求其他節(jié)點進(jìn)入重復(fù)報文狀態(tài)Bit 4: 主動喚醒網(wǎng)絡(luò)標(biāo)志位(Active Wakeup Bit)信號值描述為0x0該報文發(fā)送節(jié)點未主動喚醒網(wǎng)絡(luò)被其它節(jié)點喚醒0x1該報文發(fā)送節(jié)點主動喚醒網(wǎng)絡(luò)重復(fù)報文請求標(biāo)志位(Repeat Message Request Bit)的默認(rèn)值為 0。當(dāng)節(jié)點由于CanNm_RepeatMessageRequest()接口被調(diào)用從常規(guī)運(yùn)行狀態(tài)(Normal Operation State)或準(zhǔn)備睡眠狀態(tài)(Ready Sleep State)進(jìn)入重復(fù)報文狀態(tài)(Repeat Message State)時需將其發(fā)送的網(wǎng)絡(luò)管理報文中的重復(fù)報文請求標(biāo)志位置1直到其離開重復(fù)報文狀態(tài)(Repeat Message State).當(dāng)節(jié)點由于本地睡眠條件不再滿足CanNm_NetworkRequest ()從總線睡眠模式(Bus-Sleep Mode)或準(zhǔn)備總線睡眠模式(Prepare Bus-Sleep Mode)進(jìn)入重復(fù)報文狀態(tài)(Repeat Message State)時需將主動喚醒網(wǎng)絡(luò)標(biāo)志位(Active Wakeup Bit)置1。節(jié)點離開網(wǎng)絡(luò)模式后需將主動喚醒網(wǎng)絡(luò)標(biāo)志位(Active Wakeup Bit)清零??刂票忍叵蛄恐形词褂玫奈豁氈?。用戶數(shù)據(jù)在NM PDU中有6個字節(jié)(User Data Byte 0~5)用于傳輸用戶數(shù)據(jù)信息。在用戶數(shù)據(jù)中WUS元素代表控制器的喚醒源。當(dāng)節(jié)點從總線睡眠模式(Bus-Sleep Mode)或準(zhǔn)備總線睡眠模式(Prepare Bus-Sleep Mode)進(jìn)入重復(fù)報文狀態(tài)(Repeat Message State)時需將WUS置為對應(yīng)的編碼值。當(dāng)處于網(wǎng)絡(luò)模式中時WUS的編碼值不允許變化。節(jié)點離開網(wǎng)絡(luò)模式后需將WUS清零。對WUS的系統(tǒng)通用編碼(0x0~0xA)定義詳見表中。每一個ECU具體WUS的編碼定義(0x10~0xFF)將在系統(tǒng)設(shè)計階段詳細(xì)定義。編碼值0x0defaultValue0x1wakedUpByNetwork0x2KL15OnOrPowerModeOn0x3~0xAreserved for future0x10~0xFF……(ECU specific)當(dāng)ECU的NM模塊處于重復(fù)報文狀態(tài)時須將ECU發(fā)送的Nm報文中的RepeatSts位設(shè)為0x1。當(dāng) ECU 的 NM 模塊未處于重復(fù)報文狀態(tài)時須將 ECU 發(fā)送的 Nm 報文中的RepeatSts 位設(shè)為0x0。用戶數(shù)據(jù)中未使用的位應(yīng)設(shè)為0x0未使用的字節(jié)應(yīng)設(shè)為0x00。狀態(tài)機(jī)梳理節(jié)點狀態(tài)總線睡眠模式網(wǎng)絡(luò)模式預(yù)睡眠模式重復(fù)報文狀態(tài)常規(guī)運(yùn)行狀態(tài)準(zhǔn)備休眠狀態(tài)控制器狀態(tài)睡眠工作是否發(fā)送應(yīng)用報文否是否是否發(fā)送網(wǎng)絡(luò)管理報文否是否定時器行為NM-Timeout Timer關(guān)閉開啟接收NM/發(fā)送NM/超時后均重啟接收NM重啟超時后節(jié)點進(jìn)入預(yù)睡眠模式關(guān)閉Repeat Message Timer關(guān)閉開啟每發(fā)送一幀NM加1達(dá)到計數(shù)值后進(jìn)入常規(guī)運(yùn)行狀態(tài)關(guān)閉CanNm Message Cycle Timer常規(guī)模式關(guān)閉裝載值為CanNmMsgCycleTime關(guān)閉NM立即發(fā)送模式-被動激活關(guān)閉裝載值為CanNmMsgCycleTime不影響關(guān)閉NM立即發(fā)送模式-主動激活關(guān)閉裝載值為CanNmImmediateNmCycleTime不影響關(guān)閉總線負(fù)載降低模式-發(fā)送NM關(guān)閉不影響裝載值為CanNmMsgCycleTime關(guān)閉總線負(fù)載降低模式-接收NM關(guān)閉不影響裝載值為CanNmMsgReducedTime關(guān)閉Wait Bus-Sleep Timer關(guān)閉開啟超時后進(jìn)入總線睡眠模式