|
EDA365欢迎您!
您需要 登录 才可以下载或查看,没有帐号?注册
x
HEX文件和BIN文件是我们经常碰到的2种文件格式。下面简单介绍一下这2种文件格式的区别:
. A8 _) i4 R, F3 J) `, _; X$ W
' t: m! X. ~, [+ u C. }! X1 - HEX文件是包括地址信息的,而BIN文件格式只包括了数据本身
& M- j2 _) {: b$ t9 g 在烧写或下载HEX文件的时候,一般都不需要用户指定地址,因为HEX文件内部的信息已经包括了地址。而烧写BIN
+ E# R9 ]6 u; q; k/ c) \( Q 文件的时候,用户是一定需要指定地址信息的。5 s3 w& s7 T( z; l4 F
# k( U1 B5 I" x# N6 n: X& f7 d
- e Z/ | z& A$ ]
3 - BIN文件格式 r& V. G' l2 s& a6 K+ T# k5 P. F
对二进制文件而言,其实没有”格式”。文件只是包括了纯粹的二进制数据。
- F% I) }- k0 X7 X 6 t3 L6 A$ D% f; m+ j; M
0 \2 O, |) r: l3 {; t; h4 - HEX文件格式" o8 U9 d8 a! d. W
HEX文件都是由记录(RECORD)组成的。在HEX文件里面,每一行代表一个记录。记录的基本格式为:
8 {& h* n0 H! D! a5 ?6 v0 r4 k s! y/ p0 ?; a2 ^
+---------------------------------------------------------------+) T1 o. e/ `/ z1 W) G
| RECORD | RECLEN | LOAD | RECTYPE | INFO or DATA | CHKSUM |
9 L/ ^: x8 m$ M E; j | MARK ':' | | OFFSET | | | |
/ y7 E/ D& G1 e: P, g +---------------------------------------------------------------+9 X5 q, w. M2 ?3 w
| 1-byte | 1-byte | 2-byte | 1-byte | n-byte | 1-byte |' A: k3 }) b( B) P, w! L- y( T
+---------------------------------------------------------------+6 }9 h5 I3 T, t. s8 N4 M9 P' ~$ N
记录类型包括: |' P& W9 r8 ]) F* c
'00' Data Rrecord:用来记录数据,HEX文件的大部分记录都是数据记录
( I R( q5 M/ ]1 Z c& W2 y '01' End of File Record: 用来标识文件结束,放在文件的最后,标识HEX文件的结尾$ _9 n! v9 @' F3 A, F. T# B G
'04' Extended Linear Address Record: 用来标识扩展线性地址的记录; Y+ a7 F/ y# V
'02' Extended Segment Address Record: 用来标识扩展段地址的记录
9 O6 e* \/ Q% u7 F1 D - ] Z0 L8 j' |. M0 g
在上面的后2种记录,都是用来提供地址信息的。每次碰到这2个记录的时候,都可以根据记录计算出一个“基”地址。
7 O; v/ I* P8 L o4 F) e 对于后面的数据记录,计算地址的时候,都是以这些“基”地址为基础的。* H, @8 j% k" H% F! b& k, @4 H
; V8 n2 B/ Q/ q4 {) u
数据记录的具体格式:& n' N1 g5 N8 e9 a1 u& T; s8 x7 }
+---------------------------------------------------------------+6 N5 x7 |) c8 T( I8 W- F( a! d
| RECORD | RECLEN | LOAD | RECTYPE | INFO or DATA | CHKSUM |
3 U! z3 \. R& G- \4 M0 r | MARK ':' | | OFFSET | '00' | | |! F! `3 B U8 t4 i
+---------------------------------------------------------------+) Q# l( [3 i7 ?3 k$ c$ W0 b' F
| 1-byte | 1-byte | 2-byte | 1-byte | n-byte | 1-byte |
. c/ l1 G1 j" @/ @; e5 I: K +---------------------------------------------------------------+ 3 t; ?- t! p/ |# \
7 s# S# p8 b* i5 \4 V$ v
看个例子:3 h. P" \4 b! N
:020000040000FA
) q+ i# Z5 L" I :10000400FF00A0E314209FE5001092E5011092E5A3
4 p" `% @; C* H9 o :00000001FF
! [( f0 z9 `. u) a+ w* R( G
# b& p& A4 Z8 S9 ` 对上面的HEX文件进行分析:% k8 b8 q0 ~" }1 X: o/ W
第1条记录的长度为02,LOAD OFFSET为0000,RECTYPE为04,说明该记录为扩展段地址记录。数据为0000,校验和为
( O7 \4 ?! m- Q4 k9 Z3 S$ C FA。从这个记录的长度和数据,我们可以计算出一个基地址,这个地址为0X0000。后面的数据记录都以这个地址为基
! z' @' j' b# {& j* I J 地址。
! P, F4 @% g; a: ?) F& i' X 第2条记录的长度为10(16),LOAD OFFSET为0004,RECTYPE为00,说明该记录为数据记录。5 j- f! H, i# B [1 X0 m; I. i
数据为FF00A0E314209FE5001092E5011092E5,共16个BYTE。这个记录的校验和为A3。此时的基地址为0X0000,加上OFFSET,
/ E. k: N7 ^/ |7 A* H8 @3 o8 ] 这个记录里的16BYTE的数据的起始地址就是0x0000 + 0x0004 = 0x0004.
' d+ ^7 }! }+ T. B 第3条记录的长度为00,LOAD OFFSET为0000,TYPE = 01,校验和为FF。说明这个是一个END OF FILE RECORD,标识8 y6 e' f1 k, a9 ^/ M
文件的结尾。
: |; ~7 `. k+ I2 K - {8 _$ P6 K3 t% G. ?: g
在上面这个例子里,实际的数据只有16个BYTE:FF00A0E314209FE5001092E5011092E5,其起始地址为0x4
+ w! T/ c0 r6 t5 F8 X
# U, t7 c# T5 R: A: ^" i; `4 a9 k5 n0 a" I8 e0 K# I, d
5 - HEX文件和BIN文件大小有区别
' q7 b. a8 j$ c2 J7 l HEX文件是用ASCII来表示二进制的数值。例如一般8-BIT的二进制数值0x3F,用ASCII来表示就需要分别表示字符'3'$ U Q: Z# P" T: T3 w. b
和字符'F',每个字符需要一个BYTE,所以HEX文件需要 > 2倍的空间。
! H$ ]. F8 j9 `3 S. @ 对一个BIN文件而言,你查看文件的大小就可以知道文件包括的数据的实际大小。而对HEX文件而言,你看到的文件8 o) L1 p8 t+ I o. G
大小并不是实际的数据的大小。一是因为HEX文件是用ASCII来表示数据,二是因为HEX文件本身还包括别的附加信息。
. z, f2 n% p# r' [+ x- C L7 T" }' e3 q* u9 v+ B# \. h1 P
0 r0 l6 s! i9 D% p5 ?$ z8 b+ V( r+ |% d2 L/ e
要想详细了解HEX文件格式, 请参见 |
|