AUTOSAR ComM模塊的分享分為ComM模塊概念詳解和ComM模塊配置及代碼分析,本篇為ComM模塊配置及代碼分析篇。
1.ComM和其他模塊交互時序分析
ComM模塊調用CanSM_Request請求CanSM開啟CAN通信,CanSM開啟通信后調用ComM_BusSM_ModeIndication通知到ComM當前CAN通道Channel已經切換到COMM_FULL_COMMUNICATION狀態了。ComM隨后調用CanNM模塊的Nm_NetworkRequest或者Nm_PassiveStartup接口開啟該通道的網絡管理。
1.2被動喚醒(以CAN通道為例)
EcuM調用ComM_EcuM_WakeUpIndication通知到ComM模塊ECU被喚醒,CanNM模塊調用ComM_Nm_RestartIndication通知到ComM網絡管理模塊重啟網絡,隨后NM調用ComM_Nm_NetworkStartIndication通知到ComM網絡管理模塊開始網絡管理。
ComM模塊中CAN通道的狀態從COMM_NO_COM_NO_PENDING_REQUEST切換到COMM_NO_COM_REQUEST_PENDING狀態。ComM模塊等待運行通信標志CommunicationAllowed=TRUE。允許通信后,ComM模塊調用CanSM_RequestComMode請求COMM_FULL_COMMUNICATION通信。
CanSM開啟通道的通信后,ComM模塊通道切換到COMM_FULL_COM_NETWORK_REQUESTED狀態。隨后,ComM模塊調用Nm_PassiveStartUp請求NM被動開啟網絡管理,NM也調用ComM_Nm_NetworkMode通知到ComM當前NM的網絡模式。
1.3網絡關閉(以CAN通道為例)
1.4通信請求
2.ComM模塊配置
ComM配置ComMConfigSet和ComMGeneral兩個頂層Container。
ComMConfigSet: 包含子配置參數Container。
ComMGeneral: ComM模塊的通用配置參數。
2.1ComMGeneral
ComMGeneral主要包含ComM的一些通用配置。
ComMDirectUserMapping: 配置是否讓工具自動為每個ComMChannel映射ComMUser句柄(handler)。
ComMEcuGroupClassification: 配置模式抑制(mode inhibition)是否會影響到ECU。
ComMModeLimitationEnabled: 配置模式限制(mode limitation)是否被使能(enable or disable)。
ComMPncGatewayEnabled: 局部網絡網關是否被使能。
ComMPncPrepareSleepTimer: COMM_PNC_PREPARE_SLEEP狀態下定時器限值(以秒為計數單位)。
ComMPncSupport: 配置是否支持局部網絡功能。
ComMResetAfterForcingNoComm: 配置ComM進入到無通信狀態后ComM模塊是否進行重啟。
ComMSynchronousWakeUp: 配置是否支持通道同步喚醒(一個通道被喚醒則所有通道就被喚醒)。
ComMTMinFullComModeDuration: 配置COMM_FULL_COMMUNICATION狀態的COMM_FULL_COM_NETWORK_REQUESTED子狀態下最小的時間周期(以秒為單位)。
ComMWakeupInhibitionEnabled: 配置是否支持喚醒抑制(wake up inhibition)功能。
2.2ComMConfigSet
ComMConfigSet主要包括以下三個配置container。
ComMChannel: 此容器包含總線通道的配置(參數)。信道參數應在整個通信堆棧內協調一致。
ComMPnc: 該容器包含部分網絡集群(PNC)的配置。
ComMUser: 這個容器包含一個標識符列表,這些標識符用于引用系統中指定請求通信模式的用戶。
2.2.1ComMUser
ComMUserIdentifier:一種標識符,用于引用系統中指定請求通信模式的用戶。ImplementationType: ComM_UserHandleType
用戶的概念與ECU State Manager規范中的請求者的概念非常相似。
ComMUserEcucPartitionRef: 表示請求程序在其中執行“EcucPartition”。當分區停止時,ComM中的通信請求將被取消,以避免由于分區停止而導致總線保持喚醒,這個參數基本不使用,也不配置。
2.2.2?ComMChannel
此容器包含總線通道的配置(參數)。信道參數應在整個通信堆棧內協調一致。
ComMBusType: 總線類型,包括:COMM_BUS_TYPE_CAN,COMM_BUS_TYPE_CDD,COMM_BUS_TYPE_ETH,COMM_BUS_TYPE_FR,COMM_BUS_TYPE_INTERNAL,COMM_BUS_TYPE_LIN六種類型。
ComMCDDBusPrefix: 調用復雜驅動(CDD)的API時需要加上的前綴。
ComMChannelId: 總線通道ID。
ComMFullCommRequestNotificationEnabled: 定義是否為該通道提供接口ComM_CurrentChannelRequest的可選SenderReceiver端口。
ComMMainFunctionPeriod: ComMMainFucntion調度周期。
ComMChannel: 配置是否允許切換ComM通道狀態到COMM_SILENT_COMMUNICATION或者COMM_FULL_COMMUNICATION。在ECU運行時可以通過以下API改變這個配置參數。
ECU/All channels: ComM_LimitECUToNoComMode().
Separate channels: ComM_LimitChannelToNoComMode().
ComMNoWakeup: 配置ECU是否不允許喚醒該通道。
ComMNoWakeUpInhibitionNvmStorage: 如果該參數設置為true,則通道的NoWakeUp抑制狀態將存儲在ComMGlobalNvmBlockDescriptor所指向的塊中(以某種具體實現的方式)。
ComMPncGatewayType: 定義該通道局部網絡網關行為。
ComMNetworkManagement: ComMChannel的子Container,該容器包含網絡管理的配置參數。
ComMUserPerChannel: ComMChannel的子Container,這個容器包含一個標識符列表,這些標識符用于引用鏈接到通道的系統中的用戶。
2.2.2.1ComMNetworkManagement
ComMNmLightTimeout: 定義COMM_FULL_COMMUNICATION子狀態COMM_FULL_COM_READY_SLEEP離開后的超時時間(秒)。僅在ComMNmVariant配置為Light時使用。
ComMNmVariant: 定義網絡管理的功能。應與NM配置相協調。
FULL: AUTOSAR NM可用(默認)。
LIGHT: 沒有AUTOSAR NM可用,但有關閉通道的功能。
NONE: 不使用NM網絡管理。
PASSIVE: AUTOSAR NM運行在被動模式可用。
如果ComMBusType = COMM_BUS_TYPE_INTERNAL則 ComMNmVariant應該被配置為NONE。
ComMPncNmRequest: 如果這個參數等于true,那么每次由于PNC狀態機改變為COMM_PNC_REQUESTED而請求FULL Communication時,Nm將使用API Nm_NetworkRequest調用。
2.2.2.2ComMUserPerChannel
ComMUserPerChannel: 引用此通道用戶對應的ComMUser。
2.2.3ComMPnc
ComMPncId: 定義局部網絡ID
ComMChannelPerPnc: 局部網絡中的ComMChannel。
ComMPncEthIfSwitchPortGroupRef: 引用與此PNC對應的PortGroups。
ComMUserPerPnc: 參考與此PNC對應的ComMUsers。
ComMPncComSignal: 表示PNC通信信號,用于通信該PNC的EIRA和ERA狀態。
3.ComM模塊代碼分析
AUTOSAR模塊的代碼結構在Autosar架構下的模塊詳細設計及代碼實現--基于配置的編程方法一文中我們有闡述。關注公號車端
3.1 重要數據結構分析
(1)配置代碼
配置項結構體:
在ComM_PBcfg.c里面定義了每一個通道配置的具體實現。
(2)模塊的實時狀態數據結構
每個通道都會有一個實時的狀態機,以及一些運行中的實時狀態,這些狀態一般保存在一個全局數據結構當中。
ComM.c中
這些全局變量是我們在調試ComM的時候需要觀測的重要數據結構,通常在排查問題的時候,我們僅僅需要觀測這幾個全局變量。
3.2 主邏輯代碼分析
ComM_Main.c
ComM_Prv_ChannelMainFunction函數中的邏輯一句話概括就是:根據配置走不同的分支,根據實時請求切換狀態并執行響應動作。
3.3 接口/回調函數使用分析
ComM.h中聲明了所有的接口函數
同理,ComM_Nm.h中聲明了Indication函數ComM_Nm_NetworkStartIndication,ComM_Nm_NetworkStartIndication.c文件中定義了ComM_Nm_NetworkStartIndication函數。
ComM_Nm_NetworkStartIndication函數最主要的就是根據配置,更新通道狀態結構體變量中的PassiveRequestState_u8變量。
審核編輯:劉清
-
CAN通信
+關注
關注
5文章
94瀏覽量
17910 -
定時器
+關注
關注
23文章
3251瀏覽量
115009 -
AUTOSAR
+關注
關注
10文章
363瀏覽量
21624 -
ecu
+關注
關注
14文章
890瀏覽量
54577
原文標題:AUTOSAR ComM功能及配置參數詳解
文章出處:【微信號:談思實驗室,微信公眾號:談思實驗室】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論