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