統一診斷服務

統一診斷服務(英語: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),有定義其他的會話,需要實現的會話會依照裝置的種類而不同。
  • 「程式會話」(Programming Session)可以用來上載韌體到裝置,並更新裝置的韌體。
  • 「擴充診斷會話」(Extended Diagnostic Session)可解鎖特定的診斷功能,例如調整感測器等。
  • 「安全系統診斷會話」(Safety system diagnostic 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的串接。

請求資料可以依以下的原則規劃組態:

  • 原始資料識別碼、位置、長度(依位元組表示)、子功能位元組: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 需要安全的資料傳輸(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 資源暫時無法使用

相關條目

參考資料

  1. ^ ISO 14229. [2020-06-12]. (原始內容存檔於2020-03-03). 
  2. ^ ISO 15765-3:2004. [2020-06-12]. (原始內容存檔於2020-06-12). 

外部連結