SREC\Hex\Bin 等烧录文件格式完全解读
1. 关于烧录文件
在典型的应用程序中,编译器或汇编器将程序的源代码(例如C或汇编语言)转换为机器代码,并将其输出到一个文件中。然后,这个文件由程序员导入,以将机器代码“烧录”到ROM(或Flash Memory)中,或传输到目标系统以进行加载和执行。
这个存放机器码的文件就是烧录文件,它是用来烧录到微控制器(如MCU、EEPROM、NOR/NAND Flash等)里面的flash memory里面的一个程序文件。烧录文件可以有很多种格式,如bin、Hex,S19等。以下对这几种文件格式做完全解析。
2. Bin 文件
直接存储flash memory的raw data,因为其里面存储的是raw data,所以我们可以直接通过文件地址就找到对应memory地址的内容。缺点是文件地址跟memory地址对应,文件地址是连续的,所以,如果memory地址如果是一个很大的数值(例如0xFFB0000),memory在IC上的地址空间不连续的话,那就非常麻烦。

- 优点:简单,直接,文件内容地址跟memory内容地址一一对应,非常直观;
- 缺点:地址连续,无法跨空间,而且是二进制,需要特殊工具查看内容。
3. HEX 文件
本文讨论的HEX,指的是Intel-HEX,它是由Intel制定的格式。
Intel HEX由ASCII文本行组成,这些行由换行符或回车符或两者分隔。每个文本行均包含编码多个二进制数字的十六进制字符。二进制数可以表示数据,内存地址或其他值,这取决于它们在行中的位置以及行的类型和长度。每个文本行都称为一条记录(record)。
Intel Hex的格式这个record包含6部分内容,其格式是这样的:record 实例:020000021200EA
| 格式 | Start code | Byte count | Address | Record type | Data | Checksum |
|---|---|---|---|---|---|---|
| 示例 | : | 02 | 0000 | 02 | 1200 | EA |
-
StartCode:1个字符,ASCII 的冒号 ‘:’
-
Byte count: 2 个Hex 数字,表示这个record 的data 区有几个字节(hex 数字对)。最大值255(0XFF), 16(0X10),和32(0x20 ) 常用
-
Address: 4个hex数字, 表示Memory数据开始16-bit地址偏移。物理地址通常是有这个偏移加上基地址。基地址默认是0,可以通过各种类型的record来更改。基地址和地址偏移通常是一个大端的数值。
-
Record type: 2个hex数字,
00 ~ 05, 表示不同数据段的含义。 -
Data, 一系列data, 表示为
2n个hex数字,具体内容取决于实际应用数据. -
Checksum, 2个hex数字, 以校验这段record内容。
Intel Hex的Checksum 解释:
*record示例 :0300300002337A1E数据和为:03 + 00 + 30 + 00 + 02 + 33 + 7A = E2,这个E2的补码是1E,即这个数据record的补码。
文本行的结束符
Hex文件中,一行记录一个record,所以一个record后面跟这个结束符,即行结束符(可简单理解为换行符),这取决于系统环境,例如Linux用一个LF(即0A),而Windows的是CR LF(0D 0A)。
Record 类型:
Hex编码 类型 描述 示例 00 Data 数据段, 为数据和16 bit起始地址 :0B0010006164647265737320676170A701 End Of File 结束行,一般为文件的最后一行,数据区一般为空 :00000001FF02 Extended Segment Address 数据字段包含与80x86实模式寻址兼容的16位段基址(因此字节数为02)。地址字段(通常为0000)将被忽略。 :020000021200EA03 Start Segment Address 对于80x86处理器,请指定CS:IP寄存器的初始内容。地址字段是0000,字节数是04,前两个字节是CS值,后两个字节是IP值。 :0400000300003800C104 Extended Linear Address 允许32位寻址(最大4GiB)。地址字段将被忽略(通常为0000),字节数始终为02。 :02000004FFFFFC05 Start Linear Address 地址字段是0000(未使用),字节数是04。这四个数据字节代表加载到80386及更高版本CPU的EIP寄存器中的32位值。 :04000005000000CD2A
有时会使用特殊名称来表示使用记录类型的特定子集的HEX文件的格式。例如:
- I8HEX 文件只用了 record types 00 and 01 (16 bit addresses)
- I16HEX 文件只用了 record types 00 through 03 (20 bit addresses)

本文深入解析了SREC、Hex和Bin三种常见的烧录文件格式,涵盖了格式特点、记录结构和实际应用。同时介绍了如何使用SRecord、IntelHex和BinCopy等工具进行文件处理,包括合并、拆分和校验。
1305

被折叠的 条评论
为什么被折叠?



