UDS 診斷教程(一)

UDS 由 ISO-14229系列標準定義,ISO 14229-1 定義了診斷服務,不涉及網(wǎng)絡及實
現(xiàn),只有應用層的內(nèi)容。而 ISO 14229-3則定義了 UDS 在 CAN總線上的實現(xiàn)。
診斷通信的過程從用戶角度來看非常容易理解,診斷儀發(fā)送診斷請求(request),
ECU給出診斷響應(response),而 UDS 就是為不同的診斷功能的 request 和
response定義了統(tǒng)一的內(nèi)容和格式。
最近關(guān)于 UDS 的一系列專欄文章只關(guān)注應用層的診斷服務,忽略下層的通信機制。
Diagnostic request? 的格式: :
Diagnostic request 的格式可以分為兩類:一類是擁有 sub-function 的,另一類是沒
有 sub-function的,如下面兩張圖所示。Service ID(以下簡稱 SID)的長度固定為 1
個字節(jié),代表了這條診斷命令執(zhí)行的什么功能。sub-function 的長度也是 1 個字節(jié),
它通常表示對這個診斷服務的具體操作,比如是啟動、停止還是查詢這個診斷服務。
而后面的 parameter則根據(jù)各個診斷服務的不同具有不同的內(nèi)容,長度和格式并沒
有統(tǒng)一規(guī)格,它用于限定診斷服務執(zhí)行的條件,比如某個診斷服務執(zhí)行的時間等。
parameter的一個重要應用是作為標識符,標識診斷請求要讀出的數(shù)據(jù)內(nèi)容,我會
在后續(xù)的文章里詳細講述各個診斷服務的應用。
擁有 sub-function 的診斷請求
無 sub-function 的診斷請求
有一點要補充的是,其實 sub-function 嚴格來說是 7個 bit,而不是 1個 byte,因為
它的最高位 bit 被用于抑制正響應(suppress positive response,SPR),如果這個 bit
被置 1,則 ECU不會給出正響應(positive response); 如果這個 bit 被置 0,則
ECU會給出正響應。這樣做的目的是可以告訴 ECU不要發(fā)不必要的 response,從
而節(jié)約通信資源。
Diagnostic response? 的格式: :
Diagnostic response分為 positive和 negative 兩類。positive response 意味著診斷儀發(fā)
過來的診斷請求被執(zhí)行了,而 negative response則意味著 ECU因為某種原因無法
執(zhí)行診斷儀發(fā)過來的診斷請求,而無法執(zhí)行的原因則存在于 negative response的報
文中。

positive response的格式如上圖所示,也基本上是由三部分組成,其中的 response
SID這個字節(jié)作為診斷請求的 echo,它等于 SID + 0X40。后面的兩個部分則視具
體的診斷服務而定。

negative response的格式固定為 3個字節(jié),第一個字節(jié)為 0x7F,第二個字節(jié)是被拒
絕掉的 SID,第三個字節(jié)是這個診斷服務無法被執(zhí)行的原因。下面這張圖列舉了部
分原因代碼,比如,如果 ECU給出 7F 22 13 這個 negative response,則說明 22這
個服務因為診斷請求數(shù)據(jù)長度不對的原因無法執(zhí)行。

總結(jié):診斷通信的過程就是診斷儀和 ECU交換數(shù)據(jù),前者發(fā)的是 request,后者發(fā)
的是 response,而 UDS 最重要的作用就是定義了這些 request 和 response的格式和
內(nèi)容。本文對 request 和 response進行了簡要介紹,在后面描述各種診斷服務的文
章中我會通過更多的示例來說明這兩個基本概念。