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