EDA365电子工程师网
标题:
教你一眼看出.HEX和.BIN文件格式
[打印本页]
作者:
duzy
时间:
2016-6-16 10:41
标题:
教你一眼看出.HEX和.BIN文件格式
HEX文件和BIN文件是我们经常碰到的2种文件格式。下面简单介绍一下这2种文件格式的区别:
+ Q5 ^8 K6 _8 w; C: O
7 K4 Q- p& k" i% `4 L5 [7 O
1 - HEX文件是包括地址信息的,而BIN文件格式只包括了数据本身
7 ~ y. j, D, X; A
在烧写或下载HEX文件的时候,一般都不需要用户指定地址,因为HEX文件内部的信息已经包括了地址。而烧写BIN
# p; j% Z/ E$ s/ C
文件的时候,用户是一定需要指定地址信息的。
6 C0 y( \% { p- s( V! V! ^
' v8 c% k9 Z& F! X
, L* q# P+ u# u+ E7 D
3 - BIN文件格式
9 \8 g7 }+ m D
对二进制文件而言,其实没有”格式”。文件只是包括了纯粹的二进制数据。
% I/ B3 _" }5 @2 Y0 ^7 D
( B( G- V8 t! \3 T! m
5 }8 |* P8 A% o' M* |8 I$ G
4 - HEX文件格式
- K {3 s% j* x3 [4 z
HEX文件都是由记录(RECORD)组成的。在HEX文件里面,每一行代表一个记录。记录的基本格式为:
& j* R6 @2 s p k% w: d2 o
& e5 F' M2 y0 \; g4 L
+---------------------------------------------------------------+
6 k2 Y( [% R! o# p
| RECORD | RECLEN | LOAD | RECTYPE | INFO or DATA | CHKSUM |
% T) w4 p7 w1 `9 |9 f2 g w, X% b( m
| MARK ':' | | OFFSET | | | |
) r k+ W! V W5 V3 e: r+ @) l
+---------------------------------------------------------------+
& E6 T5 {% E9 B% B4 _
| 1-byte | 1-byte | 2-byte | 1-byte | n-byte | 1-byte |
) a9 j1 {+ b* E6 f, u' r9 l2 e
+---------------------------------------------------------------+
: }* K: L8 h/ |! z5 i
记录类型包括:
- U- }. S/ v* u& R9 l2 X% i) P6 D
'00' Data Rrecord:用来记录数据,HEX文件的大部分记录都是数据记录
9 z' [$ q. m$ L% J8 b
'01' End of File Record: 用来标识文件结束,放在文件的最后,标识HEX文件的结尾
! l' j: a% A. `
'04' Extended Linear Address Record: 用来标识扩展线性地址的记录
5 i! q( e0 @1 J
'02' Extended Segment Address Record: 用来标识扩展段地址的记录
: i( E2 [" E6 k3 d7 b; S/ M2 O
! {+ Y. s' N* \8 F
在上面的后2种记录,都是用来提供地址信息的。每次碰到这2个记录的时候,都可以根据记录计算出一个“基”地址。
& y6 R) ~/ R! ?2 W
对于后面的数据记录,计算地址的时候,都是以这些“基”地址为基础的。
3 ~% O2 B- ^0 e' s9 U9 @0 O( T
) D) _9 A! D' t6 K
数据记录的具体格式:
# \4 R& T" G+ F, Y
+---------------------------------------------------------------+
& ~) R* o* t+ {* @+ t
| RECORD | RECLEN | LOAD | RECTYPE | INFO or DATA | CHKSUM |
$ X- R& e6 ]- R! y P! Z+ M
| MARK ':' | | OFFSET | '00' | | |
. K( P1 j y: G
+---------------------------------------------------------------+
K/ R8 C& y/ t# d
| 1-byte | 1-byte | 2-byte | 1-byte | n-byte | 1-byte |
8 R$ _5 ^- [* l9 D
+---------------------------------------------------------------+
0 K7 F% Q1 I7 [- d
2 v/ m9 O1 X$ n0 Z' V8 c' g
看个例子:
4 z8 @ e# O$ o0 e; e5 ~
:020000040000FA
) P& u Y7 D, R) ?8 T( J
:10000400FF00A0E314209FE5001092E5011092E5A3
8 v3 `1 F3 }+ F2 x2 z) W
:00000001FF
( H# B1 A: e% v/ D( |
' |) U' J5 c# p! H" b
对上面的HEX文件进行分析:
* `6 H* c8 j" ?2 f* v2 D; ^% ?
第1条记录的长度为02,LOAD OFFSET为0000,RECTYPE为04,说明该记录为扩展段地址记录。数据为0000,校验和为
9 X6 r7 Z8 h! f. j; |( q
FA。从这个记录的长度和数据,我们可以计算出一个基地址,这个地址为0X0000。后面的数据记录都以这个地址为基
& \) _* V& F2 y) r" }' X% F% k) R
地址。
' j' E- j: B2 j S- s) b
第2条记录的长度为10(16),LOAD OFFSET为0004,RECTYPE为00,说明该记录为数据记录。
4 S) T8 ^, z/ _% B K
数据为FF00A0E314209FE5001092E5011092E5,共16个BYTE。这个记录的校验和为A3。此时的基地址为0X0000,加上OFFSET,
' p3 B, f2 X- L" P! [
这个记录里的16BYTE的数据的起始地址就是0x0000 + 0x0004 = 0x0004.
5 `" }" n# K' _4 q$ X
第3条记录的长度为00,LOAD OFFSET为0000,TYPE = 01,校验和为FF。说明这个是一个END OF FILE RECORD,标识
- C- ~5 Q/ Z; e& i+ C$ t
文件的结尾。
7 W- [; J" R- y. @3 {* W5 I
$ H3 i J/ {$ R
在上面这个例子里,实际的数据只有16个BYTE:FF00A0E314209FE5001092E5011092E5,其起始地址为0x4
6 O( Y: q! @. H, |- s$ _* P9 Q
, ^5 F: `. p0 `) n0 \% v6 Q7 F: q
9 p: X( `$ O3 ]* l( k2 w
5 - HEX文件和BIN文件大小有区别
! l/ Y6 M' Y& h
HEX文件是用ASCII来表示二进制的数值。例如一般8-BIT的二进制数值0x3F,用ASCII来表示就需要分别表示字符'3'
$ F) x" G2 v" M) @! A/ M
和字符'F',每个字符需要一个BYTE,所以HEX文件需要 > 2倍的空间。
! D, a& f% V6 Q F. U1 F0 B
对一个BIN文件而言,你查看文件的大小就可以知道文件包括的数据的实际大小。而对HEX文件而言,你看到的文件
$ \" e" M" h( k; k9 G' n
大小并不是实际的数据的大小。一是因为HEX文件是用ASCII来表示数据,二是因为HEX文件本身还包括别的附加信息。
1 \$ B# ]' {/ c. i" [
$ Q7 U3 i b4 c8 o
4 t% P, r6 V2 X6 M! d/ b
: I. `: E8 w2 m
要想详细了解HEX文件格式, 请参见
INTEL HEX PDF文档.pdf
2016-6-16 10:41 上传
点击文件名下载附件
下载积分: 威望 -5
18.49 KB, 下载次数: 1, 下载积分: 威望 -5
作者:
Gegu
时间:
2016-6-20 14:08
感谢分享!!!
- ?% w: ]0 e9 \# B) L
欢迎光临 EDA365电子工程师网 (https://bbs.elecnest.cn/)
Powered by Discuz! X3.2