天天看點

UDS(十)應用層 34/36/37

Upload Download functional unit

從成本等角度考慮,汽車ECU中用于緩存診斷服務資料的buffer大小有限,是以當我們需要讀取或寫入超過buffer大小的資料時,就無法簡單地使用2E和22服務了,UDS據此定義了幾個将大塊資料寫入或讀出的服務,即資料下載下傳和上傳。

UDS的第六類診斷服務:存儲資料傳輸。該類型服務包含SID如下:

RequestDownload (0x34):請求下載下傳資料,診斷儀向ECU請求下載下傳資料

RequestUpload (0x35):請求上傳資料,診斷儀向ECU請求上傳資料

TransferData (0x36):資料傳輸,診斷儀向ECU傳資料(下載下傳),或者ECU向診斷儀傳資料(上傳)

RequestTransferExit (0x37):資料傳輸完成,請求退出

RequestFileTransfer (0x38):請求檔案傳輸,可以用于替代上傳下載下傳的服務

1. RequestDownload (0x34) service

該服務用于啟動下載下傳傳輸,作用是告知ECU準備接受資料,ECU則通過0x74 response告訴診斷儀自己是否允許傳輸,以及自己的接受能力是多大。

1.1 請求格式

UDS(十)應用層 34/36/37

由上圖可知,請求格式分為5部分

第一部分:請求SID(1byte):0x34

第二部分:dataFormatIdentifier(1byte):這裡面辨別了資料格式相關的資訊,比如資料是否有壓縮,是否有加密,用的什麼算法加密等,由主機廠與供應商約定好,用哪個bit來表示壓縮、加密等資訊。

第三部分:addressAndLengthFormatIdentifier(1byte):該參數是代表後續的兩個部分memoryAddress和memorySize所占的位元組長度。addressAndLengthFormatIdentifier的低4bit表示memoryAddress,高4bit表示memorySize。如:memoryAddress參數占用0xm個位元組,memorySize參數占用0xn個位元組,則addressAndLengthFormatIdentifier值為0xnm

第四部分:memoryAddress(m個byte):診斷儀向ECU請求下載下傳寫入資料的邏輯位址值。如:診斷儀請求ECU寫入資料的記憶體邏輯位址為0x12345678(memoryAddress占4個位元組),則memoryAddress值為0x12345678,對應addressAndLengthFormatIdentifier低4bit值為0x04.

第五部分:memorySize(n個位元組):診斷儀向ECU請求下載下傳寫入資料的位元組數。如:診斷儀寫入ECU資料的位元組數為0x01234567(memorySize占4位元組),則memorySize值為0x01234567,對應的addressAndLengthFormatIdentifier高4bit值為0x4。

1.2 響應格式

UDS(十)應用層 34/36/37

由上圖可知響應格式分為三個部分

第一部分:response SID (1byte): 0x74

第二部分:lengthFormatIdentifier(1byte):高4bit為maxNumberOfBlockLength有效位元組長度,低4bit保留為0.

第三分部:maxNumberOfBlockLength:位元組長度不定,表示0x36服務一次傳輸一個block的最大的位元組數。如:maxNumberOfBlockLength=0x202,則應用層36服務一次最多發送位元組數為0x202(位元組數:0x202 >= 36 (1byte)+ parameter(x個byte))。後續36服務會細講。

1.3 舉例

診斷儀向ECU請求下載下傳資料,dataFormatIdentifier值為0x00,該值有廠家或供應商協商制定,此處暫定為0x00。memoryAddress值為0x0x12345678(占4個位元組),memorySize值為0x01234567(占4位元組),則addressAndLengthFormatIdentifier值為0x44(該值計算方式上述請求格式中以說明)。

UDS(十)應用層 34/36/37

上圖中不同顔色代表不同的參數

橙色:addressAndLengthFormatIdentifier(0x44)

紫色:memoryAddress(0x12345678)

綠色:memorySize(0x01234567)

青色:maxNumberOfBlockLength(0x0202)

2. TransferData (0x36) service

如果34服務得到了正确響應,診斷儀就要啟動資料傳輸過程了,使用的就是36服務。

2.1 請求格式

UDS(十)應用層 34/36/37

上圖可知請求格式分為三個部分

第一部分:請求SID :0x36(1個byte)

第二部分:blockSequenceCounter(1個byte),34服務後,發送的第一個36服務時clockSequenceCounter=0x01,每次36服務請求便自增1,當增加到0xFF,此時下次請求36服務發送資料時blockSequenceCounter=0x00。

第三部分:transferRequestParameterRecord:位元組長短和參數格式不定,由廠家制定。發送請求的資料。

2.2 響應格式

UDS(十)應用層 34/36/37

由上圖可知響應格式分為三個部分

第一部分:response SID:0x76

第二部分:blockSequenceCounter:對請求的blockSequenceCounter的echo

第三部分:transferResponseParameterRecord,當36服務用于上傳資料時,該參數必須的。36服務用于下載下傳資料時,該參數非必須,此處不解析。

2.3 舉例

假設診斷儀34服務請求下載下傳30位元組,ECU回報每次最大下載下傳maxNumberOfBlockLength為0x0A,則診斷儀使用36服務下載下傳資料如下圖所示:

UDS(十)應用層 34/36/37

3. RequestTransferExit (0x37) service

37服務用于退出上傳下載下傳,即診斷儀通過該診斷服務停止與ECU之間的資料傳輸。如果之前的34和36服務都順利執行完成,那麼37服務就可以得到ECU的positive response。否則ECU會負響應NRC 0x7F 37 24,表示診斷序列執行有錯誤。

3.1 請求格式

UDS(十)應用層 34/36/37

由上圖可知請求格式分為兩個部分

第一部分:請求SID:0x37

第二部分:transferRequestParameterRecord,位元組長度和參數格式,廠家自定義,沒有定義則預設位元組資料為0。

3.2 響應格式

UDS(十)應用層 34/36/37

由上圖可知響應格式分為兩個部分

第一部分:response SID:0x77

第二部分:transferResponseParameterRecord,位元組長度和參數格式,廠家自定義,沒有定義則預設位元組資料為0。

3.3 舉例

UDS(十)應用層 34/36/37

UDS協定棧系列文章:

UDS(一)入門概述

UDS(二)網絡層

UDS(三)網絡層時間參數

UDS(四)應用層

UDS(五)應用層10/3E

UDS(六)應用層11/27

UDS(七)應用層28/85

UDS(八)應用層22/2E

UDS(九)應用層14/19

UDS(十)應用層34/36/37

UDS

繼續閱讀