|
EDA365欢迎您!
您需要 登录 才可以下载或查看,没有帐号?注册
x
HEX文件和BIN文件是我们经常碰到的2种文件格式。下面简单介绍一下这2种文件格式的区别:: ~1 a [- P6 K4 ^
: L" g* ~7 n9 {6 ^6 Y1 - HEX文件是包括地址信息的,而BIN文件格式只包括了数据本身
+ f& W2 J- {! F8 s7 q: n 在烧写或下载HEX文件的时候,一般都不需要用户指定地址,因为HEX文件内部的信息已经包括了地址。而烧写BIN: H. o: b0 v; K. F
文件的时候,用户是一定需要指定地址信息的。) ^; C# m% p% |# k0 ^0 P
$ S/ N+ N0 T# o& a+ _ * q( G7 K: @9 {6 s
3 - BIN文件格式3 I/ i9 J" @3 ~
对二进制文件而言,其实没有”格式”。文件只是包括了纯粹的二进制数据。
5 {3 f/ _) \; V2 z/ T . T6 @. S- v; L$ E
* d3 U# Q3 r% O2 X# A7 H- B3 A4 - HEX文件格式
6 \: _# D+ o9 d, ~ HEX文件都是由记录(RECORD)组成的。在HEX文件里面,每一行代表一个记录。记录的基本格式为:" u5 \0 F0 B+ v' j( j/ ?
: Q, N I" _+ \' x1 V4 Y/ J+---------------------------------------------------------------+! g' W1 f- E5 c- o7 c
| RECORD | RECLEN | LOAD | RECTYPE | INFO or DATA | CHKSUM |
* G/ i# w6 u1 l0 f | MARK ':' | | OFFSET | | | |
4 Z/ Z7 L" } } +---------------------------------------------------------------+. v& C! x2 D5 {' H# M" p
| 1-byte | 1-byte | 2-byte | 1-byte | n-byte | 1-byte |* w$ o2 Z6 b7 U- g; `3 U: S
+---------------------------------------------------------------+3 V$ A- e+ F/ |6 o2 c
记录类型包括:* z8 D4 C- H) Z
'00' Data Rrecord:用来记录数据,HEX文件的大部分记录都是数据记录- v+ i5 [3 V X; ^* k' Q
'01' End of File Record: 用来标识文件结束,放在文件的最后,标识HEX文件的结尾
& D( ]& q3 \3 r '04' Extended Linear Address Record: 用来标识扩展线性地址的记录& V) S- W* f: L; x: @/ A b
'02' Extended Segment Address Record: 用来标识扩展段地址的记录
* Y1 g+ F$ \, }, c3 q1 t( W( D$ { h+ t$ ^# ]% ~& ?2 g
在上面的后2种记录,都是用来提供地址信息的。每次碰到这2个记录的时候,都可以根据记录计算出一个“基”地址。1 q; q( N8 I+ b
对于后面的数据记录,计算地址的时候,都是以这些“基”地址为基础的。/ I7 s. `; L/ N6 H
0 h/ c& r( Q, R4 V- v
数据记录的具体格式:
# l" U! z: l$ ^, M3 A +---------------------------------------------------------------+
4 y5 f2 `2 D: w | RECORD | RECLEN | LOAD | RECTYPE | INFO or DATA | CHKSUM |
" I; b3 [* n' { | MARK ':' | | OFFSET | '00' | | |9 V: p% f( g' T$ R
+---------------------------------------------------------------+
# T) x& r% a' P$ ^' j | 1-byte | 1-byte | 2-byte | 1-byte | n-byte | 1-byte |
9 a% n6 C2 G3 t +---------------------------------------------------------------+
" A9 d' d! q1 f' ~9 x4 _; _( n, q
* G! ], Q* |" w# j 看个例子:
2 A1 A$ p* D2 e :020000040000FA& o/ l6 A# a8 `
:10000400FF00A0E314209FE5001092E5011092E5A3( D$ p; K; t U+ Z* H( P, |
:00000001FF
9 L3 U! i) x# `- B" O+ @ # B7 Z/ `' e% V! S3 S5 D$ n
对上面的HEX文件进行分析:
, P* f5 _2 c% }0 C/ J 第1条记录的长度为02,LOAD OFFSET为0000,RECTYPE为04,说明该记录为扩展段地址记录。数据为0000,校验和为
. B* b+ Y+ Z3 Q/ i- w& ^- x8 r5 @ FA。从这个记录的长度和数据,我们可以计算出一个基地址,这个地址为0X0000。后面的数据记录都以这个地址为基
4 Y( i* I% W3 o4 j 地址。
' r3 i) s. A8 [ 第2条记录的长度为10(16),LOAD OFFSET为0004,RECTYPE为00,说明该记录为数据记录。
; I8 ?8 o$ I+ c) p z 数据为FF00A0E314209FE5001092E5011092E5,共16个BYTE。这个记录的校验和为A3。此时的基地址为0X0000,加上OFFSET,4 e# l2 z3 c( n8 [( ?
这个记录里的16BYTE的数据的起始地址就是0x0000 + 0x0004 = 0x0004.3 y4 c" x8 y1 W4 G$ M7 J/ j
第3条记录的长度为00,LOAD OFFSET为0000,TYPE = 01,校验和为FF。说明这个是一个END OF FILE RECORD,标识
) r9 H$ w+ o& Y' n4 h5 d3 p- f! ` 文件的结尾。
) ~5 S* z% ?+ X: @6 p0 G
9 \2 g, x4 D5 T* v9 D 在上面这个例子里,实际的数据只有16个BYTE:FF00A0E314209FE5001092E5011092E5,其起始地址为0x4: L+ B+ h0 `" J8 D5 \: s
$ D. O) x# [& H* g& p0 m: _/ k
& ~8 |0 S" C( J' x; l7 C5 - HEX文件和BIN文件大小有区别
9 \' h/ n a+ q; G! @; Z4 S4 j5 Q HEX文件是用ASCII来表示二进制的数值。例如一般8-BIT的二进制数值0x3F,用ASCII来表示就需要分别表示字符'3'$ ?+ n" N8 g$ A# d3 J0 W. E1 S' {
和字符'F',每个字符需要一个BYTE,所以HEX文件需要 > 2倍的空间。
, p8 f1 X1 l9 L$ @6 B1 X' ^. p( \3 t 对一个BIN文件而言,你查看文件的大小就可以知道文件包括的数据的实际大小。而对HEX文件而言,你看到的文件
& R5 u1 ?) ?& `; P, C+ U$ P 大小并不是实际的数据的大小。一是因为HEX文件是用ASCII来表示数据,二是因为HEX文件本身还包括别的附加信息。, W) H9 I6 s: q, ^) g/ T4 g
: w7 _( q, t7 K4 a3 c
" T9 |$ H7 q+ }" V4 |# a; u. ^. E( w9 a- a7 E
要想详细了解HEX文件格式, 请参见 |
|