統一診斷服務
統一診斷服務(英語:Unified Diagnostic Services,簡稱UDS)是車用電子的通訊協定,是電子控制器(ECU)中裝置診斷用的網絡傳輸協定,對應的標準是ISO 14229-1[1]。此標準是衍生自ISO 14230-3(KWP2000)以及目前已不使用的ISO 15765-3 (控制器區域網絡上的診斷通訊,DoCAN[2])。「統一診斷服務」中的「統一」是指此標準是國際性標準,不是特定公司的專用標準。目前所有一階供應商新生產的ECU都已支援此通訊協定,也已整合到其他標準中,例如AUTOSAR。現代汽車中的電子控制器控制了非常多的機能,包括燃料噴射裝置(EFI)、發動機控制器、傳動、防鎖死剎車系統(ABS)、門鎖、剎車、窗戶動作等。
診斷工具可以連接車上所有支援統一診斷服務功能的電子控制器。車上常用的控制器區域網絡只用到OSI模型的第一層及第二層,而統一診斷服務整合了OSI模型的第五層及第七層。服務識別碼(Service ID、SID)及服務相關的參數都放在8個位元組的訊息框內。
現今的車輛有配合離線診斷的診斷介面,讓電腦或是診斷工具(作為測試裝置)可以連接到汽車上的通訊系統。因此可以傳送統一診斷服務的請求到控制器,控制器必須回覆(可能是正面或是負面的回覆),這樣可以確認個別控制單元中的故障記憶體、更新控制單元的韌體、和硬件進行低階的互動(例如開啟或關閉特定的輸出)、或是進行特定的機能,目的是了瞭解電子控制器的環境或是操作條件,以診斷故障或是不希望出現的行為。
服務
編輯功能群 | 請求 SID | 回覆 SID | 服務 | 說明 |
---|---|---|---|---|
診斷及通訊管理 | 0x10 | 0x50 | 診斷會話控制 Diagnostic Session Control |
UDS會使用不同的會話(session),可以用診斷會話控制(Diagnostic Session Control)來切換。可用的服務會依照目前有效的會話而不同。在一開始,控制單元預設是在「預設會話」(Default Session),有定義其他的會話,需要實現的會話會依照裝置的種類而不同。
此外,也有一些保留的會話識別符,為了汽車生產者及供應商的特殊需求而設計。 |
0x11 | 0x51 | ECU重設 ECU Reset |
ECU重設的服務是要重新啟動ECU。依照控制單元硬件以及實現方式的不同,有以下幾種不同的重設:
也有一些汽車生產者及供應商定義的特殊數值。 | |
0x27 | 0x67 | 安全性存取 Security Access |
可以用安全性檢查(Security check)來啟動大部份的安全關鍵性服務(security-critical 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的串接。
請求資料可以依以下的原則規劃組態:
| |
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 | 需要安全的資料傳輸(SID=0x84) |
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 creation/derivation 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 | Throttle/pedal too high | 油門/踏板太高 |
0x8B | Throttle/pedal 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 | 資源暫時無法使用 |
相關條目
編輯- 車上診斷系統,廣義的車上診斷服務
- OBD-II PID,類似功能的美國標準
參考資料
編輯外部連結
編輯- Unified Diagnostic Services - ISO 14229 (頁面存檔備份,存於互聯網檔案館) (poster by softing.com)