統一診斷服務（，簡稱 UDS）是車用電子的通訊協定，是電子控制器（ECU）中裝置診斷用的網路傳輸協議，對應的標準是 ISO 142291。此標準是衍生自 ISO 142303（KWP2000）以及目前已不使用的 ISO 157653 （控制器區域網路上的診斷通訊，DoCAN）。「統一診斷服務」中的「統一」是指此標準是國際性標準，不是特定公司的專用標準。目前所有一階供應商新生產的 ECU 都已支援此通訊協定，也已整合到其他標準中，例如 AUTOSAR。現代汽車中的電子控制器控制了非常多的機能，包括燃料噴射裝置（EFI）、發動機控制器、傳動、防鎖死剎車系統（ABS）、門鎖、剎車、窗戶動作等。 診斷工具可以連線車上所有支援統一診斷服務功能的電子控制器。車上常用的控制器區域網路只用到 OSI 模型的第一層及第二層，而統一診斷服務整合了 OSI 模型的第五層及第七層。服務識別碼（Service ID、SID）及服務相關的引數都放在 8 個位元組的訊息框內。 現今的車輛有配合離線診斷的診斷介面，讓電腦或是診斷工具（作為測試裝置）可以連線到汽車上的通訊系統。因此可以傳送統一診斷服務的請求到控制器，控制器必須回覆（可能是正面或是負面的回覆），這樣可以確認個別控制單元中的故障記憶體、更新控制單元的韌體、和硬體進行低階的互動（例如開啟或關閉特定的輸出）、或是進行特定的機能，目的是了瞭解電子控制器的環境或是操作條件，以診斷故障或是不希望出現的行為。 服務 功能群 請求 SID 回覆 SID 服務 說明 診斷及通訊管理 0x10 0x50 診斷會話控制 Diagnostic Session Control UDS 會使用不同的會話（session），可以用診斷會話控制（Diagnostic Session Control）來切換。可用的服務會依照目前有效的會話而不同。在一開始，控制單元預設是在「預設會話」（Default Session），有定義其他的會話，需要實現的會話會依照裝置的種類而不同。 「程式會話」（Programming Session）可以用來上傳韌體到裝置，並更新裝置的韌體。 「擴充診斷會話」（Extended Diagnostic Session）可解鎖特定的診斷功能，例如調整感測器等。 「安全系統診斷會話」（Safety system diagnostic session）用來測試安全相關的診斷機能，例如安全氣囊的測試。 此外，也有一些保留的會話識別符，為了汽車生產者及供應商的特殊需求而設計。 0x11 0x51 ECU 重置 ECU Reset ECU 重置的服務是要重新啟動 ECU。依照控制單元硬體以及實現方式的不同，有以下幾種不同的重置： 「硬重置」模擬電源關閉的重置。 「關閉鎖匙重置」模擬用鎖匙將汽車熄火，再開啟汽車的點火開關。 「軟重置」初始化特定程式單元以及儲存結構。 也有一些汽車生產者及供應商定義的特殊數值。 0x27 0x67 安全性存取 Security Access 可以用安全性檢查（Security check）來啟動大部份的安全關鍵性服務（securitycritical services）。此情形下控制單元會傳送「密碼種子（seed）」到客戶端（電腦或是診斷工具）。客戶端再用密碼種子計算金鑰（key）送回控制單元，以此來解安全關鍵性服務 0x28 0x68 通訊控制 Communication Control 此服務可以關閉控制單元傳送以及接收訊息的功能。 0x29 0x69 認證 Authentication 標準在 2020 年的更新版本，提供一種標準化的方式，可以提供一些安全性存取（0x27）服務無法支援的現代認證方式，包括以 PKI 為基礎的認證交換，以及雙向的驗證機制。 0x3E 0x7E 測試者存在 Tester Present 若客戶端長時間沒有交換通訊資料，控制單元會自動離開目前的會話，回到「預設會話」，也可能會進入休眠模式。而此一服務的目的就是讓控制單元知道客戶端仍存在。 0x83 0xC3 存取時序引數 Access Timing Parameters 在控制器及從機的通訊中，需要觀察一定的時間，若時間超過此限制，仍沒有送出訊息，就會假設連線已有問題。可以讀取及修改此時間。 0x84 0xC4 安全資料傳輸 Secured Data Transmission 0x85 0xC5 控制 DTC 設定 Control DTC Settings 啟動或關閉部份（或所有）錯誤的偵測。若診斷工作是在車內進行的，這個機能格外重要，因為診斷工作有可能造成部份零件的異常行為。 0x86 0xC6 事件回覆 Response On Event 0x87 0xC7 鏈結控制 Link Control 服務鏈結控制是用來設定診斷存取的位元率。多半隻在中間閘道器上實現此一機能。 資料傳輸 0x22 0x62 根據識別碼讀取資料 Read Data By Identifier 透過此服務可以讀取控制單元中一個或多個的資料。這些資料的種類不限，也可以有不同的長度，例如料號或是軟體版本等。也可以讀取像是感測器狀態之類會變動的值。每一個值會對一個資料識別碼（Data Identifier、簡稱 DID），數值從 0 到 65535。會用正常的 CAN 訊號來傳送特定 ECU 使用的資料。DID 資料只用在資料請求上，也可以用一些沒有 ECU 使用的 DID 來傳送資訊，雖 ECU 不會使用，但服務工具或軟體測試程式可以使用這類的資訊。 0x23 0x63 根據位址讀取記憶體 Read Memory By Address 依給定位址讀取實體記憶體中的值。測試工具可以用此機能來讀取軟體內部的行為。 0x24 0x64 根據識別碼讀取縮放比例資料 Read Scaling Data By Identifier 0x2A 0x6A 週期性根據識別碼讀取資料 Read Data By Identifier Periodic 透過此服務可以讓控制單元週期性傳送資料。只能傳送透過「動態定義資料識別碼」定義的識別碼 0x2C 0x6C 動態定義資料識別碼 Dynamically Define Data Identifier 此服務提供一個修正裝置資料識別碼（DID）的方式，可以重新調整資料識別碼。這個通常是不同資料識別碼的組合，或者單純是所有 DID 的串接。 請求資料可以依以下的原則規劃組態： 原始資料識別碼、位置、長度（依位元組表示）、子功能位元組：defineByIdentifier 記憶體位置、長度（依位元組表示）、子功能位元組：defineByMemoryAddress 可以結合上述二種方式 0x2E 0x6E 根據識別碼寫入資料 Write Data By Identifier 可以更改資料識別碼中的數值，命令中除了資料識別碼外，也要同時提供要修改的數值 0x3D 0x7D 根據位址寫入到記憶體 Write Memory By Address 「根據位址寫入到記憶體」可以讓外面診斷工具寫資訊到 ECU 裡的特定位址，或特定的連續位址 儲存資料傳送 0x14 0x54 清除診斷資訊 Clear Diagnostic Information 清除已儲存的診斷問題碼（Diagnostic Trouble Code，簡稱 DTC） 0x19 0x59 讀取 DTC 資訊 Read DTC Information DTC 是診斷問題碼。每一個 DTC 對應一個控制單元的故障，會以其編碼儲存在錯誤記憶體中，可以在任意時候讀取。除了錯誤外，也可能會記錄一些相關的資訊，也可以一併讀取。 輸入／輸出控制 0x2F 0x6F 根據識別碼的輸入／輸出控制 Input Output Control By Identifier 此服務可以讓外部系統介面透過診斷介面控制輸入／輸出訊號 透過設定選擇位元組，可以設定有關請求的特殊條件，可以設定以下的值： ReturnControlToECU：裝置需將訊號的控制權送回 ResetToDefault：測試者試圖重置訊號，回到系統的預設值 Freeze Current State：裝置需凍結目前的訊號，不允許變化 ShortTermAdjustment：裝置需使用目前提供的訊號值 遠端啟動程式 0x31 0x71 遠端控制 Routine Control 此控制服務程式可以進行各種的服務，有三種不同的資訊種類： 配合啟始資訊，可以開始服務。可以定義此資訊來確認要執行各動作，或是提示服務已經完成。 配合停止資訊，執行中的服務可以在任何時間下中斷。 第三個選項是查詢服務狀態的資訊 可以特別標示啟始及結束的資訊引數，因此可以實現每一種專案特定的服務。 上傳／下載 0x34 0x74 請求下載 Request Download 利用「請求下載」服務，可以下載新的軟體或是其他資料到控制單元內。需標示資料的位置以及長度，因此，控制器可以知道資料封包的大小。 0x35 0x75 請求上傳 Request Upload 「請求上傳」服務和「請求下載」服務是類似的，此服務可以將控制單元的軟體傳送給測試者。也需標示資料的位置以及長度，測試者需指定資料封包的大小。 0x36 0x76 傳送資料 Transfer Data 在真正傳送資料時，會用到此一服務，不論是上傳或是下載都是使用此一服務。傳送的方向則視之前是「請求上傳」服務或「請求下載」服務而不同。此一服務會用之前指定的最大封包長度傳送資料，若資料長度超過最大封包長度，需要用數個封包來傳送，直到傳送完成為止。 0x37 0x77 請求結束傳送 Request Transfer Exit 可以用此服務中止資料傳送。此服務用在測試著和控制單元比較時。在執行時，控制單元可以負面回應來中止資料傳送請求。若指定的資料量還沒傳送完，也可以用此服務中止傳送。 0x38 0x78 請求檔案傳送 Request File Transfer 此服務用來啟始客戶端到伺服器的檔案下載，或是伺服器到客戶端的檔案上傳。也可以提供一些檔案系統的相關資訊。 0x7F 否定回應 Negative Response 此回應會在服務無法進行時回覆，例如不支援的資料識別符。此時會加上否定的回應碼。 NRC Negative response codes 來自 ECU 的否定回應 Negative Response 包含 SID 0x7F 和兩個有效負載位元組：請求的 SID 和錯誤程式碼。 錯誤程式碼 NRC 如下： NRC Description 0x10 General reject 一般拒絕 0x11 Service not supported 不支援的服務 0x12 Subfunction not supported 不支援的子功能 0x13 Incorrect message length or invalid format 訊息長度不正確或格式錯誤 0x14 Response too long 反應時間太長 0x21 Busy repeat request 忙碌 重複請求 0x22 Conditions not correct 條件不正確 0x24 Request sequence error 請求順序錯誤 0x25 No response from subnet component 子網路元件無回應 0x26 Failure prevents execution of requested action 阻止執行請求的操作失敗 0x31 Request out of range 請求超出範圍 0x33 Security access denied 安全存取被拒絕 0x34 Authentication failed 認證失敗 0x35 Invalid key 無效的金鑰 0x36 Exceeded number of attempts 超過嘗試次數 0x37 Required time delay not expired 要求的延遲時間未到 0x38 Secure data transmission required 需要安全的資料傳輸 SID0x84 0x39 Secure data transmission not allowed 不允許安全資料傳輸 0x3A Secure data verification failed 安全資料驗證失敗 0x50 Certificate validation failed invalid time period 證書驗證失敗，時段無效 0x51 Certificate validation failed invalid signature 憑證驗證失敗，簽章無效 0x52 Certificate validation failed invalid chain of trust 憑證驗證失敗，信任鏈無效 0x53 Certificate validation failed invalid type 證書驗證失敗，型別無效 0x54 Certificate validation failed invalid format 證書驗證失敗，格式無效 0x55 Certificate validation failed invalid content 證書驗證失敗，內容無效 0x56 Certificate validation failed invalid scope 證書驗證失敗，範圍無效 0x57 Certificate validation failed invalid certificate 證書驗證失敗，證書無效 0x58 Ownership verification failed 所有權驗證失敗 0x59 Challenge calculation failed 挑戰計算失敗 0x5A Setting access right failed 設定存取許可權失敗 0x5B Session key creationderivation failed 會話金鑰建立 派生失敗 0x5C Configuration data usage failed 配置資料使用失敗 0x5D Deauthentication failed 取消認證失敗 0x70 Upload download not accepted 上傳下載不被接受 0x71 Transfer data suspended 傳輸資料暫停 0x72 General programming failure 一般程式設計失敗 0x73 Wrong block sequence number 錯誤的區塊序號 0x78 Request correctly received response pending 請求已正確接收，回應待處理 0x7E Subfunction not supported in active session 當前會話中不支援子功能 0x7F Service not supported in active session 當前會話中不支援服務 0x81 RPM too high 轉速太高 0x82 RPM too low 轉速太低 0x83 Engine is running 引擎正在運轉 0x84 Engine is not running 引擎未運轉 0x85 Engine run time too low 引擎運轉時間太短 0x86 Temperature too high 溫度過高 0x87 Temperature too low 溫度太低 0x88 Vehicle speed too high 車速太高 0x89 Vehicle speed too low 車速太低 0x8A Throttlepedal too high 油門 踏板太高 0x8B Throttlepedal too low 油門 踏板太低 0x8C Transmission range not in neutral 傳輸範圍不在空檔 0x8D Transmission range not in gear 未掛檔的傳動範圍 0x8F Brake switch not closed 煞車開關未閉合 0x90 Shifter lever not in park 變速桿不在停車位置 0x91 Torque converter clutch locked 變矩器離合器鎖止 0x92 Voltage too high 電壓過高 0x93 Voltage too low 電壓太低 0x94 Resource temporary unavailable 資源暫時無法使用 相關條目 車上診斷系統，廣義的車上診斷服務 OBDII PID，類似功能的美國標準 參考資料 外部連結 Unified Diagnostic Services ISO 14229 poster by softingcom Category 汽車工程技術 Category 嵌入式系統 CategoryCAN bus