UDS診斷服務第四篇,介紹診斷服務的最後兩單元:上傳下載單元和Routine單元。其中上傳下載單元包含圖1所示的診斷服務,用於傳輸較大的資料,通常用於刷寫程式。Routine單元僅包含31服務,通常用於實現使用者的自定義功能,比如CRC校驗。

UDS診斷服務—上傳下載單元、Routine單元

圖1 上傳下載單元

上傳下載單元

該單元包含0x34、0x35、0x36、0x37、0x38五個診斷服務,分別從上至下對應圖1中的解釋,下面主要介紹前四個診斷服務,以及之間的相互關聯。

RequestDownload 服務(0x34)

該服務用於請求服務端啟動下載資料,客戶端請求資料的格式如圖2所示,其中:

Byte1:為服務號0x34;

Byte2:為DataFormatIdentifier,其中高四位用於表示compressionMethod,表示資料壓縮的方法,第四位表示encrypting Method資料加密的方法,兩者都為0x00時表示不使用資料加密和資料壓縮,如果不為0x00,是需要廠商自定義;

Byte3:用於表示地址和資料長度佔的位元組數。低四位表示地址佔的位元組數,高四位表示資料長度佔的位元組數;

N:用於表示起始地址,N的大小由Byte2的低四位決定;

M:用於表示資料長度,M的大小由Byte2的高四位決定;

UDS診斷服務—上傳下載單元、Routine單元

圖2 0x34服務請求資料格式

服務端正響應的資料格式如圖3所示,其中:

Byte1:服務正響應,該位為0x74;

Byte2:其中高四位表示最大的資料傳輸量該值佔的位元組數,即為N;

N:表示接下來資料傳輸一次傳輸的最大值,即0x36服務一次傳輸的最大資料量;

UDS診斷服務—上傳下載單元、Routine單元

圖3 0x34服務正響應資料格式

該服務的訊息示例如圖4所示。

UDS診斷服務—上傳下載單元、Routine單元

圖4 0x34示例

RequestUpload服務(0x35)

該服務用於客戶端請求服務端上傳資料,其資料格式與0x34一樣。簡單再重複一下。其客戶端請求資料格式如圖5所示。

Byte0、Byte1、Byte2、Byte3、N、M與0x34請求資料格式中的含義是一樣的,不過N、M用於指定的上傳資料的起始地址和上傳資料的長度。

UDS診斷服務—上傳下載單元、Routine單元

圖5 0x35服務請求資料格式

服務端正響應資料格式如圖6所示,與0x34的正響應是一樣的。

Byte1:服務正響應,該位為0x75;

Byte2:其中高四位表示最大的資料傳輸量該值佔的位元組數,即為N;

Byte3:表示接下來資料傳輸一次傳輸的最大值,即0x36服務一次傳輸的最大資料量;

UDS診斷服務—上傳下載單元、Routine單元

圖6 0x35正響應資料格式

TransferData 服務(0x36)

該服務用於資料傳輸,包括客戶端向服務端下載資料、服務端向客戶端上傳資料。資料數傳的方向由上一個服務來定,如果上一個服務為0x34,則實現資料下載,如果為0x35,則實現資料上傳。

客戶端傳送0x36的資料請求傳輸格式如圖7所示,其中:

Byte1:表示服務號0x36;

Byte2:用於記錄傳輸的資料塊次數,也就是說36的呼叫次數。該值的初始值為0x01,當達到0xFF的時候,如果繼續增加,則復位至0x00,然後繼續依次增加;

N:對於下載來說,用於存放需要下載至服務端的資料。對於上傳來說,可以用於存放必要的引數,這個由廠商自定義。通常該位不填;

UDS診斷服務—上傳下載單元、Routine單元

圖7 0x36請求資料格式

服務端正響應客戶端請求的資料格式如圖8所示,其中:

Byte1:服務正響應,該位為0x76;

Byte2:該位用於表示傳輸的次數,即請求時Byte2的值;

Byte3:對於下載來說,該位需要傳輸的資料由廠商自定義,可以是checksum,通常不填。對於上傳而言,即響應服務端的上傳資料請求,用於存放上傳至客戶端的資料;

UDS診斷服務—上傳下載單元、Routine單元

圖8 0x36正響應資料格式

該服務的訊息示例如下圖9所示。

UDS診斷服務—上傳下載單元、Routine單元

圖9 0x36示例

RequestTransferExit服務(0x37)

該服務用於退出資料傳輸,其請求資料格式如圖10所示。

N:該位開放給廠商自定義,長度不定,通常不用。

UDS診斷服務—上傳下載單元、Routine單元

圖10 0x37請求資料格式

服務端正響應資料格式如圖11所示。

N:該位開放給廠商自定義,長度不定通常不用。

UDS診斷服務—上傳下載單元、Routine單元

圖11 0x37正響應資料格式

0x37服務的資料格式其實相對很簡單,正響應僅有服務號,其資料示例參見圖9。

Routine單元

RoutineControl服務 (0x31

該服務具有很大的靈活性,典型的用法就是用於CRC校驗、StayInboot等。客戶端透過執行例程控制服務來執行定義的步驟序列並獲得相關結果。通常用於控制輸出時,該服務用於較複雜的控制,而InputOutputControlByIdentifier用於相對簡單的輸出控制。

0x31服務有0x01、0x02、0x03三個子服務。其中0x01表示執行例程,0x02表示停止執行例程,0x03用於讀取例程執行的結果。

客戶端請求資料格式如圖12所示,其中routineControlOptionRecord用於存放例程所需要的引數,通常由廠商自定義。

UDS診斷服務—上傳下載單元、Routine單元

圖12 0x31請求資料格式

服務端正響應的資料格式如圖13所示。Byte4為可選項,由廠商自定義,給廠商提供一種支援外部測試裝置處理例程的機制。例程狀態記錄為可選項,通常用於服務端向客戶端提供額外的狀態資訊,例如例程的執行時間。

UDS診斷服務—上傳下載單元、Routine單元

圖13 0x31正響應資料格式

該服務的資料互動示例如圖14所示。

UDS診斷服務—上傳下載單元、Routine單元

圖14 0x31示例

下面是作者的公眾號,如果覺得文章有幫助,可以關注一下,謝謝。

UDS診斷服務—上傳下載單元、Routine單元