車聯網產品經理需要瞭解的UDS診斷
更新于:2025-03-26 12:10:03

作為一個汽車產品人,不可避免的會接觸到各種車端通信協定,其中的UDS(Unified Diagnostic Services)診斷協定,廣泛應用於汽車電子系統的診斷和維護。這篇文章,我們來學習一下。

一、ECU

ECU( Electronic Control Unit)電子控制單元,車上搭載著許多ECU,用來監控和控制車輛的各個系統,如變速器控制單元(TCU)、電子穩定程式控制單元(ESP)、動力電池管理模組(BMS)等。各ECU根據各種感測器提供的信號,按照預先編寫的程式進行計算和判斷,從而控制執行器工作,以實現對汽車各系統的精確控制。

二、UDS診斷協定

當我們身體的某個部位不舒服時,我們可以去醫院看醫生,這個時候醫生會詢問我們的感受,開具一些檢查來了解情況。同樣的,當車輛某個系統或部件有問題時,我們也需要通過某種手段獲取車輛的數據資訊,以更好的進行治療。UDS診斷協定就是我們和車輛ECU進行診斷溝通的一個通用手段。

UDS(Unified Diagnostic Services,統一診斷服務)診斷協定是一種廣泛應用於汽車電子控制系統中的標準化診斷協定,基於ISO 14229標準。它為汽車電子控制單元(ECU)之間的診斷通信提供了一套統一的框架和服務。這使得不同品牌的汽車和不同製造商的ECU可以使用相同的診斷工具進行診斷,大大提高了診斷的便利性和效率。

UDS診斷提供的能力包括

  • 診斷通信:通過標準化的服務(如0x10會話控制、0x22讀取數據、0x2E寫入數據)與ECU交互。
  • 故障管理:支援DTC(Diagnostic Trouble Code,故障碼)的讀取、清除和存儲。
  • ECU程式設計:用於韌體更新(如通過0x34請求下載、0x36傳輸數據)。
  • 安全訪問:通過安全演算法(如種子-金鑰機制)防止未授權操作。

SID:UDS診斷協議定義了26種診斷服務,這些服務被分為6大類,每種服務都有一個唯一的服務標識符(SID)。

Sub-function:每個診斷服務下的子功能,有的診斷服務不需要指定子功能。Sub-function共有8個bit。

  • bit7:正回應抑制位,全稱Suppress Positive Response,bit7=1時,抑制正回應,此時不需要ECU給出回應,bit7=0時,需要ECU給出回應。
  • bit6~bit0:這7個bit用來指定具體的Sub-function。

UDS診斷協議針對每一個服務,都詳細介紹了服務的功能範圍、給出了請求消息的定義要求、肯定回應消息的定義要求、受支援的否定響應代碼(NRC),以及消息流示例。

三、UDS診斷服務

下面介紹幾個車聯網產品經理需要瞭解的常用服務

10服務:診斷會話控制

10服務用於啟用ECU中的不同診斷會話。不同的診斷會話支援的服務許可權不同。

請求消息

diagnosticSessionTypes診斷會話類型,第7位為正回應抑制位,第6至0位定義診斷會話類型。

  • 默認會話(0x01):這是ECU上電時的初始會話模式。在預設會話下,ECU支援一些基本的診斷服務,例如讀取數據(0x22)、清除診斷資訊(0x14)、讀取診斷資訊(0x19)等。
  • 程式設計會話(0x02):程式設計會話用於ECU的軟體更新和配置。在程式設計會話下,ECU支援一些特定的診斷服務,例如程式設計服務(0x35、0x36、0x37)。
  • 擴展會話(0x03):擴展會話用於啟用一組特定的診斷服務和功能。在擴展會話下,ECU支援一些高級的診斷服務,例如安全訪問(0x27)、數據寫入(0x2E)等。

肯定回應消息

sessionParameterRecord會話參數記錄定義如下,其中

P2Server_max:表示ECU在應用層上對診斷命令的回應時間。如果ECU在該時間內未能回應,可以認為通信超時。

P2*Server_max:表示ECU在強化模式下對診斷命令的回應時間。強化模式通常用於ECU暫時無法處理當前診斷命令的情況,ECU會發送一個NRC 0x78(RequestCorrectlyReceivedResponsePending)回應,表示請求已接收但回應待定。P2*Server_max定義了伺服器在這種情況下可以等待的最長時間。

19服務:讀取DTC資訊

19服務支援讀取故障碼(DTC,全稱Diagnostic Trouble Code)資訊。故障碼由製造商預先定義,可以簡單理解為給車輛的每個故障一個代號。當我們讀到DTC時,根據代號就知道發生了什麼故障。

19服務比較複雜,其下有27個子功能,常用的子功能包括:(Sub-function第7位為正回應抑制位,第6至0位定義具體子功能。)

  • 0x01:reportNumberOfDTCByStatusMask – 讀取符合狀態掩碼條件的DTC數量。
  • 0x02:reportDTCByStatusMask – 讀取符合狀態掩碼條件的DTC清單及其狀態。
  • 0x03:reportDTCSnapshotIdentification – 報告DTC快照記錄的標識。
  • 0x04:reportDTCSnapshotRecordByDTCNumber – 通過DTC編號報告DTC快照記錄。
  • 0x06:reportDTCExtendedDataRecordByDTCNumber – 通過DTC編號報告DTC擴展數據記錄。
  • 0x0A:reportSupportedDTC – 報告ECU支援的所有DTC及其狀態。

1901(讀取DTC數量)

比如我們要獲取ECU中已確認DTC的數量。獲取DTC數量需要使用19 01服務,我們先看下01服務的

請求消息的定義要求、肯定回應消息的定義要求。

請求消息

DTCStatusMask(DTC狀態掩碼):

狀態掩碼共有8個狀態位,通過狀態掩碼,我們可以精確地獲取特定狀態的DTC資訊。比如我們請求消息的狀態掩碼的某一位設置為1,如果DTC的實際狀態位中的這一位也為1(即請求掩碼與DTC的實際狀態進行位邏輯AND運算,並且結果不為零),那麼認為DTC的狀態與狀態掩碼是匹配的。

肯定回應消息

DTC狀態可用性掩碼:用於指示ECU支援的DTC狀態位。比如某個ECU的DTC狀態可用性掩碼為0x09,表示僅支援以下狀態位:Bit 0:Test Failed(測試結果是失敗)、Bit 3:Confirmed DTC(確認的DTC)。

DTCFormatIdentifier(DTC格式識別碼):定義了ECU所報告DTC的格式

DTCCount(DTC計數):DTC數量

示例

現在我們獲取ECU中已確認DTC的數量,請求消息中的狀態掩碼應設置為0x08,所以請求消息為

若收到回應消息如下,說明該ECU支持的DTC狀態可用性掩碼為0x2F,DTC格式為14229,DTC數量為1。

22服務:通過DID讀取數據

22服務支援讀取ECU中通過一個或多個DID所識別的數據記錄值。

DID(Data Identifier)數據識別碼。DID的編碼範圍為16位(0x0000–0xFFFF),其具體含義和用途根據標準化定義或車輛製造商自定義而有所不同。由UDS協議進行標準化定義的DID中常用的有

  • F190:車輛識別號(VIN)
  • F191:ECU硬體號
  • F189:ECU軟體版本號
  • F18C:ECU序列號

請求消息

肯定回應消息

示例

比如我們想讀取VIN,VIN的DID為F190,所以請求消息

回應消息如下,VIN的數據格式為17位元組,ASCII編碼。

四、診斷與車聯網

遠程診斷與OTA

基於UDS診斷協定,再結合車聯網技術,把原先通過線下診斷工具排查解決車輛問題的過程放到線上雲端,就有了遠端的車輛診斷。遠程診斷可以實現車輛故障的高效診斷與快速回應,降低維修成本,提升用戶體驗。同樣的,把原先通過線下刷寫工具刷寫軟體放到線上雲端,就有了OTA遠端更新。

本文由 @violetic 原創發佈於人人都是產品經理。未經作者許可,禁止轉載

題圖來自Unsplash,基於CC0協定

該文觀點僅代表作者本人,人人都是產品經理平臺僅提供資訊存儲空間服務

定製專案有多可怕?
定製專案有多可怕?
2025-03-26 06:49:14