在汽車電子軟件開發中,統一診斷服務(UDS)是實現車輛診斷、刷寫和監控的核心協議。Communication Control服務(服務標識符0x28)是UDS協議中一個關鍵的功能控制服務,它允許診斷儀動態地管理車載網絡中各ECU的通信行為。本文將結合AUTOSAR基礎軟件(BSW)的實踐,深入詳解0x28服務的功能、配置及與底層通信棧的集成。
1. Communication Control服務(0x28)概述
Communication Control服務的主要目的是控制ECU內部非診斷通信的發送與接收。例如,在ECU刷寫(編程會話)期間,為了確保診斷通信的帶寬和穩定性,通常需要暫時禁止應用報文(如CAN信號)的發送。該服務允許診斷儀在特定診斷會話(如擴展會話)下,對ECU的通信通道(如CAN、LIN、FlexRay等網絡)進行啟停控制。
2. 服務請求與響應格式
- 請求格式:28 + SubFunction + ControlType + [CommunicationType]
- SubFunction(子功能):高字節位表示抑制肯定響應位(SuppressPosRspMsgIndicationBit),低7位定義控制模式(如0x00=使能Rx和Tx,0x01=使能Rx但禁用Tx,0x02=禁用Rx但使能Tx,0x03=禁用Rx和Tx)。
- ControlType(控制類型):指定控制是應用于所有通信(0x00)還是特定網絡(如0x01=CAN, 0x02=CAN FD, 0x03=以太網等)。
- CommunicationType(通信類型,可選):當ControlType指定特定網絡時,此參數進一步細化控制對象(如具體的通道ID或報文ID)。
- 肯定響應格式:68 + SubFunction(回顯請求中的子功能)
- 否定響應碼(NRC):常見的有0x12(子功能不支持)、0x13(報文長度或格式錯誤)、0x22(條件不滿足,如不在擴展會話中)、0x31(請求超出范圍,如不支持的通道)。
3. AUTOSAR基礎軟件中的配置詳解
在AUTOSAR方法論中,0x28服務的實現和配置主要涉及診斷通信管理器(Dcm)、通信管理器(ComM)以及底層通信驅動(如CanIf、EthIf)。
3.1 Dcm模塊配置(Dcm模塊)
在Dcm配置中,需要為0x28服務定義服務表(DcmDspService)。關鍵配置項包括:
- 服務標識符:0x28。
- 會話與安全訪問控制:通常,Communication Control服務僅在非默認會話(如擴展會話或編程會話)下可用,并且可能需要特定的安全訪問等級。這需要在DcmDspSessionControl中關聯。
- 子功能支持:定義ECU支持的子功能列表(如0x00, 0x01, 0x02, 0x03)。
- 數據參數處理:配置對ControlType和可選CommunicationType參數的處理邏輯,包括數據長度和有效性檢查。
3.2 ComM模塊集成與配置
ComM是AUTOSAR中管理網絡通信模式的中心模塊。0x28服務的核心邏輯往往通過調用ComM的API來實現。
- 通信模式管理:當收到有效的0x28請求時,Dcm模塊應調用
ComM<em>RequestComMode或ComM</em>InhibitCommunication等API,通知ComM改變指定通道的通信模式(FULLCOMMUNICATION, SILENTCOMMUNICATION, NO_COMMUNICATION)。 - 通道映射配置:在ComM配置中,需明確定義網絡通道標識符(如ComMChannelId)與物理通信通道(如Can控制器通道)的映射關系。這確保了0x28請求中的ControlType能正確映射到目標網絡。
3.3 通信接口層配置(CanIf, EthIf等)
ComM的模式控制最終會傳遞到通信接口層。
- 通信控制API:CanIf、EthIf等模塊提供了
CanIf<em>Control、EthIf</em>Control等函數,用于執行具體的通信啟停操作(如禁止報文發送/接收)。 - 配置關聯:需要確保ComM的通道配置與通信接口層的通道配置一致,使得控制指令能正確下達。
4. 實戰配置流程與示例
- 定義需求:明確ECU需要支持哪些子功能(例如,刷寫時只需禁用Tx),以及控制哪些網絡通道(如CAN Channel 0)。
- BSW模塊配置:
- 在Dcm配置中,啟用0x28服務,綁定到擴展會話,配置支持的子功能為0x01(禁用Tx)。
- 在ComM配置中,創建一個ComMChannel(例如ID=0),并將其與
CanIf/Can的ControllerRef關聯。
- 配置Dcm與ComM的交互:在Dcm代碼中,實現0x28服務的回調函數,當收到子功能0x01請求時,調用
ComM<em>InhibitCommunication(0, COMM</em>INHIBIT)。
- 通信棧聯動:配置ComM,使其在進入SILENTCOMMUNICATION模式時,通過CanIf的
CanIf</em>ControlAPI,將對應CAN控制器的發送功能禁用。
5. 注意事項與最佳實踐
- 會話依賴:務必正確配置會話保護,避免在默認會話下誤操作影響車輛正常通信。
- 狀態恢復:當診斷會話退出(如退回默認會話)時,應確保通信狀態自動恢復。這通常通過ComM的自動狀態機管理或Dcm的會話層回調函數實現。
- 網絡管理協同:如果ECU支持AUTOSAR網絡管理(NM),需注意Communication Control服務與NM模式的協同,防止沖突。通常,ComM會協調NM和診斷的通信需求。
- 安全性考慮:在可能影響車輛安全功能的通道上執行禁用操作時,應增加額外的安全訪問或預條件檢查。
###
Communication Control服務(0x28)是連接UDS診斷層與AUTOSAR通信棧的關鍵樞紐。通過精準的Dcm、ComM及通信接口層配置,可以實現對ECU通信行為的靈活、安全控制,為診斷、編程和測試等場景提供堅實基礎。理解各BSW模塊間的交互關系,是成功集成此服務的關鍵。