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