《UDS協議從入門到精通》系列——圖解0x35:請求上傳
- 一、簡介
- 二、數據包格式
- 2.1 服務請求格式
- 2.2 服務響應格式
- 2.2.1 肯定響應
- 2.2.2 否定響應
- 三、通信示例
Tip📌:本文描述中但凡涉及到其他UDS服務的,將陸續提供鏈接跳轉方式以便快速了解他們。(各服務介紹持續更新中…)
學習UDS基礎知識以及其他相關內容?>>>>>>>>> 返回專欄總目錄 《UDS協議從入門到精通(UDS速查手冊)》<<<<<<<<<
一、簡介
Tip📌:該服務跟34使用方式上服務幾乎一致,推薦先閱讀《UDS協議從入門到精通》系列——圖解0x34:請求下載
??與0x34服務相反,該服務用于啟動數據上傳服務,傳輸方向是目標ECU(Server)→ Tester(Client),向目標ECU發送該請求的主要作用就是告知目標ECU“我(Tester)想要你存儲的數據,請你(目標ECU)發送給我”。
二、數據包格式
2.1 服務請求格式
??該服務不支持sub-function。部分參數的含義如下所示:
??dataFormatIdentifier(1Byte):這個單字節里面標識了數據格式相關的信息,每半個字節分別編碼,高半字節指定 “數據壓縮方法”,而低半字節則指定“數據加密方法”。如果該字節取值為0x00,則表示既不使用加密方法也不適用壓縮方法,其他取值情況有整車制造商或者供應商決定,可以用約定好用不同的取值代表數據是否有壓縮,是否有加密,用的又是什么算法等等。
??addressAndLengthFormatIdentifier(1Byte):該參數含義在圖中標識的已經比較清晰,不再贅述。比如memoryAddress參數占用m個字節,memorySize參數占用n個字節,則該參數取值為0x(nm)。
??memoryAddress(mByte):對于即將啟動的數據傳輸,該參數指明了從目標ECU內存讀取數據的邏輯地址。比如Tester請求將數據寫入ECU內存地址為0x12345678的地方(該地址占4個字節),則memoryAddress值為0x12345678,對應addressAndLengthFormatIdentifier參數低4Bits值為0x04。
??memorySize(nByte):對于即將啟動的數據傳輸,該參數指明了從ECU內存讀取數據的字節數。比如Tester請求讀取目標ECU數據的字節數為0x01234567(即memorySize占4字節),則memorySize值為0x01234567,對應的addressAndLengthFormatIdentifier高4Bits值為0x4。
2.2 服務響應格式
2.2.1 肯定響應
??lengthFormatIdentifier(1Byte):該字節每半個字節單獨編碼,高4Bits為maxNumberOfBlockLength有效字節長度,低4Bits保留為0。
??maxNumberOfBlockLength:字節長度不定,取值長度取決于lengthFormatIdentifier的高半字節,表示0x36服務一次傳輸一個block的最大的字節數。比如該參數取值為0x202,則使用0x36服務時,一次最多發送字節數為0x202(字節數:0x202 >= 36 (1Byte)+ parameter(x個Bytes))。
??這些參數確保了Tester和目標ECU之間的數據傳輸能夠高效和安全地進行。通過maxNumberOfBlockLength參數,Tester可以預先知道目標ECU將發送的數據塊的最大長度,從而可以適當地調整自己的接收緩沖區,以避免數據丟失或溢出。
2.2.2 否定響應
??可能出現的NRC及其含義如下:
NRC | 含義 |
---|---|
0x13 | 消息長度錯誤 |
0x22 | 當前條件不滿足 |
0x31 | 請求參數不受支持,參數錯誤 |
0x33 | 未通過安全訪問 |
0x70 | 由于某些故障導致無法上傳目標ECU的數據到Tester中 |
??NRC的處理流程如下所示(即推薦的錯誤情況檢查順序):
三、通信示例
??基于對本服務以及0x36、0x37三個服務的學習,這里舉一個完整的例子,該示例實現:將數據從目標ECU上傳到Tester中。數據從目標ECU上傳到Tester的過程分三步:
- Tester通過0x35-請求上傳服務向目標ECU發送請求,該請求消息中將包括數據的格式信息(是否壓縮、加解密信息)、要從目標ECU的哪個地址獲取數據、要獲取多少字節的數據。目標ECU收到該請求后將通過響應告訴Tester:“我(目標ECU)每次最多能傳輸多少自字節”,即目標ECU會表明自己每次的上傳能力。
- Tester得知目標ECU每次上傳能力后,將按照目標ECU上傳能力做適配,目標ECU將通過0x36-數據傳輸服務將數據一塊塊的上傳到Tester。
- Tester端收到期望的數據后,通過發送0x37-退出傳輸服務請求來終止數據上傳過程。
??在鑰匙電開啟,發動機關閉,車速為0的背景下,Tester和目標ECU間的通信過程如下圖所示:
>>>>>>>>> 返回專欄總目錄 《UDS協議從入門到精通(UDS速查手冊)》<<<<<<<<<