Table of Contents
.hex
Link to .hex
.hex
文件, 是一种ASCII文本文件, 文件内容遵循Intel HEX
文本格式
Intex HEX
文件中, 每行包含一个HEX
记录, 记录由十六进制数字组成
Intex HEX
文件, 常用于记录 存储在ROM
或EPROM
中的程序和数据
Intex HEX
文件中, 每行HEX
记录的格式为: :llaaaatt[dd...]cc
除首位:
外, 每个字母均表示一个十六进制数据
:
, 表示 每行HEX
记录 的开始标记ll
, 表示 每行HEX
记录中 的有效载荷数据长度字节aaaa
, 地址字段, 表示 每行HEX
记录中实际存储有效载荷的起始地址tt
, 表示 本行HEX
记录 的类型, 有6种类型:00
, 表示 数据记录01
, 表示 文件结束记录02
, 表示 扩展段地址记录03
, 表示 起始段地址记录04
, 表示 扩展线性地址记录05
, 表示 开始线性地址记录, 这个仅限MDK-ARM
dd
, 表示 每行HEX
记录中 的有效载荷数据, 两个字母表示一个字节, 要与ll
字段记录的字节数对应若,
ll
字段为00
, 本字段不填写cc
, 表示 本行的完整HEX
记录的校验和校验和的计算方法是:
将记录中所有 十六进制数字对 的值相加 模256, 然后取二进制补码
其中, :
ll
aaaa
tt
cc
字段是必须的, dd
字段 与ll
字段需要对应
例子 Link to 例子
这是一个Keil
编译C51
工程生成的.hex
文件的内容:
以首行HEX
记录为例:
12
// LCD9648 示例 .hex 首行
:1007030048454C4C4F20574F524C4400D1A7CFB0D3
:
ll
:10
, 表示 本行HEX
记录中 记录16
字节的有效载荷aaaa
:0703
, 表示 有效载荷数据起始地址在0x0703
tt
:00
, 表示 本行HEX
记录 是数据记录dd
:48454C4C4F20574F524C4400D1A7CFB0
,32
个十六进制字符,16
字节的有效载荷数据, 与ll
对应cc
:D3
, 校验和计算步骤如下:CPP1234561. 计算所有十六进制数字对的和 10+07+03+00+48+45+4C+4C+4F+20+57+4F+52+4C+44+00+D1+A7+CF+B0 = 62D 2. 用 和 % 256(10进制), 100(16进制) 62D -> 1581(10) % 256 = 45 -> 2D 3. 取模结果 取补码 得到校验和 2D -> 00101101 --取反-> 11010010 --加1-> 11010011 -> D3
数据来源—
Arm
开发者文档 和维基百科
:
.bin
Link to .bin
在嵌入式编程中, .bin
文件一般是二进制文件, bin
是binary
的缩写, 是一种非文本文件
如果使用常规的编辑器打开二进制文件, 编辑器显示的内容基本上是乱码, 因为编辑器无法将非文本意义的二进制数据转换成有效文本
在嵌入式编程中, .bin
文件的内容基本就是程序的机器码和数据的二进制
用 HexView
, 打开 Keil
对同一工程生成的.hex
和.bin
文件, 可以看到两个文件的二进制数据是相同的:
Keil
编译C51
工程, 由.hex
生成.bin
的方法, 请阅读Arm
开发者文档: