|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
HEX文件和BIN文件是我们经常碰到的2种文件格式。下面简单介绍一下这2种文件格式的区别:
* [& N) G" e4 m
g2 p3 U9 m6 ]. L: Q- E7 ]1 - HEX文件是包括地址信息的,而BIN文件格式只包括了数据本身8 V8 V2 a1 \+ \. _8 u! O
在烧写或下载HEX文件的时候,一般都不需要用户指定地址,因为HEX文件内部的信息已经包括了地址。而烧写BIN
3 x Y5 t3 Y3 L) m: k 文件的时候,用户是一定需要指定地址信息的。
9 R$ s0 C* H* |% ~1 X2 y% [9 ?
5 f: ?. |1 B4 v, T. ` ( E) F {' N7 m- v. [0 n0 Y
3 - BIN文件格式( T: z1 E: a5 g! p* W
对二进制文件而言,其实没有”格式”。文件只是包括了纯粹的二进制数据。
7 O( v3 B x0 n$ Z! Q# A+ P* E - a- n$ m6 A6 f2 T4 Y6 V
# d/ C8 z0 b) P7 q
4 - HEX文件格式1 Y! h. @. Z8 r3 g P
HEX文件都是由记录(RECORD)组成的。在HEX文件里面,每一行代表一个记录。记录的基本格式为:2 R5 E2 G+ r! I" k L2 @6 P( P
) k8 l1 O3 B/ f8 y+---------------------------------------------------------------+" Q: m6 z7 t) f5 `3 Z9 q: y( K
| RECORD | RECLEN | LOAD | RECTYPE | INFO or DATA | CHKSUM |
0 ^% s! K/ g3 N | MARK ':' | | OFFSET | | | |' r! c: [: ^$ v1 f8 k0 `
+---------------------------------------------------------------+% F3 b+ A5 |/ N1 s# T+ S9 f% r8 k
| 1-byte | 1-byte | 2-byte | 1-byte | n-byte | 1-byte |1 L+ G1 ^+ q# R8 S6 o; d3 B
+---------------------------------------------------------------+6 A0 a: V# y; O) w8 j8 J
记录类型包括:
]1 [- W+ M5 N# N '00' Data Rrecord:用来记录数据,HEX文件的大部分记录都是数据记录
0 d: a5 z& P1 p( W) ~ '01' End of File Record: 用来标识文件结束,放在文件的最后,标识HEX文件的结尾% e) `, `; L. K! g4 p2 H' e: v
'04' Extended Linear Address Record: 用来标识扩展线性地址的记录
$ i7 g) F8 `; {# u- G '02' Extended Segment Address Record: 用来标识扩展段地址的记录* j$ L& l4 s2 n/ |. S- f2 E; Q
5 I+ X6 }6 ?0 Z% C' g
在上面的后2种记录,都是用来提供地址信息的。每次碰到这2个记录的时候,都可以根据记录计算出一个“基”地址。& P( X4 n! W8 V$ m ~7 r4 b& Z
对于后面的数据记录,计算地址的时候,都是以这些“基”地址为基础的。
& h" E0 r$ a0 r$ ^$ b" ?9 I & ~1 V1 I1 ~; u( g8 m5 l) r1 T
数据记录的具体格式:9 L* N, d( r: m
+---------------------------------------------------------------+& S4 {5 z, `3 J4 m
| RECORD | RECLEN | LOAD | RECTYPE | INFO or DATA | CHKSUM |
1 e: Z; E$ M3 q0 ]- w1 @ | MARK ':' | | OFFSET | '00' | | |
5 C1 H+ `) ^! K% o: q5 x D3 u +---------------------------------------------------------------+
1 C {% t! F5 K: K | 1-byte | 1-byte | 2-byte | 1-byte | n-byte | 1-byte |/ @+ W% j4 O: ^( y
+---------------------------------------------------------------+
3 i1 l0 X9 \, R 5 R l- u0 a/ E6 f. ~
看个例子:& S* w' f z% d9 W
:020000040000FA$ {% m4 C; J$ C7 K. s" q A
:10000400FF00A0E314209FE5001092E5011092E5A3
, W( @0 Z* N# W% x3 r+ x) j, ?$ _8 p :00000001FF 1 R3 g$ X T" a. \6 l
5 `+ S4 w. J/ S* Q4 j 对上面的HEX文件进行分析:
6 j* y4 f0 ?; D" p; X7 ~ 第1条记录的长度为02,LOAD OFFSET为0000,RECTYPE为04,说明该记录为扩展段地址记录。数据为0000,校验和为
) q; M: d/ s2 w( l7 ?5 J' W FA。从这个记录的长度和数据,我们可以计算出一个基地址,这个地址为0X0000。后面的数据记录都以这个地址为基
; [8 ]: D) _6 [* A1 R( N 地址。
, B/ W2 i; b3 ` 第2条记录的长度为10(16),LOAD OFFSET为0004,RECTYPE为00,说明该记录为数据记录。
- A! h+ z* `8 { 数据为FF00A0E314209FE5001092E5011092E5,共16个BYTE。这个记录的校验和为A3。此时的基地址为0X0000,加上OFFSET,& Z3 i- f" I7 P" y6 j4 \
这个记录里的16BYTE的数据的起始地址就是0x0000 + 0x0004 = 0x0004.9 t# E2 d7 Q: z: R- L7 k
第3条记录的长度为00,LOAD OFFSET为0000,TYPE = 01,校验和为FF。说明这个是一个END OF FILE RECORD,标识0 @ P& L6 d, @: e' N
文件的结尾。( P4 i! F; C7 m# Q. h/ I) b
5 y% L4 j, g% x8 o
在上面这个例子里,实际的数据只有16个BYTE:FF00A0E314209FE5001092E5011092E5,其起始地址为0x4$ i1 I4 D8 q( k$ H
% {+ F) S2 o" F& X
% x) e- z7 h$ I4 H5 - HEX文件和BIN文件大小有区别
9 g! @. f7 O" i# \. N HEX文件是用ASCII来表示二进制的数值。例如一般8-BIT的二进制数值0x3F,用ASCII来表示就需要分别表示字符'3'4 A! A$ }& ^0 X5 q6 d$ ]
和字符'F',每个字符需要一个BYTE,所以HEX文件需要 > 2倍的空间。
- W5 e# _/ k" i- g0 d) }( \ 对一个BIN文件而言,你查看文件的大小就可以知道文件包括的数据的实际大小。而对HEX文件而言,你看到的文件
+ C! o" F5 V9 n& |2 ? 大小并不是实际的数据的大小。一是因为HEX文件是用ASCII来表示数据,二是因为HEX文件本身还包括别的附加信息。
5 a9 J' y6 W& r7 v8 b# j8 w" z0 P3 {/ |- p% O, f3 n
0 l" S$ K( f7 l- I$ M3 b* M: @
" y! k, F, W# L. Y7 _
要想详细了解HEX文件格式, 请参见 |
|