1、問題描述
在生成Atmega128的固件程序時,常指定格式為"intel-extended",如下:
今天要生成一版新的含Boot的程序,這就涉及到hex的拼接工作。
那首先要搞清楚的問題就是intel hex的具體格式是什么?
2、 intel hex 的具體格式
Intel Hex文件是遵循Intel Hex文件格式的ASCII文本文件。
在Intel Hex 文件的每一行中都包含了一個hex記錄。這些記錄是由一些代表機器語言代碼和常量的16進制數據組成。
Intel Hex文件常用來傳輸要存儲在ROM、EPROM或者Flash中的程序和數據。大部分的EPROM編程器都能使用Intel Hex文件。
Intel Hex由任意數量的十六進制記錄組成。每個記錄包含6個域,它們按以下格式排列。
Start Code(冒號): 每個 Intel HEX 記錄都由冒號開頭
Byte count(本行數據長度):是數據長度域,它代表記錄當中數據字節的數量
Address(本行數據的起始地址):是地址域,它代表記錄當中數據的起始地址
Record type(數據類型): 是代表HEX記錄類型的域,它可能是以下數據當中的一個:
00-數據記錄
01-文件結束記錄
02-擴展段地址記錄
03-開始段地址記錄
04-擴展線性地址記錄
05-開始線性地址記錄
Data(數據): 是數據域,一個記錄可以有許多數據字節.記錄當中數據字節的數量必須和數據長度域中指定的數字相符
Checksum(校驗碼): 是校驗和域,它表示這個記錄的校驗和.校驗和的計算是通過將記錄當中所有十六進制編碼數字對
的值相加,以256為模進行補足。
注:目前我看到的hex文件末尾都以以下內容結束。
:00000001FF
3、關於擴展段地址記錄
第一行中的021000 ,其中的02表示擴展段地址記錄,擴展段的地址為1000。
第二行至以下行中的所有地址如,E000 其實際地址為0xE000 + 0x10000 = 0x1E000