BIN转HEX详解

来源:互联网 发布:松竹歌舞伎 知乎 编辑:程序博客网 时间:2024/05/22 07:42

一、准备

1.bin文件和hex文件

bin文件即二进制文件,区别于.mp3  .avi  .pdf等格式的文件,以.bin后缀结尾,内容是二进制信息(非文本文件,即内容不是ascii码)

hex文件即intel hex格式的文本文件,以十六进制表示,具有地址信息,可烧录进mcu。

2.工具

linux编程环境、nodepad++

 

二、hex文件格式

:aabbbbcc[xx.........]dd

 

aa 标明xx.......的长度

bbbb 偏移地址,完整地址低16位

cc 此条数据的类型

'00' Data Record

'01' End of File Record

'02' Extended Segment Address Record

'03' Start Segment Address Record

'04' Extended Linear Address Record

'05' Start Linear Address Record

xx......  数据

dd  此条数据的校验和(求和、模256、补码)

 

1.地址信息

hex文件需要在每一块sector的开始处写上地址信息,此信息可供烧录工具查找并烧录到相应地址。

如烧写到0x08000000

需要写入:

020000040800f2

02表明数据部分长度为2个字节(0x0800)

0000表明偏移地址是0x0000

04表示后面跟着的数据是基地址

0800表示基地址是0x0800

f2表示校验和( 求和:02+00+00+04+08+00=0x0e, 模256:0x0e%256 = 0x0e, 补码:0x100-0x0e = 0xf2 )

 

2.数据信息

hex的数据格式可以16个数据为一行,也可以32个数据为一行

因为每个sector开始时都需要写上地址信息,假设sector size为 2048字节 ,则每隔 128 (2048/16)行需要写上地址信息

hex文件的数据可以不写满一个sector块

hex文件的数据可以地址不连续,比如第一个块由地址信息给出地址0x08000000,第二个块可以指定从0x08003000开始。地址可以不连续,但新的sector必须有地址信息

 

3.结束信息

在文件的最后写上结束信息表示结束,结束信息内容固定不变,

为:

:00000001FF

 

 

三、bin转hex

知道了bin和hex的区别,转换就有思路了

 

1.hex文件开头写入地址信息,表示接下来的一块新sector需要烧写到flash的哪一个地址

020000040800f2

2.读取一行bin数据,并把数据转为ascii码(比如第一个数据1,需要转为字符‘1’)

一行bin数据 : 40 11 00 20 99 37 00 08 53 20 00 08 55 20 00 08 

一行hex数据(十六进制显示) :0d 0a 3a 31 30 30 30 31 30 30 30 35 37 32 30 30 30 30 38 35 39 32 30 30 30 30 38 35 42 32 30 30 30 30 38 30 30 30 30 30 30 30 30 

一行hex数据(文本格式显示) :40110020993700085320000855200008

 

3.添加此行的hex信息

:10000000  40110020993700085320000855200008  AF

 

按照此思路可轻松完成bin到hex格式的转换

0 0