診斷請求格式
UDS的服務包含6大類,共26種。每種服務都有自己獨立SID。 SID:Service Identifier,診斷服務ID。
- 按不同服務類型,診斷請求格式有三種:
格式1:[SID] + [Sub-Function]
格式2:[SID] + [DID]
格式3:[SID] + [Sub-Function] + [DID]
- 對應的肯定響應(Positive Response)類型:
格式1:[SID + 40] + [Sub-Function]
格式2:[SID + 40] + [DID]
格式3:[SID + 40] + [Sub-Function] + [DID]
- 否定響應(Negative Response):[0x7F] + [SID] +[NRC]
否定響應類型有一種,NRC(Negative Response Code)為否定響應碼。
舉例:診斷儀Tester給ECU發送指定的請求資料(Request),這條資料中需要包含SID,且SID處于該應用層資料的第一個位元組。如果是肯定的響應,首位元組回複[SID+0x40],舉例子就是請求0x10,響應0x50;請求0x22,響應0x62。如果是否定的響應,首位元組回複0x7F,第二位元組回複剛才詢問的SID。比如Tester請求0x10服務,我想進入程式設計模式,ECU給出否定響應,首位元組0x7F,第二位元組回複0x10,代表我否定你的0x10服務請求,第三位元組是NRC(否定響應碼),代表我否定你的依據。
UDS的尋址模式
CAN總線中Addressing information尋址資訊會在CAN的幀ID中展現出來,例外是遠端尋址,但不常使用。
所謂的尋址資訊包含了源位址和目标位址,即這條資訊是由誰發給誰的,類似于收件人和發件人。當ECU回信給Tester時,ECU就變成源位址了。源位址和目标位址在UDS中并不是一成不變的。
UDS的尋址模式分兩種,一種是實體尋址(點對點、一對一),根據實體位址的不同進行通路,但隻能通路單個ECU節點,Tester為源位址,ECU作為目标位址;對應的,另一種是功能尋址(廣播、一對多),根據功能的不同進行通路,它能通路多個ECU節點,對于标準幀來說,通常是0x7DF。
每一個ECU都有2個CAN的診斷幀ID,分别對應實體尋址的收與發。通常由主機廠确定不同的ECU這兩個特定的診斷ID。比如0x701對應接收Tester的消息,0x709對應發給Tester的消息。
UDS的26種服務
UDS的服務分為6大類,常用的服務是綠色背景色的15種。
10服務分析
- 10服務實作了不同診斷會話之間的切換,不同的診斷會話包含不同的診斷功能。
- 會話類型分六種
- 操作步驟
1、請求:該服務SID是0x10,發送幀固定為2個byte,第一個byte是SID,第二個byte的低7bit是sub-function,用于訓示ECU将進入的session。例如:發送幀10 03,ECU響應之後從預設會話進入外部擴充會話。
2、響應:ECU響應中将請求的SID+0x40作為回複的第一個位元組。這個診斷服務的response分為三部分,第一部分是0x50,作為SID的回複;第二部分是進入的session,作為sub-function的回複;第三部分是4個位元組,前兩個位元組代表P2Server_max, 即ECU在應用層上對診斷指令的響應時間,後兩個位元組代表P2*Server_max,(這兩個時間參數是ISO 15765-2定義,在軟體代碼裡寫死的,隻是請求服務時展現出來的資料)。
例如:ECU正常響應,即請求成功。如下圖
請求幀:02 代表請求的資料位元組數10 01,兩個位元組;
回複幀:06代表ECU響應的資料位元組數 ;00 32 01 F4代表上述兩個時間參數。
請求失敗-沒有10 05會話,ECU響應如下:
NRC12: Sub-Function 沒有05子服務