UDS介紹
UDS(Unified Diagnostic Services,統(tǒng)一的診斷服務(wù))診斷協(xié)議是ISO 15765 和ISO 14229 定義的一種汽車通用診斷協(xié)議,位于OSI模型中的應(yīng)用層,它可在不同的汽車總線(例如CAN, LIN, Flexray, Ethernet 和 K-line)上實(shí)現(xiàn)。UDS協(xié)議的應(yīng)用層定義是ISO 14229-1,目前大部分汽車廠商均采用UDS on CAN的診斷協(xié)議。
UDS本質(zhì)上是一系列的服務(wù),共包含6大類26種。每種服務(wù)都有自己獨(dú)立的ID,即SID。
- SID:Service Identifier,診斷服務(wù)ID。UDS本質(zhì)上是一種定向的通信,是一種交互協(xié)議(Request/Response),即診斷方給ECU發(fā)送指定的請(qǐng)求數(shù)據(jù)(Request),這條數(shù)據(jù)中需要包含SID。
- 如果是肯定的響應(yīng)(Positive Response),回復(fù)
[SID+0x40],如請(qǐng)求10,響應(yīng)50;請(qǐng)求22,響應(yīng)62。 - 如果是否定的響應(yīng)(Negative Response),回復(fù)7F+SID+NRC,回復(fù)的是一個(gè)聲明。
肯定響應(yīng)和否定響應(yīng)的形式一定要熟記。
常用服務(wù)介紹
UDS的26種服務(wù)中,有7種很重要。它們分別是:
- $10 Diagnostic Session Control(診斷會(huì)話),
- $14 Clear Diagnostic Information(清除診斷信息),
- $19 Read DTC Information,
- $22 Read Data By Identifier(通過ID讀數(shù)據(jù)),
- $27 Security Access(安全訪問),
- $2E Write Data By Identifier(通過ID寫數(shù)據(jù)),
- $3E Tester Present(待機(jī)握手)。

下面對(duì)這7個(gè)服務(wù)進(jìn)行解讀。
$10診斷會(huì)話
$10包含3個(gè)子功能,
- 01 Default,
- 02 Programming,
- 03 Extended,
ECU上電時(shí),進(jìn)入的是默認(rèn)會(huì)話(Default)。如果您進(jìn)入了一個(gè)非默認(rèn)會(huì)話的狀態(tài),一個(gè)定時(shí)器會(huì)運(yùn)轉(zhuǎn),如果一段時(shí)間內(nèi)沒有請(qǐng)求,那么到時(shí)間后,診斷退回到默認(rèn)會(huì)話01。當(dāng)然,我們有一個(gè)$3E的服務(wù),可以使診斷保持在非默認(rèn)的狀態(tài)。
報(bào)文包含4種類型,即
- SID,
- SID+SF(Sub-function),
- SID+DID(Data Identifier)(讀寫用),
- SID+SF+DID。
NRC:Negative Response Code(否定響應(yīng)碼)。如果ECU拒絕了一個(gè)請(qǐng)求,它會(huì)回應(yīng)一個(gè)NRC。不同的NRC有不同的含義。

例子:以CAN總線網(wǎng)絡(luò)舉例。
八個(gè)數(shù)據(jù)字節(jié),第一字節(jié)被網(wǎng)絡(luò)層占用。
- 請(qǐng)求(Request):
02 10 02 xx xx xx xx xx
02中的0代表網(wǎng)絡(luò)層單幀SF,2代表 數(shù)據(jù)域有2個(gè)字節(jié);10是SID,02是子功能。
- 肯定響應(yīng):
02 50 02 xx xx xx xx xx
02同上,10+40表示對(duì)SID的肯定回復(fù),02是子功能。
- 否定響應(yīng):
03 7F 10 22 xx xx xx xx;
03同上,7F表示否定響應(yīng),10是SID,22是NRC。
$3E待機(jī)握手
$3E服務(wù)用于向服務(wù)器指示診斷儀仍然連接在網(wǎng)絡(luò)上,之前已經(jīng)激活的診斷服務(wù)功能可以仍然保持激活狀態(tài)。
例子:
02 3E 80 00 00 00 00 00,發(fā)送一個(gè)3E服務(wù)的報(bào)文,保持非默認(rèn)會(huì)話狀態(tài)。80表示無需回復(fù)。
$27安全訪問

27服務(wù),加上一個(gè)子服務(wù),再加上一個(gè)鑰匙,這樣的服務(wù)請(qǐng)求可以進(jìn)行解鎖。
比如下面的例子,2n-1是某個(gè)子服務(wù),通過首輪種子的請(qǐng)求,首輪ECU會(huì)返回67+01+AA+BB+CC+DD,AA~DD就是種子了。之后第二輪,診斷端會(huì)利用種子進(jìn)行運(yùn)算(利用整車廠的算法),生成k1(不一定是1個(gè)字節(jié)),那么發(fā)送請(qǐng)求,27+02+[k1]。ECU同樣也會(huì)通過種子算出k2。當(dāng)k1和k2匹配時(shí),解鎖(Unlocked)成功。
- 例子:
Rx: 02 27 05 00 00 00 00 00 安全訪問,05子功能
Tx: 07 67 05 08 27 11 F0 77 肯定響應(yīng),回復(fù)了對(duì)應(yīng)安全級(jí)別的種子
Rx: 06 27 06 FF FF FF FF 00 發(fā)送密鑰,4個(gè)FF。注意06是與05成對(duì)使用的。
Tx: 03 7F 27 78 00 00 00 00 否定響應(yīng),7F+27+NRC
Tx: 02 67 06 00 00 00 00 00 肯定響應(yīng),通過安全校驗(yàn)
$22讀數(shù)據(jù)
$22讀數(shù)據(jù),
Request(請(qǐng)求):
22+DID(Data Identifier,通常是兩個(gè)字節(jié))
Response(響應(yīng)):
62+DID+Data
DID有一部分已經(jīng)被ISO 14229-1規(guī)定了。比如0xF186就是當(dāng)前診斷會(huì)話數(shù)據(jù)標(biāo)識(shí)符,0xF187就是車廠備件號(hào)數(shù)據(jù)標(biāo)識(shí)符,0xF188就是車廠ECU軟件號(hào)碼數(shù)據(jù)ID,0xF189就是車廠ECU軟件版本號(hào)數(shù)據(jù)標(biāo)識(shí)符。
$2E寫數(shù)據(jù)
$22寫數(shù)據(jù),
Request(請(qǐng)求):
2E+DID+Data
Response(響應(yīng)):
6E+DID
注意,比如0xF186這個(gè)DID不支持直接寫入數(shù)據(jù),需要用$10來進(jìn)行會(huì)話轉(zhuǎn)換。也就是說,對(duì)于寫數(shù)據(jù)的請(qǐng)求,一般來說需要在一個(gè)非默認(rèn)會(huì)話,或解鎖的狀態(tài)下才能進(jìn)行。
$19 讀DTC
DTC(diagnostic trouble code):如果系統(tǒng)檢測(cè)到了一個(gè)錯(cuò)誤,它將其存儲(chǔ)為DTC。DTC可表現(xiàn)為:一個(gè)顯而易見的故障:通訊信號(hào)的丟失(不會(huì)使故障燈亮起);排放相關(guān)的故障;安全相關(guān)的錯(cuò)誤等。DTC可以揭示錯(cuò)誤的位置和錯(cuò)誤類型。通常DTC占用3個(gè)字節(jié),OBD II占用兩個(gè)字節(jié)。
故障碼包括四個(gè)大類,分別是PCBU,P是powertrain動(dòng)力系統(tǒng),C是Chassis底盤,B是Body車身,U是network通信系統(tǒng)。一個(gè)DTC信息占用4個(gè)字節(jié)。最后一個(gè)字節(jié)是DTC的狀態(tài)。前兩個(gè)字節(jié)是我們熟知的類似P0047的故障碼。
| DTCHighByte | DTCMiddleByte | DTCLowByte | DTCStatus |
|---|---|---|---|
| Byte 1 | Byte 2 | Byte 3 | Byte 4 |
$19 擁有28個(gè)子服務(wù)(Sub-Function)。常用的子服務(wù)有02(通過DTC狀態(tài)掩碼讀取DTC),04(讀取快照信息),06(讀取擴(kuò)展信息),0A(讀ECU支持的所有DTC數(shù)據(jù))。
$14清除DTC
清除(復(fù)位)DTC格式,它可以改變DTC的狀態(tài)。3個(gè)FF代表清除所有DTC。
Request:14+FF+FF+FF;
Response:54 。
診斷報(bào)文解析
UDS 的診斷數(shù)據(jù)的發(fā)送與接收都是基于CAN,所以每個(gè)數(shù)據(jù)流都包含基本的CAN Message 的架構(gòu)
CAN Message =CAN ID + CAN DATA
根據(jù)上篇UDS文章的敘述,每一個(gè)PDU 包含控制信息PCI,數(shù)據(jù)信息Data.

網(wǎng)絡(luò)層 PDU(協(xié)議數(shù)據(jù)單元)PCI(協(xié)議控制信息)格式:具體如下圖所示:
| 幀類型 | bit7-4 | bit3-0 | Byte 2 | Byte 3 |
|---|---|---|---|---|
| 單幀 | PCItype=0 | SF_DL | N/A | N/A |
| 首幀 | PCItype=1 | FF_DL | FF_DL | N/A |
| 連續(xù)幀 | PCItype=2 | SN | N/A | N/A |
| 流控幀 | PCItype=3 | FS | BS | ST_min |

綜上所述,N_PDU =N_PCI+N_DATA, N_PCI的值主要集中的前三個(gè)字節(jié),N_DATA值主要集中在后面7位字節(jié)。其中,
-
SF_DL代表單幀中數(shù)據(jù)字節(jié)數(shù)(取值0-7), -
FF_DL代表 連續(xù)幀中的數(shù)據(jù)字節(jié)數(shù)(12bit可表四8~4095), -
SN代表此幀為連續(xù)幀中的第幾幀,(0、1、2...E、F、0、1...) -
FS流控制幀,有三種狀態(tài):繼續(xù)發(fā)送0、保持等待1、數(shù)據(jù)溢出2 -
BS規(guī)定發(fā)送端允許持續(xù)傳輸連續(xù)幀數(shù)目的最大值(0~255), -
STmin限定連續(xù)幀相互之間所允許的最小時(shí)間間隔。
先面用連個(gè)例子進(jìn)行說明,請(qǐng)參考!
例子 1--- 單幀的數(shù)據(jù)傳輸與接收
[圖片上傳失敗...(image-b66bab-1538824826939)]
數(shù)據(jù)發(fā)送: 02 27 09
數(shù)據(jù)反饋: 03 7F 27 7E ---==否定的響應(yīng)==(Negative Response),回復(fù)==7F+SID+NRC==,回復(fù)的是一個(gè)聲明
數(shù)據(jù)發(fā)送: 02 10 40
數(shù)據(jù)反饋: 06 50 40 00 32 01 F4 ---==肯定的響應(yīng)==(Positive Response),回復(fù)[==SID+0x40==],就是請(qǐng)求10,響應(yīng)40;回復(fù)的是一組數(shù)據(jù)
由于這個(gè)數(shù)據(jù)發(fā)送與接收都是單幀傳輸,所以第一個(gè)數(shù)據(jù)的高四位均為0,四個(gè)數(shù)據(jù)流中的第一個(gè)字節(jié)的低四位,02,03,02,06代表的為此幀數(shù)據(jù)含有幾個(gè)字節(jié),多余的數(shù)據(jù)位都用 00或者AA行填充。
例子2 --- 多幀的數(shù)據(jù)接收與傳輸
[圖片上傳失敗...(image-b5e84b-1538824826939)]
數(shù)據(jù)發(fā)送:
- 06 19 04 00 01 00 00 00
數(shù)據(jù)反饋:
- 10 1E 59 04 00 01 00 27
- 30 00 00 00 00 00 00 00
- 21 00 0B FF FF FF FF FF
- 22 FF FF FF FF FF FF FF
- 23 FF FF FF FF FF FF FF
- 24 FF FF FF AA AA AA AA
數(shù)據(jù)發(fā)送為單幀,所以06代表發(fā)送的數(shù)據(jù)中含有6個(gè)字節(jié),
回復(fù)為Positive Response,為連續(xù)幀。
- 10中的1代表連續(xù)幀的首幀,==01E代表此連續(xù)幀含有30個(gè)字節(jié)==,
- 30代表此連續(xù)幀的流控制幀,
- 21,22,23,24代表連續(xù)幀中的第幾幀,21代表第一幀,22代表第二幀,依此類推,其中AA為填充位。
參考資料:
作者:智車科技
鏈接:http://www.itdecent.cn/p/b5805e734ed6
來源:簡(jiǎn)書
簡(jiǎn)書著作權(quán)歸作者所有,任何形式的轉(zhuǎn)載都請(qǐng)聯(lián)系作者獲得授權(quán)并注明出處。