uds协议之can总线程序升级
1.什么是UDS協(xié)議
? ? ? ? UDS(Unified Diagnostic Services,統(tǒng)一的診斷服務(wù))協(xié)議是在汽車電子ECU環(huán)境下的一種通用診斷協(xié)議,屬于應(yīng)用層的協(xié)議??稍诓煌钠嚳偩€上實(shí)現(xiàn)(如CAN、LIN、Flexray和Internet等),但目前大部分汽車廠商都是基于can總線的uds應(yīng)用。
更詳細(xì)的介紹可參考:
https://blog.csdn.net/u012252959/article/details/83063899?
https://zhuanlan.zhihu.com/p/72543808
2.如何通過UDS協(xié)議進(jìn)行程序升級(jí)
? ? ? ? UDS協(xié)議其本質(zhì)其實(shí)就是一種請(qǐng)求-響應(yīng)(Request/Response)的交互協(xié)議,主要是對(duì)candata部分內(nèi)容進(jìn)行了統(tǒng)一定義,ECU會(huì)根據(jù)收到的不同請(qǐng)求內(nèi)容,執(zhí)行不同的操作或響應(yīng)不同的數(shù)據(jù)。而這個(gè)“不同的請(qǐng)求內(nèi)容”實(shí)際上就是我們所說的診斷服務(wù)ID及其附帶的一些參數(shù)。UDS的服務(wù)ID種類大致可分為如下幾類:
而我們進(jìn)行程序升級(jí)要用到的服務(wù)ID毫無疑問就是0x34、0x36、0x37這三個(gè)服務(wù)了。
0x34請(qǐng)求下載服務(wù)參考:https://zhuanlan.zhihu.com/p/107889509
0x36數(shù)據(jù)傳輸服務(wù)參考:https://zhuanlan.zhihu.com/p/108100282
0x37請(qǐng)求退出傳輸服務(wù)參考:https://zhuanlan.zhihu.com/p/108124762
整個(gè)數(shù)據(jù)上傳、下載流程參考:https://blog.csdn.net/u012252959/article/details/83077069
除此之外,還需用到0x10會(huì)話控制服務(wù),用于切換會(huì)話模式。(不同的會(huì)話模式、對(duì)服務(wù)的響應(yīng)權(quán)限不一樣,比如必須在編程模式下,ECU才能響應(yīng)上傳下載功能單元的服務(wù))
下圖為會(huì)話模式的種類:
0x10會(huì)話控制服務(wù)參考:https://zhuanlan.zhihu.com/p/84609132?
除會(huì)話控制外,0x27安全訪問服務(wù)也有用到。一般情況下,需要通過安全服務(wù)的認(rèn)證,ECU才允許進(jìn)行數(shù)據(jù)下載操作。
安全服務(wù)認(rèn)證方式首先由客戶端向ECU發(fā)送請(qǐng)求,獲取隨機(jī)碼(種子),客戶端收到隨機(jī)碼后,按照雙方約定好的算法進(jìn)行計(jì)算得到秘鑰值,客戶端再將這個(gè)值發(fā)送給ECU,進(jìn)行安全認(rèn)證(如果算法相同,則計(jì)算出的結(jié)果相同,ECU回復(fù)肯定響應(yīng))。
具體可參考:https://zhuanlan.zhihu.com/p/88651234
此外,0x31例行控制服務(wù)也是必須的。比如:升級(jí)前需要通過該服務(wù)確認(rèn)ECU的可編程性,每次進(jìn)行程序塊下載前需要調(diào)用該服務(wù)進(jìn)行程序擦除操作,下載完成后需要通過該服務(wù)檢查程序的完整性,檢測(cè)是否可以正常運(yùn)行。(具體的routineIdentifier及其含義一般由車廠執(zhí)行定義)
詳細(xì)可參考:?https://blog.csdn.net/weixin_44536482/article/details/94866212
3.升級(jí)流程
升級(jí)流程可參考:
4.升級(jí)數(shù)據(jù)CAN報(bào)文分析與UDS協(xié)議學(xué)習(xí)
0x10會(huì)話控制:
?
其中,0x791為客戶端發(fā)送至ECU的的CANID,0x799為ECU響應(yīng)客戶端的CANID,一般由汽車廠商自行定義。0x7DF為uds定義的功能地址,用于一對(duì)多發(fā)送診斷服務(wù)請(qǐng)求。
數(shù)據(jù)請(qǐng)求中,02代表長度,10 代表0x10服務(wù)ID,01和03分別代表要切換的會(huì)話模式。?
0x27安全訪問:
0x31例行控制:
該數(shù)據(jù)包為多幀格式,其中10中的高位1表示該幀數(shù)據(jù)為連續(xù)幀,低位0和第二個(gè)字節(jié)(0x00D)為該包連續(xù)幀數(shù)據(jù)的長度。31為服務(wù)ID,01位啟動(dòng)指令,之后的數(shù)據(jù)含義由汽車廠商執(zhí)行定義(如此處 FF 00 表示擦除程序, 44 高位表示擦除首地址長度為4bytes,擦除數(shù)據(jù)長度為4byte,其后1byte 00 及 連續(xù)幀 F9 80 08 為擦除地址, 00 00 00 58為擦除長度)
其中21中的高位2表示該幀為連續(xù)幀,低位1為連續(xù)幀的序列,范圍從1增至F后歸零,依次反復(fù)。
其中30表示該幀為流控幀,用于告知發(fā)送方是否可以繼續(xù)傳輸消息、接收方一次能接收的數(shù)據(jù)最大量以及兩個(gè)連續(xù)幀之間的最小時(shí)間間隔。
0x34/0x36/0x37 數(shù)據(jù)下載:
如上圖所示,紅色表示寫入的數(shù)據(jù)內(nèi)容。5A表示連續(xù)幀數(shù)據(jù)長度(包含數(shù)據(jù)內(nèi)容長度0x58+兩個(gè)字節(jié)(36 01),其中36為服務(wù)ID,01為塊序列號(hào),每發(fā)送一段數(shù)據(jù)塊后自增,增至FF后歸零)
上述Execl記錄的完整UDS升級(jí)抓包數(shù)據(jù)下載:https://download.csdn.net/download/fangye945a/19322702
總結(jié)
以上是生活随笔為你收集整理的uds协议之can总线程序升级的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【图像处理】——Python实现图像加噪
- 下一篇: java-appium-527进阶-1