SRECHexBin 烧录文件格式解读

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

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上的地址空间不连续的话,那就非常麻烦。

img

  • 优点:简单,直接,文件内容地址跟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
  1. StartCode:1个字符,ASCII 的冒号 ‘:’

  2. Byte count: 2 个Hex 数字,表示这个record 的data 区有几个字节(hex 数字对)。最大值255(0XFF), 16(0X10),和32(0x20 ) 常用

  3. Address: 4个hex数字, 表示Memory数据开始16-bit地址偏移。物理地址通常是有这个偏移加上基地址。基地址默认是0,可以通过各种类型的record来更改。基地址和地址偏移通常是一个大端的数值。

  4. Record type: 2个hex数字, 00 ~ 05, 表示不同数据段的含义。

  5. Data, 一系列data, 表示为 2n 个hex数字,具体内容取决于实际应用数据.

  6. 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起始地址 :0B0010006164647265737320676170A7
    01 End Of File 结束行,一般为文件的最后一行,数据区一般为空 :00000001FF
    02 Extended Segment Address 数据字段包含与80x86实模式寻址兼容的16位段基址(因此字节数为02)。地址字段(通常为0000)将被忽略。 :020000021200EA
    03 Start Segment Address 对于80x86处理器,请指定CS:IP寄存器的初始内容。地址字段是0000,字节数是04,前两个字节是CS值,后两个字节是IP值。 :0400000300003800C1
    04 Extended Linear Address 允许32位寻址(最大4GiB)。地址字段将被忽略(通常为0000),字节数始终为02。 :02000004FFFFFC
    05 Start Linear Address 地址字段是0000(未使用),字节数是04。这四个数据字节代表加载到80386及更高版本CPU的EIP寄存器中的32位值。 :04000005000000CD2A
     							![img](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9naXRlZS5jb20vYnVpbGRtZS9JbWFnZS9yYXcvbWFzdGVyL2ltZy8yMDIwMDkwMTE0MDc0MA?x-oss-process=image/format,png)
    

    img

    有时会使用特殊名称来表示使用记录类型的特定子集的HEX文件的格式。例如:

    1. I8HEX 文件只用了 record types 00 and 01 (16 bit addresses)
    2. I16HEX 文件只用了 record types 00 through 03 (20 bit addresses)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值