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