作者 | 小豆
小編 | 不吃豬頭肉
背景
在現代汽車電子技術中,ECU(電子控制單元)的軟件升級是一項關鍵任務。為了提高數據傳輸的效率和安全性,壓縮刷寫技術應運而生。通過數據壓縮傳輸,我們可以有效地增加帶寬利用率,減少刷寫工具與ECU之間的數據傳輸量,從而顯著縮短ECU升級時間。此外,為了加強數據的安全性和保密性,數據傳輸還可以進行加密處理。在ISO14229-1規范中,請求下載服務(SID=0x34)和請求文件傳輸服務(0x38)定義了數據可以基于壓縮和加密的方式進行傳輸。本文以請求下載服務為例重點介紹數據壓縮部分。ISO14229-1:2020規范中定義請求下載服務(0x34)的請求報文格式
根據ISO14229-1:2020規范,請求下載服務(0x34)允許數據通過壓縮和加密的方式進行傳輸。在該服務的請求報文格式中,”dataFormatIdentifier“是一個關鍵的參數,大小為1個字節,其中高四位(bit4-bit7)為參數”compressionMethod“,定義數據是否需要壓縮, 其中低四位(bit0-bit3)為參數”encryptingMethod“,定義數據是否需要加密。若下載的數據既不需要壓縮也不需要加密,則該參數值為0x00,若使用非0x00的值,則表示下載數據需要進行壓縮、加密,或二者兼有。如”dataFormatIdentifier“此值為0x10,表示下載數據需要壓縮不需要加密,如”dataFormatIdentifier“此值為0x11,表示下載數據需要壓縮也需要加密。
值得注意的是,下載數據的壓縮與加密需求并不影響參數”addressAndLengthFormatIdentifier
“和”memoryAddress“,但會影響”memorySize“參數,該參數定義了需要刷寫數據的大小,這個大小將與通過TransferData(0x36)服務傳輸的數據大小進行比較。
當下載的數據是壓縮數據時,由OEM來定義”memorySize“代表的是壓縮數據的大小還是壓縮前數據的大小。不同的定義對于刷寫流程的實現代碼也不相同。
若”memorySize“代表壓縮數據的大小,那么當TransferData(0x36)服務將壓縮數據傳輸完成后,ECU將根據“memorySize”參數來判斷數據是否下載完成,ECU會比較傳輸的壓縮數據與”memorySize“參數定義的數據大小是否一致,并相應地發送肯定或否定響應。
若”memorySize“代表非壓縮數據的大小,那么TransferData(0x36)服務傳輸的壓縮數據大小一般小于”memorySize“的值。這時ECU將接收到的壓縮數據解壓,并計算所有解壓后數據大小的總和。在壓縮數據傳輸完成后,ECU會比較解壓后的數據大小與”memorySize“參數定義的數據大小是否一致,并相應地發送肯定或否定響應。
當然,對于”memorySize“代表壓縮數據的大小還是非壓縮數據大小,數據傳輸完成后ECU判斷下載數據是否正確的方法各OEM定義也不盡相同。壓縮前后刷寫文件比對
軟件刷寫是指將軟件程序燒錄或者通過UDS刷寫傳輸到ECU芯片內存的特定地址段,然后ECU就會運行該軟件程序,去實現其特有的功能。常用的ECU刷寫文件格式有:.hex,.s19和.bin等。壓縮刷寫文件是通過特定的壓縮算法制作而成。
壓縮前:
刷寫文件分3個邏輯塊,各塊起始地址、結束地址、長度為:
Block0:起始地址:0x80138020 結束地址:0x801FFFDF 長度:0xC7FC0
Block1:起始地址:0x80300020 結束地址:0x804FFFDF 長度:0x1FFFC0
Block2:起始地址:0xA0078020 結束地址:0xA0137FFF 長度:0xBFFE0
壓縮后:
壓縮后刷寫文件仍分3個邏輯塊,各塊起始地址、結束地址、長度為:
Block0:起始地址:0x80138020 結束地址:0x8015E60E 長度:0x265EF
Block1:起始地址:0x80300020 結束地址:0x80448DD7 長度:0x148DB8
Block2:起始地址:0xA0078020 結束地址:0xA00AD0F6 長度:0x350D7
可以發現,壓縮前后的刷寫文件邏輯塊數量未變化,起始地址未變化,各邏輯塊的數據長度變小了,對應的結束地址也產生了變化。每個邏輯塊獨立壓縮
對于壓縮前刷寫文件中分為多個邏輯塊,在壓縮之后的邏輯塊數量未發生變化的情況可稱之為“每個邏輯塊獨立壓縮”。與之不同,也存在“整體壓縮”的方式。
整體壓縮
壓縮前:
刷寫文件分3個邏輯塊,各塊起始地址、結束地址、長度為:
Block0:起始地址:0x8FC0060 結束地址:0x9194FFF 長度:0x1D4FA0
Block1:起始地址:0x91C0000 結束地址:0x91D9EBF 長度:0x19EC0
Block2:起始地址:0x9200000 結束地址:0x9237FFF 長度:0x38000
壓縮后:
壓縮后刷寫文件只有1個邏輯塊,無起始地址。
對于“整體壓縮方式”,刷寫流程中內存擦除(EarseMemmory)服務和0x34(RequestDownload)服務中起始地址等信息由ECU供應商或者OEM定義。壓縮刷寫日志分析
非壓縮刷寫日志:
壓縮刷寫日志:
通過分析刷寫日志,我們可以發現壓縮刷寫與非壓縮刷寫的主要區別在于:1.請求下載服務(SID=0x34)指令參數(dataFormatIdentifier)不同。
非壓縮:刷寫工具發送:34 00 44 A0 07 80 00 00 10 00 01
壓縮:刷寫工具發送:34 10 44 A0 07 80 00 00 03 50 F7
其中10代表:使用壓縮數據;00代表:使用非壓縮數據。
2.請求下載服務(SID=0x34)指令參數(memorySize)不同。
非壓縮刷寫:刷寫工具發送:34 00 44 A0 07 80 00 00 10 00 01
壓縮刷寫:刷寫工具發送:34 10 44 A0 07 80 00 00 03 50 F7
非壓縮刷寫中請求下載服務(SID=0x34)中memorySize大小大于壓縮刷寫中的memorySize大小,如果最大塊長度值一致,則對于后續數據傳輸服務(SID=0x36)的個數,壓縮刷寫則要小于非壓縮刷寫。
如日志中壓縮刷寫與非壓縮刷寫最大塊長度值皆為0xFFF,可計算出:
非壓縮刷寫后續數據傳輸服務(SID=0x36)的個數為257個;
壓縮刷寫后續數據傳輸服務(SID=0x36)的個數為54個;
數據傳輸服務(SID=0x36)的個數越少,則所需數據傳輸的時間也就越少,這也就是壓縮刷寫可以提升刷寫效率的主要原因。總結
隨著ECU軟件功能的日益復雜,提高ECU軟件升級效率變得尤為重要,Bootloader作為一項必不可少的功能軟件,其高效的刷寫方式是實現ECU軟件更新的關鍵。目前,北匯信息已經完成壓縮刷寫測試方案的落地,期待與感興趣的朋友進行交流合作。
-
數據傳輸
+關注
關注
9文章
1891瀏覽量
64601 -
ecu
+關注
關注
14文章
886瀏覽量
54504 -
電子控制
+關注
關注
1文章
69瀏覽量
21629
發布評論請先 登錄
相關推薦
評論