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ā)送指定的請求數(shù)據(jù)(Request)仆邓,這條數(shù)據(jù)中需要包含SID鲜滩。
- 如果是肯定的響應(yīng)(Positive Response),回復(fù)
[SID+0x40]
节值,如請求10徙硅,響應(yīng)50;請求22搞疗,響應(yīng)62嗓蘑。 - 如果是否定的響應(yīng)(Negative Response)须肆,回復(fù)7F+SID+NRC,回復(fù)的是一個聲明桩皿。
肯定響應(yīng)和否定響應(yīng)的形式一定要熟記豌汇。
常用服務(wù)介紹
UDS的26種服務(wù)中,有7種很重要泄隔。它們分別是:
- $10 Diagnostic Session Control(診斷會話)拒贱,
- $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ī)握手)斜做。
下面對這7個服務(wù)進(jìn)行解讀。
$10診斷會話
$10包含3個子功能湾揽,
- 01 Default瓤逼,
- 02 Programming,
- 03 Extended库物,
ECU上電時霸旗,進(jìn)入的是默認(rèn)會話(Default)。如果您進(jìn)入了一個非默認(rèn)會話的狀態(tài)艳狐,一個定時器會運(yùn)轉(zhuǎn),如果一段時間內(nèi)沒有請求皿桑,那么到時間后毫目,診斷退回到默認(rèn)會話01。當(dāng)然诲侮,我們有一個$3E的服務(wù)镀虐,可以使診斷保持在非默認(rèn)的狀態(tài)。
報文包含4種類型沟绪,即
- SID刮便,
- SID+SF(Sub-function),
- SID+DID(Data Identifier)(讀寫用)绽慈,
- SID+SF+DID恨旱。
NRC:Negative Response Code(否定響應(yīng)碼)。如果ECU拒絕了一個請求坝疼,它會回應(yīng)一個NRC搜贤。不同的NRC有不同的含義。
例子:以CAN總線網(wǎng)絡(luò)舉例钝凶。
八個數(shù)據(jù)字節(jié)仪芒,第一字節(jié)被網(wǎng)絡(luò)層占用。
- 請求(Request):
02 10 02 xx xx xx xx xx
02中的0代表網(wǎng)絡(luò)層單幀SF,2代表 數(shù)據(jù)域有2個字節(jié)掂名;10是SID据沈,02是子功能。
- 肯定響應(yīng):
02 50 02 xx xx xx xx xx
02同上饺蔑,10+40表示對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ā)送一個3E服務(wù)的報文,保持非默認(rèn)會話狀態(tài)封救。80表示無需回復(fù)拇涤。
$27安全訪問
27服務(wù),加上一個子服務(wù)誉结,再加上一個鑰匙鹅士,這樣的服務(wù)請求可以進(jìn)行解鎖。
比如下面的例子惩坑,2n-1是某個子服務(wù)掉盅,通過首輪種子的請求,首輪ECU會返回67+01+AA+BB+CC+DD以舒,AA~DD就是種子了趾痘。之后第二輪,診斷端會利用種子進(jìn)行運(yùn)算(利用整車廠的算法)蔓钟,生成k1(不一定是1個字節(jié))永票,那么發(fā)送請求,27+02+[k1]滥沫。ECU同樣也會通過種子算出k2侣集。當(dāng)k1和k2匹配時,解鎖(Unlocked)成功兰绣。
- 例子:
Rx: 02 27 05 00 00 00 00 00 安全訪問肚吏,05子功能
Tx: 07 67 05 08 27 11 F0 77 肯定響應(yīng),回復(fù)了對應(yīng)安全級別的種子
Rx: 06 27 06 FF FF FF FF 00 發(fā)送密鑰狭魂,4個FF罚攀。注意06是與05成對使用的党觅。
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(請求):
22+DID(Data Identifier,通常是兩個字節(jié))
Response(響應(yīng)):
62+DID+Data
DID有一部分已經(jīng)被ISO 14229-1規(guī)定了炫掐。比如0xF186就是當(dāng)前診斷會話數(shù)據(jù)標(biāo)識符魁莉,0xF187就是車廠備件號數(shù)據(jù)標(biāo)識符,0xF188就是車廠ECU軟件號碼數(shù)據(jù)ID募胃,0xF189就是車廠ECU軟件版本號數(shù)據(jù)標(biāo)識符旗唁。
$2E寫數(shù)據(jù)
$22寫數(shù)據(jù),
Request(請求):
2E+DID+Data
Response(響應(yīng)):
6E+DID
注意痹束,比如0xF186這個DID不支持直接寫入數(shù)據(jù)检疫,需要用$10來進(jìn)行會話轉(zhuǎn)換。也就是說祷嘶,對于寫數(shù)據(jù)的請求屎媳,一般來說需要在一個非默認(rèn)會話,或解鎖的狀態(tài)下才能進(jìn)行论巍。
$19 讀DTC
DTC(diagnostic trouble code):如果系統(tǒng)檢測到了一個錯誤烛谊,它將其存儲為DTC。DTC可表現(xiàn)為:一個顯而易見的故障:通訊信號的丟失(不會使故障燈亮起)嘉汰;排放相關(guān)的故障丹禀;安全相關(guān)的錯誤等。DTC可以揭示錯誤的位置和錯誤類型鞋怀。通常DTC占用3個字節(jié)双泪,OBD II占用兩個字節(jié)。
故障碼包括四個大類接箫,分別是PCBU攒读,P是powertrain動力系統(tǒng)朵诫,C是Chassis底盤辛友,B是Body車身,U是network通信系統(tǒng)剪返。一個DTC信息占用4個字節(jié)废累。最后一個字節(jié)是DTC的狀態(tài)。前兩個字節(jié)是我們熟知的類似P0047的故障碼脱盲。
DTCHighByte | DTCMiddleByte | DTCLowByte | DTCStatus |
---|---|---|---|
Byte 1 | Byte 2 | Byte 3 | Byte 4 |
$19 擁有28個子服務(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個FF代表清除所有DTC毅待。
Request:14+FF+FF+FF;
Response:54 归榕。
診斷報文解析
UDS 的診斷數(shù)據(jù)的發(fā)送與接收都是基于CAN尸红,所以每個數(shù)據(jù)流都包含基本的CAN Message 的架構(gòu)
CAN Message =CAN ID + CAN DATA
根據(jù)上篇UDS文章的敘述,每一個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
的值主要集中的前三個字節(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ù)幀相互之間所允許的最小時間間隔愕秫。
先面用連個例子進(jìn)行說明,請參考焰络!
例子 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ù)的是一個聲明
數(shù)據(jù)發(fā)送: 02 10 40
數(shù)據(jù)反饋: 06 50 40 00 32 01 F4 ---==肯定的響應(yīng)==(Positive Response)闪彼,回復(fù)[==SID+0x40==]甜孤,就是請求10,響應(yīng)40畏腕;回復(fù)的是一組數(shù)據(jù)
由于這個數(shù)據(jù)發(fā)送與接收都是單幀傳輸缴川,所以第一個數(shù)據(jù)的高四位均為0,四個數(shù)據(jù)流中的第一個字節(jié)的低四位描馅,02把夸,03,02铭污,06代表的為此幀數(shù)據(jù)含有幾個字節(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個字節(jié)岂膳,
回復(fù)為Positive Response各拷,為連續(xù)幀。
- 10中的1代表連續(xù)幀的首幀闷营,==01E代表此連續(xù)幀含有30個字節(jié)==烤黍,
- 30代表此連續(xù)幀的流控制幀,
- 21傻盟,22速蕊,23,24代表連續(xù)幀中的第幾幀娘赴,21代表第一幀规哲,22代表第二幀,依此類推诽表,其中AA為填充位唉锌。
參考資料:
作者:智車科技
鏈接:http://www.reibang.com/p/b5805e734ed6
來源:簡書
簡書著作權(quán)歸作者所有,任何形式的轉(zhuǎn)載都請聯(lián)系作者獲得授權(quán)并注明出處竿奏。