寧波網(wǎng)站排名優(yōu)化報(bào)價(jià)bing搜索引擎下載
UDS 協(xié)議中 0x34 服務(wù)(Request Download)詳解
一、0x34 服務(wù)概述
作用:啟動(dòng)從診斷設(shè)備到 ECU 的數(shù)據(jù)傳輸,主要用于固件升級(jí)(FOTA)或大塊數(shù)據(jù)寫(xiě)入。
使用場(chǎng)景:ECU 需切換至編程會(huì)話(0x02)并通過(guò)安全訪問(wèn)(0x27)解鎖后,方可執(zhí)行該服務(wù)。
二、請(qǐng)求報(bào)文格式(Tester → ECU)
參數(shù) | 字節(jié)長(zhǎng)度 | 含義 | 示例值 |
---|---|---|---|
SID | 1 Byte | 服務(wù)標(biāo)識(shí)符,固定為 0x34 | 0x34 |
DFI(DataFormatIdentifier) | 1 Byte | 高 4 位:壓縮方法(0 = 無(wú)壓縮);低 4 位:加密方法(0 = 無(wú)加密) | 0x00 |
ALFID(AddressAndLengthFormatID) | 1 Byte | 高 4 位:MemorySize 的字節(jié)數(shù)(n);低 4 位:MemoryAddress 的字節(jié)數(shù)(m) | 0x44(m=4, n=4) |
MemoryAddress | m Bytes | 數(shù)據(jù)寫(xiě)入的起始地址(大端序,MSB 在前) | 0x0800_0000 |
MemorySize | n Bytes | 待傳輸數(shù)據(jù)的總字節(jié)數(shù)(未壓縮大小) | 0x0001_0000(64KB) |
示例報(bào)文:
34 00 44 08 00 00 00 00 01 00 00
含義:向地址 0x08000000 寫(xiě)入 64KB 數(shù)據(jù),無(wú)壓縮加密,地址和長(zhǎng)度各占 4 字節(jié)。
三、響應(yīng)報(bào)文格式(ECU → Tester)
1. 肯定響應(yīng)(0x74)
參數(shù) | 字節(jié)長(zhǎng)度 | 含義 | 示例值 |
---|---|---|---|
SID+0x40 | 1 Byte | 響應(yīng)標(biāo)識(shí)符,固定為 0x74(0x34 + 0x40) | 0x74 |
LFID(LengthFormatID) | 1 Byte | 高 4 位:MaxBlockLength 的字節(jié)數(shù);低 4 位:保留(固定 0) | 0x20 |
MaxBlockLength | 可變長(zhǎng)度 | 單次傳輸(0x36 服務(wù))允許的最大數(shù)據(jù)塊大小(含協(xié)議開(kāi)銷) | 0x0402(1026 字節(jié)) |
注:實(shí)際有效數(shù)據(jù)量 = MaxBlockLength - 2(扣除 0x36 服務(wù)的幀序號(hào)占 2 字節(jié))。
示例響應(yīng):
74 20 04 02
含義:允許每次傳輸最大 1026 字節(jié)(實(shí)際數(shù)據(jù) 1024 字節(jié))。
2. 否定響應(yīng)(0x7F)
常見(jiàn)否定響應(yīng)碼(NRC):
-
0x13:報(bào)文長(zhǎng)度錯(cuò)誤(參數(shù)缺失)
-
0x22:條件不滿足(如未預(yù)擦除內(nèi)存)
-
0x31:參數(shù)無(wú)效(地址 / 長(zhǎng)度超范圍)
-
0x33:安全訪問(wèn)未解鎖
-
0x70:內(nèi)存寫(xiě)入失敗(如地址只讀)
四、通信流程與關(guān)鍵機(jī)制
分塊傳輸機(jī)制
-
ECU 通過(guò)
MaxBlockLength
控制每次 0x36 服務(wù)的數(shù)據(jù)量(例如 1024 字節(jié) / 包)。 -
診斷設(shè)備需按此分塊發(fā)送數(shù)據(jù),最后一塊可小于最大值。
完整性校驗(yàn)
-
ECU 比較
MemorySize
與實(shí)際傳輸總量,確保數(shù)據(jù)完整。 -
傳輸結(jié)束需調(diào)用 **0x37 服務(wù)(RequestTransferExit)** 提交校驗(yàn)。
安全設(shè)計(jì)
-
內(nèi)存地址可包含標(biāo)識(shí)符(如 0x08 表示 Flash),防止地址沖突。
-
必須通過(guò) 0x27 服務(wù)解鎖高安全等級(jí)(Level 3)才能寫(xiě)入關(guān)鍵區(qū)域。
五、實(shí)際應(yīng)用案例
場(chǎng)景:更新 64KB 固件到 ECU Flash(起始地址 0x08000000)。
-
請(qǐng)求下載:
34 00 44 08 00 00 00 00 01 00 00
(地址 8 字節(jié),長(zhǎng)度 4 字節(jié)) -
ECU 響應(yīng):
74 20 04 02
(允許 1026 字節(jié) / 包,含 2 字節(jié)頭) -
數(shù)據(jù)傳輸:
分 64 包發(fā)送(每包 1024 字節(jié) + 0x36 幀頭),最后調(diào)用 0x37 服務(wù)結(jié)束傳輸并校驗(yàn)。分 64 包發(fā)送(每包 1024 字節(jié) + 0x36 幀頭),最后調(diào)用 0x37 服務(wù)結(jié)束傳輸并校驗(yàn)。
六、配置注意事項(xiàng)
地址對(duì)齊
- 內(nèi)存地址需符合 ECU 的寫(xiě)入對(duì)齊要求(如 4 字節(jié)對(duì)齊)。
內(nèi)存保護(hù)
-
確保目標(biāo)區(qū)域可寫(xiě)(非 Bootloader 保護(hù)區(qū))。
-
提前執(zhí)行擦除操作(0x31 服務(wù)觸發(fā)擦除例程)。
超時(shí)設(shè)置
- 傳輸過(guò)程中需配置
P2*_Timeout
(建議≥5000ms),避免網(wǎng)絡(luò)延遲導(dǎo)致中斷。
UDS 協(xié)議中 0x36 服務(wù)(Transfer Data)詳解
一、服務(wù)概述
0x36 服務(wù)(Transfer Data)是 UDS 協(xié)議中負(fù)責(zé)數(shù)據(jù)分塊傳輸?shù)暮诵姆?wù),主要用于在診斷設(shè)備和 ECU 之間傳輸大量數(shù)據(jù),配合 0x34 服務(wù)使用。在 ECU 通過(guò) 0x34 服務(wù)確認(rèn)數(shù)據(jù)傳輸參數(shù)(如地址、長(zhǎng)度、塊大小)后,診斷設(shè)備通過(guò) 0x36 服務(wù)按指定塊大小向 ECU 發(fā)送數(shù)據(jù)。
二、請(qǐng)求報(bào)文格式(Tester → ECU)
參數(shù) | 字節(jié)長(zhǎng)度 | 含義 | 示例值 |
---|---|---|---|
SID | 1 Byte | 服務(wù)標(biāo)識(shí)符,固定為 0x36 | 0x36 |
BlockSequenceNumber | 1 Byte | 塊序號(hào),用于標(biāo)識(shí)數(shù)據(jù)塊的順序,初始值為 0,每發(fā)送一塊遞增 1 | 0x00(第一塊),0x01(第二塊) |
DataBlock | 可變長(zhǎng)度 | 實(shí)際傳輸?shù)臄?shù)據(jù)塊,長(zhǎng)度不超過(guò) 0x34 服務(wù)響應(yīng)中指定的MaxBlockLength - 2 | 若MaxBlockLength 為 1026 字節(jié),則 DataBlock 最長(zhǎng) 1024 字節(jié) |
示例報(bào)文:
36 00 41 42 43 ...
(第一塊,塊序號(hào) 0x00,數(shù)據(jù)部分示例為41 42 43 ...
)
36 01 44 45 46 ...
(第二塊,塊序號(hào) 0x01,數(shù)據(jù)部分示例為44 45 46 ...
)
三、響應(yīng)報(bào)文格式(ECU → Tester)
1. 肯定響應(yīng)(0x76)
參數(shù) | 字節(jié)長(zhǎng)度 | 含義 | 示例值 |
---|---|---|---|
SID+0x40 | 1 Byte | 響應(yīng)標(biāo)識(shí)符,固定為 0x76(0x36 + 0x40) | 0x76 |
BlockSequenceNumber | 1 Byte | 確認(rèn)接收的數(shù)據(jù)塊序號(hào),與請(qǐng)求報(bào)文中的序號(hào)一致 | 與請(qǐng)求報(bào)文序號(hào)相同,如 0x00 |
示例響應(yīng):
76 00
(確認(rèn)接收塊序號(hào)為 0x00 的數(shù)據(jù)塊)
2. 否定響應(yīng)(0x7F)
常見(jiàn)否定響應(yīng)碼(NRC):
-
0x13:報(bào)文長(zhǎng)度錯(cuò)誤(數(shù)據(jù)塊超出指定大小)
-
0x24:條件不滿足(如 ECU 未準(zhǔn)備好接收數(shù)據(jù))
-
0x72:故障處于活動(dòng)狀態(tài)(傳輸過(guò)程中 ECU 檢測(cè)到故障)
四、數(shù)據(jù)傳輸機(jī)制
塊序號(hào)管理
診斷設(shè)備按順序遞增塊序號(hào)發(fā)送數(shù)據(jù),ECU 通過(guò)響應(yīng)中的序號(hào)確認(rèn)接收順序,若序號(hào)不連續(xù)或重復(fù),ECU 將返回否定響應(yīng)。
流控制
部分場(chǎng)景下,若 ECU 處理速度跟不上數(shù)據(jù)接收速度,會(huì)通過(guò)否定響應(yīng)或其他機(jī)制(如 ISO-TP 協(xié)議流控制)要求診斷設(shè)備暫?;蛘{(diào)整發(fā)送速率。
最后一塊標(biāo)識(shí)
診斷設(shè)備發(fā)送最后一塊數(shù)據(jù)時(shí),可通過(guò)設(shè)置特殊標(biāo)志(如塊序號(hào)達(dá)到最大值)或結(jié)合數(shù)據(jù)長(zhǎng)度判斷,通知 ECU 數(shù)據(jù)傳輸即將結(jié)束。
五、與 0x34 服務(wù)的協(xié)同關(guān)系
0x34 服務(wù)為數(shù)據(jù)傳輸做準(zhǔn)備,確定傳輸?shù)幕緟?shù);0x36 服務(wù)則負(fù)責(zé)實(shí)際的數(shù)據(jù)分塊發(fā)送。兩者配合實(shí)現(xiàn)完整的數(shù)據(jù)傳輸流程:
-
診斷設(shè)備發(fā)送 0x34 服務(wù)請(qǐng)求,ECU 返回允許的
MaxBlockLength
。 -
診斷設(shè)備按
MaxBlockLength
分塊,通過(guò) 0x36 服務(wù)依次發(fā)送數(shù)據(jù)。 -
數(shù)據(jù)傳輸完成后,調(diào)用 0x37 服務(wù)提交校驗(yàn),確認(rèn)傳輸成功。
UDS 協(xié)議中 0x37 服務(wù)(Request Transfer Exit)詳解
一、服務(wù)概述
0x37 服務(wù)(Request Transfer Exit)用于在數(shù)據(jù)傳輸完成后,由診斷設(shè)備向 ECU 發(fā)送請(qǐng)求,通知 ECU 數(shù)據(jù)傳輸已結(jié)束,并觸發(fā) ECU 進(jìn)行數(shù)據(jù)完整性校驗(yàn)和后續(xù)處理。它是 0x34、0x36 服務(wù)流程中的收尾環(huán)節(jié),確保數(shù)據(jù)傳輸?shù)耐暾院涂煽啃浴?/p>
二、請(qǐng)求報(bào)文格式(Tester → ECU)
參數(shù) | 字節(jié)長(zhǎng)度 | 含義 | 示例值 |
---|---|---|---|
SID | 1 Byte | 服務(wù)標(biāo)識(shí)符,固定為 0x37 | 0x37 |
示例報(bào)文:
37
三、響應(yīng)報(bào)文格式(ECU → Tester)
1. 肯定響應(yīng)(0x77)
參數(shù) | 字節(jié)長(zhǎng)度 | 含義 | 示例值 |
---|---|---|---|
SID+0x40 | 1 Byte | 響應(yīng)標(biāo)識(shí)符,固定為 0x77(0x37 + 0x40) | 0x77 |
示例響應(yīng):
77
含義:ECU 確認(rèn)接收到數(shù)據(jù)傳輸結(jié)束請(qǐng)求,且數(shù)據(jù)校驗(yàn)通過(guò),準(zhǔn)備進(jìn)行后續(xù)操作(如寫(xiě)入 Flash、重啟等)。
2. 否定響應(yīng)(0x7F)
常見(jiàn)否定響應(yīng)碼(NRC):
-
0x13:報(bào)文長(zhǎng)度錯(cuò)誤(不符合 0x37 服務(wù)格式要求)
-
0x24:條件不滿足(如 ECU 尚未接收完所有數(shù)據(jù))
-
0x72:故障處于活動(dòng)狀態(tài)(傳輸過(guò)程中出現(xiàn)未處理的故障,導(dǎo)致校驗(yàn)失敗)
-
0x73:安全訪問(wèn)未解鎖(若后續(xù)操作涉及敏感區(qū)域?qū)懭?#xff0c;需提前解鎖)
四、與其他服務(wù)的協(xié)同流程
-
前置準(zhǔn)備:診斷設(shè)備先通過(guò) 0x34 服務(wù)請(qǐng)求數(shù)據(jù)傳輸,獲取 ECU 允許的最大數(shù)據(jù)塊長(zhǎng)度(
MaxBlockLength
)。 -
數(shù)據(jù)傳輸:按
MaxBlockLength
分塊,使用 0x36 服務(wù)將數(shù)據(jù)逐塊發(fā)送給 ECU,ECU 接收并緩存數(shù)據(jù)。 -
傳輸結(jié)束:診斷設(shè)備發(fā)送 0x37 服務(wù)請(qǐng)求,通知 ECU 數(shù)據(jù)已全部發(fā)送完畢。
-
校驗(yàn)與處理:ECU 接收到 0x37 請(qǐng)求后,對(duì)接收的數(shù)據(jù)進(jìn)行完整性校驗(yàn)(如 CRC 校驗(yàn)),若校驗(yàn)通過(guò),執(zhí)行后續(xù)操作(如將數(shù)據(jù)寫(xiě)入目標(biāo)內(nèi)存區(qū)域、更新固件版本號(hào));若校驗(yàn)失敗,返回否定響應(yīng)并附帶錯(cuò)誤碼。
五、實(shí)際應(yīng)用注意事項(xiàng)
數(shù)據(jù)校驗(yàn)依賴
ECU 對(duì)數(shù)據(jù)的校驗(yàn)方式(如 CRC 算法、校驗(yàn)范圍)需與診斷設(shè)備預(yù)先約定,確保雙方對(duì)數(shù)據(jù)完整性判斷一致。
操作權(quán)限管理
若 0x37 服務(wù)觸發(fā)的后續(xù)操作(如固件寫(xiě)入)涉及敏感區(qū)域,需確保 ECU 已通過(guò)安全訪問(wèn)(0x27 服務(wù))解鎖相應(yīng)權(quán)限。
超時(shí)處理
診斷設(shè)備發(fā)送 0x37 請(qǐng)求后,需設(shè)置合理的超時(shí)時(shí)間等待 ECU 響應(yīng),若超時(shí)未收到肯定回復(fù),需重新檢查傳輸過(guò)程或發(fā)起重試機(jī)制。
通過(guò)合理使用 0x34、0x36、0x37 服務(wù),可在 UDS 協(xié)議框架下構(gòu)建完整、可靠的 ECU 數(shù)據(jù)傳輸與更新流程,滿足汽車電子系統(tǒng)固件升級(jí)、參數(shù)配置等多種應(yīng)用需求。