前言
CanNm模塊配置完成后,基本不需要和其他非標準AUTOSAR模塊進行交互(除了user data數據的使用),但是在深入理解CanNm模塊是發現一下幾個問題還是比較疑惑:
(1)Dcm通過BswM控制CanNm報文的Enable和Disable后會影響CanNm狀態機嗎?
(2)誰來觸發CanNm狀態機跳轉,什么條件下怎么觸發?
(3)CanNm怎么知道是主動(本地)喚醒還是被動(NM網絡)喚醒?
本文就來回答這些問題。
AUTOSAR模式管理-BswM模塊詳細介紹
AUTOSAR模式管理-EcuM Sleep and UP詳解
AUTOSAR 通信服務 - NM概念詳解
正文
1.網絡管理基本概念
2.CanNm和BswM模塊交互
2.1 BswNMControl配置容器
BswM模塊的BswMAction配置容器下的BswNMControl配置容器可以配置enable或者disable一路Can網絡管理報文的發送,通常這個功能需求在DCM模塊的0x28服務開關應用/網絡管理通信中會使用到。
BswMComMNetworkHandleRef參數屬于BswNMControl配置容器下的配置項,應用此路網絡管理在Com下的通道號。
CanNm模塊提供CanNm_DisableCommunication和CanNm_EnableCommunication兩個函數接口用來開關CanNm報文的發送,如果在BswM模塊中配置了BswNMControl配置容器,且有對應的LE邏輯表達式能夠觸發這個Action,那么就會完成BswM和CanN的交互。
2.2 BswMNmIfCarWakeUpIndication
BswM的BswMModeRequestPort配置容器中提供了BswMNmIfCarWakeUpIndication模式請求端口來通過NMif --> CanNm來獲取網絡管理喚醒狀態。這個MRP在實際應用中很少用到。
3.ComM模塊通過NMIf模塊和CanNm模塊交互
3.1 本地喚醒源主動喚醒
主動喚醒:來自模塊內部對網絡的請求,比如KL15喚醒。主動喚醒節點的網絡管理報文必須先于應用報文發送。
ECU上電或喚醒后,如果檢測到為本地喚醒或其他條件需要ECU進行主動喚醒時,用戶調用ComM接口ComM_RequestComMode()請求ComM COMM_FULL_COMMUNICATION以使能通信,ComM在接收到請求后,調用 CanSM_RequestComMode()請求CanSM將相應的Can通道狀態切換為FULLCOM,CanSM再通過CanIf切換控制器和收發器狀態,調用如果該通道的NMVariant為FULL,調用NM接口 Nm_NetworkRequest(),NM再調用CanNm接口 CanNm_NetworkRequest()請求進入主動喚醒。ComM進入COMM_FULL_COMMUNICATION后,可通過BSWM或手動方式,啟動相應通道的Com IPdu Groups,通信開始。
3.2 網絡喚醒源被動喚醒
被動喚醒:來自總線上其他模塊對該模塊的網絡請求。被動喚醒的節點,發送網絡管理報文和應用報文的先后順序無特別要求。
ECU上電或喚醒后,如果檢測到為遠程喚醒或其他添加需要ECU進行passive喚醒時,調用 ComM_EcuM_WakeUpIndication()(如果ECUM中的wakeup source綁定了ComM通道,則在調用EcuM_CheckWakeup()時自動調用),如果通道的NMVariant為FULL或PASSIVE,ComM調用 Nm_PassiveStartUp()請求NM進行passive喚醒,并調用 CanSM_RequestComMode()請求CanSM將相應的Can通道狀態切換為FULLCOM。
3.3 網絡休眠
當某個網絡通道需要休眠時,調用ComM接口ComM_RequestComMode()請求COMM_NO_COMMUNICATION以釋放通信請求,COMM在接收到請求后,調用 CanSM_RequestComMode()請求CanSM將相應的Can通道狀態切換為NOCOM,如果該通道的NMVariant為FULL,調用NM接口Nm_NetworkRelease()請求NM進入sleep,NM在等待總線同步休眠后(其他節點都停發了網絡管理報文準備休眠),進入Bus-Sleep狀態,反饋給ComM,ComM進入NOCOM狀態,如果BswM中配置了ComM模塊狀態為NO COMMUNICATION就執行ECUM下電動作時,此時ECUM就可以啟動下電流程。
4.問題回答
問題1:Dcm通過BswM控制CanNm報文的Enable和Disable后會影響CanNm狀態機嗎?
答:AUTOSAR網絡管理規范中沒有明確說明這個問題。不過在閱讀源碼后,發現 CanNm_DisableCommunication和 CanNm_EnableCommunication不會影響CanNm狀態機,只是設置一個標志用來控制NM報文的發送。
問題2:誰來觸發CanNm狀態機跳轉,什么條件下怎么觸發?
答:ComM模塊獲取到EcuM上報的被動喚醒事件后通過Nm_PassiveStartUp來被動喚醒NM。ComM收到用戶的網絡通信請求后通過Nm_NetworkRequest來主動喚醒NM。ComM收到用戶的網絡通信請求后通過Nm_NetworkRelease釋放NM。
問題3:CanNm怎么知道是主動(本地)喚醒還是被動(NM網絡)喚醒?
答:主動喚醒一般都是本地Local喚醒,來自ComM的用戶(User)調用ComM_ModeRequest請求網絡喚醒。被動喚醒一般都是NM網絡喚醒,來自EcuM調用ComM_EcuM_WakeUpIndication上班的喚醒事件。
審核編輯:郭婷
-
接口
+關注
關注
33文章
8691瀏覽量
151855 -
函數
+關注
關注
3文章
4345瀏覽量
62950
原文標題:AUTOSAR架構下關于CanNm的幾點思考
文章出處:【微信號:汽車電子嵌入式,微信公眾號:汽車電子嵌入式】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論