1、UDS(Unified Diagnosic Services 統一診斷服務)是ISO 15765&ISO 14229定義的一種可以在不太的汽車總線(CAN&LIN)上的應用層診斷協議
UDS應用層是ISO 14229-1
2、UDS本質上是一種服務,通過請求&響應對ECU進行測試、檢測、診斷
3、UDS位於應用層,不必關心提供差錯控制等功能的PCI部分
4、由於數據場較短(CAN為8Byte CAN FD為64Byte),故一條診斷命令超過數據場長度,則需要分包傳輸,即需要多幀傳輸
ISO 15765定義多幀傳輸的格式:
報文類型 CAN ID | CAN數據場
--------------------------------|--------------------------------Byte[0]-------------|--------------Byte[1]------------------
| [bit7~bit4] [bit3] [bit2~0] |
--------------------------------|----------------------------------------|----------------------------------------------------
單幀 CANID | 0000b SF_DL |數據
首幀 CANID | 0001b FF_DL | 數據
連續幀 CANID | 0010b SN |
流控幀 CANID | 0011b FS |BB STmin
無論是單幀還是多幀,均使用每一幀的0郝字節的高四位進行區別
0:單幀
1:首幀
2:連續幀
3:流控幀
單幀:
表示該幀的數據場有效字節數據<=8,不足的地方使用0xAA,0x55(增加跳變)
對於單幀而言,0號字節的低四位[SF_DL]表示DLC(數據長度控制),説明後面有多少位有效
發送方:
首幀:
FF_DL:則是代表該多幀的長度,
當長度信息發送完成後後面的字節發送部分數據
連續幀:
SN代表該連續幀為幀序號,即該連續發出的第幾幀(從1開始計數)
接收方:
流控幀:
Byte[0]前四位固定為3,後四位FS表示流狀態參數
FS:0,CTS表示繼續接受
1,WT表示等待,讓發送方停止,等待下一個流控幀的到來
2,OVFLW表示溢出,當接收方接收到首幀後,判斷FF-DL長度比接受放到緩衝區大時發送,隨後發送方停止發送
3,F:保留
Byte[1]為BS塊的大小,即接下來會發送多少幀,當BS為0時,塊大小不做限制
Byte[2]為STmin,規定了連續幀發送的最小時間間隔
5、NRC
服務以請求+響應格式構成,當涉及到否定響應時需要知道為什麼否定,故引入了否定響應(Negative Response Code)NRC
請求格式:
SID+SF,服務+子功能
例如:10 01
SID+DID(Data Identifier),服務+DID,用於讀寫
例如:22 F15A
SID_SF_DID,服務+子功能+DID,如例程服務
31 01 FF00
SID,僅服務號
響應:
肯定響應:(SID+0x40) +其它
Q:0x10 0x01
A:0x50 01
否定響應:7F +服務 +NRC
例如:
Q:10 01
R:7F 10 13
常見NRC:...
6、0x10服務