一、HEX格式文件是啥
????????HEX 文件是 Intel 公司提出的一種按地址排列的數據信息格式,通常用于存儲嵌入式系統的二進制代碼。它以 ASCII 碼的形式記錄數據,每一行以冒號開頭,包含數據長度、地址、記錄類型、數據和校驗碼等信息。HEX 文件常用于程序存儲器的編程,比如將代碼下載到微控制器中。他是電控數據管理中最終的轉換文件,把次文件刷寫到ECU寄存器中。
二、HEX格式和A2L格式文件
-
HEX 文件:包含 ECU(電子控制單元)的二進制代碼,用于將程序下載到 ECU 的存儲器中。
-
A2L 文件:用于描述 ECU 的參數,例如標定變量的位置、類型等,以便進行標定和測量。
????????A2L 文件和 HEX 文件可能會一起使用。A2L 文件提供了對 ECU 參數的描述,而 HEX 文件包含了這些參數所在的程序代碼。
三、HEX格式架構解析
????????如圖所示,HEX文件每一行均以“:”開頭,表明記錄的開始,“:”之后,每至少2個字符表示一組16進制數據,格式形如:BBAAAATTHHHH....HHHCC。
- BB:表示此行數據長度字節數,也就是HHHHH的數量
- AAAA:表示數據記錄的地址(根據類型不同分別 基地址、段地址或者偏移地址)
- TT:表示記錄類型
- 00:本行是數據記錄
- 01:HEX文件結束
- 02:標識擴展段地址記錄,后面所有數據地址需要加上段地址左移4位
- 03:開始段地址記錄
- 04:標識擴展線性地址記錄-后面所有數據地址+線性地址左移16位,將該地址左移16 位后作為基地址,并且表示在下一個04類型行出現之前都要使用該地址作為基地址
- 05:開始線性地址記錄
- HHHH....HHH:字節順序根據芯片大小端和字長決定 (此處根據A2L文件中的 mod_common 中的BYTE_ORDER 來判斷如何讀取)
- CC:本行的校驗碼,每次更新都要重新計算
四、HEX文件示例
:02000004801B5F
:20000000C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C380
:20002000C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C360
:20004000C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C340
:00000001FF
?:02000004801B5F??
:20000000C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C380
:20002000C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C360
:00000001FF
針對這段HEX中的代碼來做一次解析:
第一行:02帶標數值長度,也就是 801B,0000是基地址,04表示需要把后面的做左移動16位即801B0000
第二行:20表示數值長度,00說明這行是數據,也就是?C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3,這段數據的存儲地址即為801B0000 至?801B0020
第二行:20表示數值長度,00說明這行是數據,也就是?C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3,這段數據的存儲地址即為801B0020 至?801B0040
第三行?:00000001FF?表示結束
????????總結以下,根據A2L文件的mod_common 中的BYTE_ORDER 來判斷如何讀取,隨后根據A2L變量的文件地址找到對應HEX中的文件地址,比如 A 變量在 A2L文件中的地址為801B0020開始,我們找到801B的地址段,隨后向下遍歷找到0020,開始數據讀寫操作。