CAN網(wǎng)絡(luò)管理之Autosar網(wǎng)絡(luò)管理 文章目錄:
1. Autosar NM 實(shí)現(xiàn)策略
2. Autosar NM 管理模式和狀態(tài)
2.1 總線睡眠模式 ( Bus Sleep Mode )
2.2 預(yù)睡眠模式 ( Prepare Bus Sleep Mode )
2.3 網(wǎng)絡(luò)模式 ( Network Mode )
2.4 相關(guān)參數(shù)匯總說(shuō)明
3. Autosar NM 網(wǎng)絡(luò)管理運(yùn)行模式
4. Autosar NM 協(xié)議數(shù)據(jù)單元(PDU)
4.1 報(bào)文數(shù)據(jù)格式
4.2 源節(jié)點(diǎn)地址(SourceNodeIdentifier)
4.3 控制位向量 (ControlBitVector)
4.4 用戶數(shù)據(jù)(Userdata)
1. Autosar NM 實(shí)現(xiàn)策略 Autosar NM 是一種基于分布式的直接網(wǎng)絡(luò)
管理策略,每個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)都需基于其在網(wǎng)絡(luò)中發(fā)送或接收到的 NM 報(bào)文來(lái)實(shí)現(xiàn)自身的狀態(tài)轉(zhuǎn)換,實(shí)施相應(yīng)的網(wǎng)絡(luò)行為 AUTOSAR 網(wǎng)絡(luò)管理策略通過(guò)發(fā)送周期性的 NM 報(bào)文
實(shí)現(xiàn),網(wǎng)絡(luò)上所有節(jié)點(diǎn)通過(guò)廣播形式接收 NM 報(bào)文;節(jié)點(diǎn)通過(guò)發(fā)送 NM 報(bào)文,表征自身需要網(wǎng)絡(luò)保持喚醒狀態(tài),即當(dāng)自身需要與其它ECU通信,就發(fā)送NM報(bào)文,請(qǐng)求通信
如果某ECU的睡眠條件滿足
,即該ECU不需要通信,則停止發(fā)送 NM 報(bào)文
,等待向總線睡眠模式轉(zhuǎn)換,此時(shí)應(yīng)用報(bào)文仍然發(fā)送
;若在轉(zhuǎn)換過(guò)程中接收到其他ECU發(fā)送的 NM 報(bào)文,說(shuō)明該ECU還需要通信,需延遲其向總線睡眠模式的轉(zhuǎn)換;若持續(xù)一段特定的時(shí)間沒(méi)有接收到 NM 報(bào)文而導(dǎo)致專用定時(shí)器超時(shí),此時(shí)總線沒(méi)有ECU需要通信,停止應(yīng)用報(bào)文發(fā)送,進(jìn)入總線休眠模式 總線休眠后,當(dāng)網(wǎng)絡(luò)中的任何一個(gè)節(jié)點(diǎn)對(duì)總線通信有需求時(shí)
,通過(guò)發(fā)送 NM 報(bào)文來(lái)喚醒網(wǎng)絡(luò)
上其他處于總線睡眠模式的節(jié)點(diǎn),進(jìn)行通信 AUTOSAR 網(wǎng)絡(luò)管理的主要邏輯可以用以下兩點(diǎn)概括: 在一個(gè)網(wǎng)絡(luò)中,若節(jié)點(diǎn)對(duì)總線通信有需求,它就需要周期性的發(fā)送 NM 報(bào)文,否則不發(fā)送 NM 報(bào)文 若節(jié)點(diǎn)對(duì)總線通信不再有需求,并且總線上沒(méi)有任何NM報(bào)文,則進(jìn)入總線睡眠模式 2. Autosar NM 管理模式和狀態(tài) AUTOSAR 網(wǎng)絡(luò)管理包含三種模式: 總線睡眠模式 ( Bus Sleep Mode ) 預(yù)睡眠模式 ( Prepare Bus Sleep Mode ) 網(wǎng)絡(luò)模式 ( Network Mode ) 網(wǎng)絡(luò)模式(Network Mode) 又可分成三種內(nèi)部狀態(tài): 重復(fù)報(bào)文狀態(tài)(Repeat Message State) 正常運(yùn)行狀態(tài)(Normal Operation State) 準(zhǔn)備睡眠狀態(tài)(Ready Sleep State) 2.1 總線睡眠模式 ( Bus Sleep Mode ) 總線睡眠模式(Bus Sleep Mode)的作用是當(dāng)網(wǎng)絡(luò)上沒(méi)有通信需求的時(shí)候,節(jié)點(diǎn)處于低功耗狀態(tài),保留喚醒機(jī)制
,可以被觸發(fā)喚醒 ECU 上電后默認(rèn)進(jìn)入總線睡眠模式
(Bus Sleep Mode) 處于該模式的節(jié)點(diǎn)不發(fā)送也不接收應(yīng)用報(bào)文且不應(yīng)答給出 ACK 應(yīng)答
2.2 預(yù)睡眠模式 ( Prepare Bus Sleep Mode ) 預(yù)睡眠模式(Prepare Bus Sleep Mode)的作用是確保所有節(jié)點(diǎn)在進(jìn)入總線睡眠模式之前都有足夠的時(shí)間停止其網(wǎng)絡(luò)活動(dòng);在預(yù)睡眠模式下,所有節(jié)點(diǎn)應(yīng)停止發(fā)送 NM 報(bào)文和應(yīng)用報(bào)文
,若發(fā)送緩存區(qū)存有報(bào)文,會(huì)被發(fā)送出去以清空發(fā)送緩存區(qū) 當(dāng)節(jié)點(diǎn)進(jìn)入預(yù)睡眠模式(Prepare Bus Sleep Mode)后,將立即開(kāi)啟 T_WAIT_BUS_SLEEP
定時(shí)器;在該定時(shí)器溢出后,該節(jié)點(diǎn)將離開(kāi)預(yù)睡眠模式(Prepare Bus Sleep Mode),進(jìn)入總線睡眠模式(Bus Sleep Mode) 當(dāng)處于預(yù)睡眠模式(Prepare Bus Sleep Mode)的節(jié)點(diǎn)接收到 NM 報(bào)文或?qū)ψ陨碚?qǐng)求網(wǎng)絡(luò)通信時(shí),睡眠被中斷,節(jié)點(diǎn)將向網(wǎng)絡(luò)模式 (Network Mode)轉(zhuǎn)換,進(jìn)入網(wǎng)絡(luò)模式(Network Mode)中的重復(fù)報(bào)文狀態(tài)(Repeat Message State) 2.3 網(wǎng)絡(luò)模式 ( Network Mode ) 網(wǎng)絡(luò)模式的作用是確保當(dāng)節(jié)點(diǎn)請(qǐng)求網(wǎng)絡(luò)時(shí)網(wǎng)絡(luò)處于激活狀態(tài)
當(dāng)節(jié)點(diǎn)從其他模式進(jìn)入網(wǎng)絡(luò)模式時(shí),默認(rèn)進(jìn)入其重復(fù)報(bào)文狀態(tài) 當(dāng)節(jié)點(diǎn)進(jìn)入網(wǎng)絡(luò)模式時(shí),需啟動(dòng) T_NM_TIMEOUT
定時(shí)器;節(jié)點(diǎn)每次成功接收或成功發(fā)送NM 報(bào)文時(shí),需重啟 T_NM_TIMEOUT 定時(shí)器 節(jié)點(diǎn)在總線睡眠模式下,當(dāng)滿足下列兩個(gè)條件之一時(shí)進(jìn)入網(wǎng)絡(luò)模式(Network Mode),并開(kāi)始發(fā)送第一幀 NM 報(bào)文;這一過(guò)程需在規(guī)定的喚醒時(shí)間 t 內(nèi)完成,要求 t ≤ T_WakeUp
,如圖所示: 主動(dòng)喚醒
:主動(dòng)請(qǐng)求喚醒網(wǎng)絡(luò)(本地喚醒條件滿足)被動(dòng)喚醒
:接收到其他節(jié)點(diǎn)的 NM 報(bào)文當(dāng)節(jié)點(diǎn)從預(yù)睡眠模式、常規(guī)運(yùn)行狀態(tài)、 準(zhǔn) 備 睡 眠 狀 態(tài)進(jìn) 入 重 復(fù) 報(bào) 文 狀 態(tài)后,需在 T_START_NM_TX
時(shí)間內(nèi)發(fā)送出第一幀 NM 報(bào)文,當(dāng)節(jié)點(diǎn)成功發(fā)送第一幀 NM 報(bào)文后,需在 T_START_App_TX
時(shí)間內(nèi)將第一幀 CAN 應(yīng)用報(bào)文發(fā)送出來(lái),如圖所示 : 2.3.1 重復(fù)報(bào)文狀態(tài)(Repeat Message State) 重復(fù)報(bào)文狀態(tài)(Repeat Message State)的作用是確保節(jié)點(diǎn)從總線睡眠或預(yù)睡眠模式進(jìn)入網(wǎng)絡(luò)模式時(shí)對(duì)保證自身可以被其他節(jié)點(diǎn)發(fā)現(xiàn)
;此外,也使得網(wǎng)絡(luò)上的節(jié)點(diǎn)在一定時(shí)間(T_REPEAT_MESSAGE
)內(nèi)保持激活狀態(tài);該狀態(tài)可用于檢測(cè)網(wǎng)絡(luò)上存在的節(jié)點(diǎn) 在該狀態(tài)下,節(jié)點(diǎn)要周期性地向外發(fā)送 NM 報(bào)文
根據(jù)進(jìn)入該狀態(tài)的條件不同,發(fā)送 NM 報(bào)文的周期也不同,分為快速模式
和常速模式
: 1. 快速模式
當(dāng)節(jié)點(diǎn)主動(dòng)進(jìn)入重復(fù)報(bào)文狀態(tài)
時(shí),節(jié)點(diǎn)應(yīng)立即發(fā)出規(guī)定數(shù)量N_ImmediateNM_TIMES
的 NM 報(bào)文,發(fā)送周期為T_NM_ImmediateCycleTime
,當(dāng)節(jié)點(diǎn)發(fā)送完所有的快速周期報(bào)文后,需使用 T_NM_MessageCycle
周期來(lái)發(fā)送 節(jié)點(diǎn)在重復(fù)報(bào)文狀態(tài)(Repeat Message State)中持續(xù)的時(shí)間為T_REPEAT_MESSAGE
主動(dòng)進(jìn)入重復(fù)報(bào)文狀態(tài)是指:網(wǎng)絡(luò)通信需求(本地喚醒條件滿足)或自身請(qǐng)求進(jìn)入重復(fù)報(bào)文狀態(tài)(Repeat Message Request()函數(shù)被調(diào)用)2. 常速模式 當(dāng)節(jié)點(diǎn)被動(dòng)進(jìn)入重復(fù)報(bào)文狀態(tài)
時(shí),應(yīng)按照 T_NM_MessageCycle
周期發(fā)送NM 報(bào)文,節(jié)點(diǎn)在重復(fù)報(bào)文狀態(tài)(Repeat Message State)中持續(xù)的時(shí)間為 T_REPEAT_MESSAGE
被動(dòng)進(jìn)入重復(fù)報(bào)文狀態(tài)是指:處于總線睡眠模式(Bus Sleep Mode)或預(yù)睡眠模式(Prepare Bus Sleep Mode),由于成功地接收到 NM 報(bào)文而進(jìn)入重復(fù)報(bào)文狀態(tài)
(Repeat Message State),或節(jié)點(diǎn)處于正常運(yùn)行狀態(tài) (Normal Operation State)或準(zhǔn)備睡眠狀態(tài)(Ready Sleep State),由于成功接收到重復(fù)報(bào)文狀態(tài)請(qǐng)求標(biāo)志位置位的 NM 報(bào)文
(Repeat Message Bit Received)而進(jìn)入重復(fù)報(bào)文狀態(tài)(Repeat Message State) 當(dāng)節(jié)點(diǎn)處于重復(fù)報(bào)文狀態(tài)(Repeat Message State),T_NM_TIMEOUT
定時(shí)器超時(shí)溢出時(shí),需要重啟 T_NM_TIMEOUT
定時(shí)器 節(jié)點(diǎn)在進(jìn)入重復(fù)報(bào)文狀態(tài)(Repeat Message State)后,需要保持一段時(shí)間,這段時(shí)間由參數(shù) T_REPEAT_MESSAGE
決定;T_REPEAT_MESSAGE 超時(shí)后,節(jié)點(diǎn)需離開(kāi)重復(fù)報(bào)文狀態(tài)(Repeat Message State) 節(jié)點(diǎn)離開(kāi)重復(fù)報(bào)文狀態(tài)(Repeat Message State)后,若對(duì)網(wǎng)絡(luò)通信有需求(本地喚醒),應(yīng)進(jìn)入正常運(yùn)行狀態(tài) (Normal Operation State);若對(duì)網(wǎng)絡(luò)通信無(wú)需求,應(yīng)進(jìn)入準(zhǔn)備睡眠狀態(tài) (Ready Sleep State) 2.3.2 正常運(yùn)行狀態(tài)(Normal Operation State) 正常運(yùn)行狀態(tài)(Normal Operation State)的作用是為了確保節(jié)點(diǎn)對(duì)網(wǎng)絡(luò)有通信需求時(shí),網(wǎng)絡(luò)一直保持喚醒狀態(tài)
在正常運(yùn)行狀態(tài)(Normal Operation State)下: 節(jié)點(diǎn)需按照 T_NM_MessageCycle
的周期發(fā)送 NM 報(bào)文 定時(shí)器 T_NM_TIMEOUT
溢出后,需要重啟定時(shí)器 當(dāng)節(jié)點(diǎn)自身主動(dòng)釋放網(wǎng)絡(luò)后,需進(jìn)入準(zhǔn)備睡眠狀態(tài)(Ready Sleep State) 當(dāng)節(jié)點(diǎn)接收到重復(fù)報(bào)文狀態(tài)請(qǐng)求標(biāo)志位置位的 NM 報(bào)文(Repeat Message Bit Received)或者自身請(qǐng)求進(jìn)入重復(fù)報(bào)文狀態(tài)(Repeat Message Request()函數(shù)被調(diào)用)時(shí),需進(jìn)入重復(fù)報(bào)文狀態(tài)(Repeat Message State) 2.3.3 準(zhǔn)備睡眠狀態(tài)(Ready Sleep State) 當(dāng)網(wǎng)絡(luò)中仍有節(jié)點(diǎn)對(duì)通信有需求時(shí),處于準(zhǔn)備睡眠狀態(tài)(Ready Sleep State)的節(jié)點(diǎn)將延遲其向預(yù)睡眠模式(Prepare Bus Sleep Mode)的轉(zhuǎn)換。 定時(shí)器 T_NM_TIMEOUT
溢出后(即其他節(jié)點(diǎn)沒(méi)有再發(fā)送 NM 報(bào)文),需進(jìn)入準(zhǔn)備總線睡眠模式(Prepare Bus Sleep Mode) 當(dāng)節(jié)點(diǎn)自身請(qǐng)求網(wǎng)絡(luò)通信,需進(jìn)入正常運(yùn)行狀態(tài)
(Normal Operation State) 當(dāng)節(jié)點(diǎn)接收到重復(fù)報(bào)文狀態(tài)請(qǐng)求
標(biāo)志位置位的 NM 報(bào)文(Repeat Message Bit Received)或者自身請(qǐng)求進(jìn)入重復(fù)報(bào)文狀態(tài)
(Repeat Message Request()函數(shù)被調(diào)用)時(shí),需進(jìn)入重復(fù)報(bào)文狀態(tài)
(Repeat Message State) 2.4 相關(guān)參數(shù)匯總說(shuō)明 相關(guān)參數(shù)說(shuō)明如下(不同主機(jī)廠的性能要求不一樣,參數(shù)可能存在差異,僅供參考):
參數(shù)名稱 說(shuō)明 參數(shù)值 誤差 T_REPEAT_MESSAGE 節(jié)點(diǎn)在重復(fù)報(bào)文狀態(tài)(Repeat Message State)中持續(xù)的時(shí)間 1500ms 10%T_NM_TIMEOUT 當(dāng)節(jié)點(diǎn)進(jìn)入網(wǎng)絡(luò)模式(Network Mode)時(shí),需開(kāi)啟 T_NM_TIMEOUT 定時(shí)器;節(jié)點(diǎn)處于重復(fù)報(bào)文狀態(tài)(Repeat Message State)或正常運(yùn)行狀態(tài)(Normal Operation State)時(shí),T_NM_TIMEOUT定時(shí)器超時(shí)溢出時(shí),需要重啟T_NM_TIMEOUT 定時(shí)器。在準(zhǔn)備睡眠狀態(tài)(Ready Sleep State)中,該定時(shí)器溢出后,節(jié)點(diǎn)進(jìn)入預(yù)睡眠模式(Prepare Bus Sleep Mode) 2000ms 10%T_WAIT_BUS_SLEEP 該定時(shí)器的作用是確保所有的節(jié)點(diǎn)都有時(shí)間停止其網(wǎng)絡(luò)活動(dòng)。當(dāng)節(jié)點(diǎn)進(jìn)入預(yù)睡眠模式(Prepare Bus Sleep Mode)后,將立即開(kāi)啟 T_WAIT_BUS_SLEEP定時(shí)器。在該定時(shí)器溢出后,該節(jié)點(diǎn)將離開(kāi)預(yù)睡眠模式(Prepare Bus Sleep Mode),進(jìn)入總線睡眠模式(Bus Sleep Mode) 2000ms 10%T_WakeUp 當(dāng)處于總線睡眠模式(Bus Sleep Mode)的節(jié)點(diǎn)由于主動(dòng)喚醒(本地喚醒條件滿足)或被動(dòng)喚醒(接收到其他節(jié)點(diǎn)的NM報(bào)文)時(shí),需進(jìn)入網(wǎng)絡(luò)模式(Network Mode)的重復(fù)報(bào)文狀態(tài)(Repeat Message State),并始發(fā)送第一幀NM報(bào)文的最大允許時(shí)間間隔 100ms 10%T_START_NM_TX 該參數(shù)定義了節(jié)點(diǎn)從預(yù)睡眠模式 (Prepare Bus Sleep Mode)、正常運(yùn)行狀態(tài) (Normal Operation State)或準(zhǔn)備睡眠狀態(tài) (Ready Sleep State)進(jìn)入重復(fù)報(bào)文狀態(tài) (Repeat Message State),到發(fā)出第一幀NM報(bào)文的最大允許時(shí)間間隔 50ms 10%T_START_App_TX 在成功發(fā)送出第一幀NM報(bào)文后,節(jié)點(diǎn)應(yīng)發(fā)送出應(yīng)用報(bào)文的最大時(shí)間間隔 20ms 10%T_NM_ImmediateCycle Time 當(dāng)節(jié)點(diǎn)進(jìn)入重復(fù)報(bào)文狀態(tài),節(jié)點(diǎn)啟動(dòng)快速發(fā)送機(jī)制時(shí),需使用T_NM_ImmediateCycleTime 的周期來(lái)發(fā)送NM報(bào)文 20ms 10%N_ImmediateNM_TIMES 當(dāng)節(jié)點(diǎn)進(jìn)入重復(fù)報(bào)文狀態(tài),節(jié)點(diǎn)啟動(dòng)快速發(fā)送機(jī)制時(shí),需使用N_ImmediateNM_TIMES 為周期發(fā)送網(wǎng)絡(luò)NM報(bào)文的數(shù)量 10次 / T_NM_MessageCycle 在網(wǎng)絡(luò)模式(Network Mode)(除去準(zhǔn)備睡眠狀態(tài))中,節(jié)點(diǎn)應(yīng)以此參數(shù)作為NM報(bào)文的發(fā)送周期 500ms 10%
3. Autosar NM 網(wǎng)絡(luò)管理運(yùn)行模式 AUTOSAR 網(wǎng)絡(luò)管理模式轉(zhuǎn)換圖如圖所示:
各模式及狀態(tài)跳轉(zhuǎn)條件描述:
跳轉(zhuǎn)條件 具體說(shuō)明 Condition1 網(wǎng)絡(luò)通信需求 (本地喚醒 條件滿足 ) Condition2 成功接收一幀 NM報(bào)文 Condition3 成功發(fā)送一幀 NM報(bào)文 Condition4 T_REPEAT_MESSAGE定時(shí)器超時(shí) Condition5 網(wǎng)絡(luò)被釋放 (節(jié)點(diǎn)的本地睡眠條件滿足) Condition6 T_NM_TIMEOUT定時(shí)器超時(shí) Condition7 成功接收到重復(fù)報(bào)文狀態(tài)請(qǐng)求標(biāo)置位 (Repeat Message Bit Received)的 NM報(bào)文 Condition8 T_WAIT_BUS_SLEEP定時(shí)器超時(shí) Condition9 Repeat Message quest()函數(shù)被調(diào)用函數(shù)
各模式及狀態(tài)跳轉(zhuǎn)行為描述: 跳轉(zhuǎn)行為 具體描述 Action1 CAN網(wǎng)絡(luò)模式初始化 Action2 啟動(dòng)T_REPEAT_MESSAGE定時(shí)器 Action3 啟動(dòng)T_NM_TIMEOUT定時(shí)器 Action4 啟動(dòng)T_WAIT_BUS_SLEEP 定時(shí)器 Action5 節(jié)點(diǎn)發(fā)送NM報(bào)文 Action6 節(jié)點(diǎn)停止發(fā)送NM報(bào)文 Action7 轉(zhuǎn)換到Bus Sleep Mode
不同的運(yùn)行模式對(duì)應(yīng)收發(fā) CAN 報(bào)文的類型 :4. Autosar NM 協(xié)議數(shù)據(jù)單元(PDU) 4.1 報(bào)文數(shù)據(jù)格式 網(wǎng)絡(luò)管理報(bào)文的數(shù)據(jù)格式如圖 :
4.2 源節(jié)點(diǎn)地址(SourceNodeIdentifier) 每一個(gè)節(jié)點(diǎn)都會(huì)被分配一個(gè)唯一的標(biāo)識(shí)符
(Node_ID),存放于 NM 報(bào)文的 Byte0(Source Node Identifier)中,Node_ID常用ECU地址來(lái)表示
,比如某個(gè)ECU NM報(bào)文ID是0x456
,則直接用0x56
填充Byte0
4.3 控制位向量 (ControlBitVector) 下表描述了控制位向量(ControlBitVector)的格式:
重 復(fù) 報(bào) 文 請(qǐng) 求 標(biāo) 志 位 (Repeat Message Request Bit) 的 默 認(rèn) 值 為 0 ;當(dāng) 節(jié) 點(diǎn) 由 于 RepeatMessageRequest()
函數(shù)被調(diào)用,從正常運(yùn)行狀態(tài)(Normal Operation State)或準(zhǔn)備睡眠狀態(tài) (Ready Sleep State)進(jìn)入重復(fù)報(bào)文狀態(tài)(Repeat Message State)
時(shí),需將其發(fā)送的網(wǎng)絡(luò)管理報(bào)文中的重復(fù)報(bào)文請(qǐng)求標(biāo)志位(Repeat Message Request Bit)置 1,直到其離開(kāi)重復(fù)報(bào)文狀態(tài) 當(dāng)節(jié)點(diǎn)由于自身請(qǐng)求喚醒網(wǎng)絡(luò)
(本地喚醒條件滿足),從總線睡眠模式(Bus Sleep Mode)或準(zhǔn)備總線睡眠模式(Prepare Bus Sleep Mode)進(jìn)入重復(fù)報(bào)文狀態(tài)(Repeat Message State)時(shí),需將主動(dòng)喚醒網(wǎng)絡(luò)標(biāo)志位(Active Wakeup Bit)置 1,直到其進(jìn)入準(zhǔn)備睡眠狀態(tài)(Ready Sleep State)。當(dāng)節(jié)點(diǎn)由于接收到 NM 報(bào)文而進(jìn)入重復(fù)報(bào)文狀態(tài)(Repeat Message State),需將其發(fā)送的網(wǎng)絡(luò)管理報(bào)文中的主動(dòng)喚醒網(wǎng)絡(luò)標(biāo)志位(Active Wakeup Bit)置 0 4.4 用戶數(shù)據(jù)(Userdata) 在 NM報(bào)文 中,有六個(gè) 字節(jié) (Byte2 ~ Byte7)稱為用戶數(shù)據(jù) (Userdata) ,用以存儲(chǔ)特殊的應(yīng)用數(shù)據(jù),比如:系統(tǒng)配置信息
、總線故障信息
、總線喚醒原因
等,用于分析控制器節(jié)點(diǎn)行為,便于分析問(wèn)題