一、DCM介紹
DCM(Diagnostic Communication Manager)是AUTOSAR(汽車開放系統架構)基礎軟件BSW中服務層(Service Layer)的核心模塊,其核心功能是為車輛電子控制單元(ECU)提供符合行業標準(如ISO 14229 UDS、ISO 15765 DoCAN、ISO 15031 OBD等)的診斷服務支持,為開發和生產階段提供與診斷儀交互的診斷服務,如下圖所示
Dcm模塊實現依據ISO 14229-1和ISO 15031-5等標準規范中定義的UDS診斷和OBD診斷功能。在接收到一個診斷請求后,需要對診斷請求進行分析,包括請求的服務是否支持,尋址方式是否正確,會話級,安全級,長度,子服務等是否正確。
其主要功能包括:
診斷數據流
管理診斷狀態(診斷會話狀態和安全訪問等級狀態)
檢查診斷服務的請求是否滿足條件
DCM模塊由三個子模塊構成,分別是DSL(DiagnosticSession layer)、DSD(Diagnostic Service Dispatcher)、DSP(Diagnostic Service Processing),如下圖所示,接下來將針對三個子模塊功能進行講解
二、診斷會話層(DSL)
DSL模塊主要用于診斷請求的處理及診斷時序的控制,管理診斷狀態(診斷會話和安全狀態)等,具體存在幾個功能如下:
處理診斷請求:收到請求時,PduR會調用Dcm_StartOfReception()和Dcm_CopyRxData()接口將診斷請求數據從下層的Buffer中Copy到DCM的接收Buffer中。PduR調用Dcm_TpRxIndication()接口通知Dcm模塊接收到了新的診斷請求
處理診斷響應:當需要響應診斷請求時,DLS通過調用通過調用PduR_DcmTransimit()和Dcm_CopyTxData()接口,將數據傳遞至PduR中,其中PduR_DcmTransimit()接口只是傳遞長度信息、地址信息,數據是通過Dcm_CopyTxData()接口傳遞至PduR,當數據傳輸成功后,PduR通過調用Dcm_TpTxConfirmation()接口告知DCM數據接收成功。
管理安全等級:通過Dcm_GetSecurityLevel()和DslInternal_SetSecurityLevel()兩個接口分別用于獲取當前的安全等級和設置安全等級
在配置層面,DSL(Diag Session Layer)的配置參數主要包括以下幾個方面:
診斷幀配置:涵蓋物理尋址和功能尋址的設置
通信緩沖區配置:定義單次通信中允許的最大Buffer大小
時間參數配置:
回復0x78的時間設置
為防止診斷服務異常,允許0x78的最大次數。
這些參數的合理配置對于確保診斷通信的穩定性和可靠性至關重要
三、診斷分發層(DSD)
DSD模塊主要用于診斷服務的分配、服務執行環境及條件,會從接收的數據識別請求的服務類型(如0x10、0x27、0x22等),主要功能如下:
檢查診斷服務:當診斷會話層(DSL)接收到新的診斷請求時,它會通過內部接口通知診斷服務調度器(DSD),如圖所示。DSD 會調用 Dcm_GetSesCtrlType() 和 Dcm_GetSecurityLev