读懂 Intel Hex 文件

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

原文地址:https://www.cnblogs.com/aqing1987/p/4185362.html