UDS診斷入門
來自專欄汽車CAN匯流排
UDS(Unified Diagnostic Services,統一的診斷服務)診斷協議是ISO 15765 和ISO 14229 定義的一種汽車通用診斷協議,位於OSI模型中的應用層,它可在不同的汽車匯流排(例如CAN, LIN, Flexray, Internet 和K-line)上實現,其中關於CAN匯流排UDS協議的定義是ISO 14229-3,關於LIN 匯流排UDS協議的定義是2015 年發布的ISO 14229-7,目前大部分汽車廠商均採用UDS 診斷協議。
UDS本質上是一系列的服務,共包含6大類26種。每種服務都有自己獨立的ID,即SID。
SID:Service Identifier,診斷服務ID。UDS本質上是一種定向的通信,是一種交互協議(Request/Response),即診斷方給ECU發送指定的請求數據(Request),這條數據中需要包含SID。如果是肯定的響應(Positive Response),回復[SID+0x40],就是請求10,響應50;請求22,響應62,回復的是一組數據。如果是否定的響應(Negative Response),回復7F+SID+NRC,回復的是一個聲明。
肯定響應和否定響應的形式一定要熟記。
UDS的26種服務中,有7種很重要。它們分別是:$10 Diagnostic Session Control(診斷會話),$14 Clear Diagnostic Information(清除診斷信息),$19 Read DTC Information,$22 Read Data By Identifier(通過ID讀數據),$27 Security Access(安全訪問),$2E Write Data By Identifier(通過ID寫數據),$3E Tester Present(待機握手)。下面對這7個服務進行解讀。
$10診斷會話
$10包含3個子功能,01 Default,02 Programming,03 Extended,ECU上電時,進入的是默認會話(Default)。如果您進入了一個非默認會話的狀態,一個定時器會運轉,如果一段時間內沒有請求,那麼到時間後,診斷退回到默認會話01。當然,我們有一個$3E的服務,可以使診斷保持在非默認的狀態。
UDS包含4種類型,即SID,SID+SF(Sub-function),SID+DID(Data Identifier)(讀寫用),SID+SF+DID。
NRC:Negative Response Code(否定響應碼)。如果ECU拒絕了一個請求,它會回應一個NRC。不同的NRC有不同的含義。
單詞:Consult(查閱) Session(會話) DTC (diagnostic trouble code)Handling(處理) Conditions(條件) restricted(受限的) Concept(概念)SA(source address 源地址) TA(目標地址)
例子:以CAN匯流排網路舉例。八個幀數據位元組,第一位元組是數據長度,
請求(Request):02 10 02 xx xx xx xx xx ; 02是後面有2個位元組,10是SID,02是子功能。
肯定響應:02 50 02 xx xx xx xx xx;02同上,10+40表示對SID的肯定回復,02是子功能。
否定響應:03 7F 10 22 xx xx xx xx;03同上,7F表否定響應,10是SID,22是NRC。
$3E待機握手
$3E服務用於向伺服器指示診斷儀仍然連接在網路上,之前已經激活的診斷服務功能可以仍然保持激活狀態。
$27安全訪問
$27安全訪問:ECU當中有很多數據,是整車廠獨有的,它不希望開放給所有客戶,它需要做一個保密的設定。我們在讀取一些特殊數據的時候,要先進行一個安全解鎖。ECU上電之後是一個鎖定的狀態(Locked),我們通過$27服務,加上一個子服務,再加上一個鑰匙,這樣的服務請求可以進行解鎖。比如下面的例子,2n-1是一個子服務,通過首輪種子的請求,首輪ECU會返回67+01+AA+BB+CC+DD,AA~DD就是種子了。之後第二輪,診斷端會利用種子進行運算(利用整車廠的演算法),生成k1(不一定是1個位元組),那麼發送請求,27+02+[k1]。ECU同樣也會通過種子算出k2。當k1和k2匹配時,解鎖(Unlocked)成功。
當然,$27安全訪問 服務的NRC(否定響應碼)是很多的。還記得剛才否定響應的格式嗎?7F+27+NRC。
$22讀數據
$22讀數據,Request(請求):22+DID(Data Identifier,通常是兩個位元組)
Response(響應):62+DID+Data
DID有一部分已經被ISO 14229-1規定了。比如0xF186就是Active Diagnostic Session Data Identifier(當前診斷會話數據標識符),0xF187就是Vehicle Manufacturer Spare Part Number Data Identifier(車廠備件號數據標識符),0xF188就是Vehicle Manufacturer ECU Software Number Data Identifier(車廠ECU軟體號碼數據ID),0xF1889就是Vehicle Manufacturer ECU Software Version Number Data Identifier。
$2E寫數據
$22寫數據,Request(請求):2E+DID+Data
Response(響應):6E+DID
注意,比如0xF186這個DID不支持直接寫入數據,需要用$10來進行會話轉換。也就是說,對於寫數據的請求,一般來說需要在一個非默認會話,和解鎖的狀態下才能進行。
$19 讀DTC
DTC(diagnostic trouble code):如果系統檢測到了一個錯誤,它將存儲為DTC。DTC可表現為:一個顯而易見的故障;通訊信號的丟失(不會使故障燈亮起);排放相關的故障;安全相關的錯誤等。DTC可以揭示錯誤的位置和錯誤類型。通常DTC佔用3個位元組,OBD II佔用兩個位元組。圖中FTB為Fault Type Byte。
$19擁有28個子服務(Sub-Function)。常用的子服務有02(通過DTC狀態掩碼讀取DTC),04(讀取快照信息),06(讀取擴展信息),0A(讀ECU支持的所有DTC數據)。
一個DTC除了它自己的3個位元組,還有一個位元組專門用於表達DTC的狀態。這個狀態位元組每個位的含義可以查詢ISO 14229-1。注意,並不是所有的DTC狀態都是支持的。下圖是Request/Response。括弧標識循環,可以讀出很多DTC。
$14清除DTC
清除(複位)DTC格式,它可以改變DTC的狀態。3個FF代表清除所有DTC。
Request:14+FF+FF+FF;
Response:54 。
我們剛才學完了7種重要的服務,SID。除此之外,在CAN匯流排中,Addressing information定址信息通過CAN幀ID體現出來。
通訊的模式分兩種,一種是物理定址(點對點),根據物理地址的不同進行訪問,但只能訪問單個ECU節點,Test為SA源地址,ECUX作為TA目標地址;對應的,另一種是功能定址(廣播),根據功能的不同進行訪問,它能訪問多個ECU節點。
每一個ECU都有2個CAN幀ID,分別對應收和發的物理定址。
以上只是一些粗淺的理解。對26種服務更詳細的解讀請拉到屏幕下方參考張老師的8篇文章。張老師也開通了微信公眾號,可以了解一下。
UDS應用的設備
在UDS 診斷產品中知名度最高,應用最廣泛的是德國Vector公司的CAN case 配合其CANoe 軟體,Vector 產品功能齊全,適合系統級汽車匯流排開發,被大部分汽車廠商採用。Vector 產品因不開放API,不能做二次開發且價格昂貴,不適用於硬體開發團隊和生產線的自動化測試。目前市面上有很多CAN 廠商(如Kvaser, ZLG 等)能提供低成本、體積小、驅動簡單、開放API 的設備,很適合進行二次開發。
雜記
變速器控制單元TCU和防抱死系統ABS是CAN車載網路上的兩大電子控制單元, 這2個ECU要通過CAN網路進行大量的信息交互。但是由於電磁干擾、串擾、靜電等外界干擾或電控單元本身控制策略引起的通信停止等原因, 2個控制單元之間可能會出現通信丟失的現象。控制系統需要將故障信息(例如通信丟失故障信息) 診斷出來, 以處理通信被破壞時出現丟失幀的故障現象, 並記錄為DTC (diagnostic trouble code)。
ECU的輸入信號主要有4種形式: ①模擬信號(水溫、油壓、蓄電池電壓等); ②數字信號(各種開關信號等); ③PWM信號(脈衝信號、頻率信號等); ④網路信號(CAN、LIN上傳輸的信號)。微控制器可以通過監測這些信號來判別輸入電路的工作狀況。輸出的信號往往用作控制電磁閥、指示燈、步進電機等, 大多數為數字信號。
學習資料:
1.統一診斷服務 (Unified diagnostic services , UDS) (一)
2.統一診斷服務 (Unified diagnostic services , UDS) (二)
3.統一診斷服務 (Unified diagnostic services , UDS) (三)
4.統一診斷服務 (Unified diagnostic services , UDS) (四)
5.統一診斷服務 (Unified diagnostic services , UDS) (五)
6.統一診斷服務 (Unified diagnostic services , UDS) (六)
7.統一診斷服務 (Unified diagnostic services , UDS) (七)
8.基於CAN匯流排實現的UDS診斷(DoCAN)
9.【圖文】UDS診斷服務_百度文庫
10.CAN診斷基礎-上部分_圖文_百度文庫
11.CAN診斷-下_已讀_圖文_百度文庫
12.ISO 14229+統一診斷服務
13.帳號登錄
14.ISO 15031-5-2015
推薦閱讀:
※汽車CAN匯流排基礎介紹
※如何理解ISO15765-4協議——一個OBD診斷協議
※為什麼CAN能取代RS485?
※基於CAN匯流排實現的UDS診斷(DoCAN)
TAG:CAN匯流排 |