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為填充位。
參考資料: