【转】单片机HEX文件彻底解读

转:http://www.eefocus.com/craftor/blog/10-07/193051_8ce59.htmlhtml

Craftor原创,首发于与非网,转载请保留此处。编程

HEX文件,是Intel公司提出的按地址排列的数据信息,数据宽度为字节,全部数据使用16进制数字表示。如下是一个HEX文件的内容:spa

:0E00030075801175902275A03375B04480FE93
:03000000020011EA
:0C001100787FE4F6D8FD7581070200033B
:00000001FFhtm

解释:冒号为每行数据的开始符号;蓝色表示此行数据长度,十六进制,如0E就是14;红色是数据存放的地址,如0003;粉红色是表示数据类型,00表示数据记录,01表示文件结束,02表示扩展段地址记录,03表示开始段地址记录,04表示扩展线性地址记录,05表示开始线性地址记录;后面紧跟着的是N位数据,长度由蓝色的长度位决定;天蓝色为校验位。blog

通常单片机程序不会超过64K,因此一般数据类型只会出现00或者01,固然其它状况笔者尚未太深刻研究。内存

根据上面的分析,笔者写了一个将HEX文件转换成比特流文件的C程序,能够将常见的HEX文件写到64K的比特文件里。该程序也是在上一篇笔者写的51单片机软核仿真的时候用到的,转换后的比特文件,能够在ModelSim里用TCL脚本读入到内存里,从而能够对该软核进行具体程序的仿真运行。get

本人喜欢开源,因此公布出C代码。该程序运行会生成内容为65536行8位二进制数据的mem.txt文件,即64K的二进制数据。io

 

 

 

Intel hex 文件经常使用来保存单片机或其余处理器的目标程序代码。它保存物理程序存储区中的目标代码映象。通常的编程器都支持这种格式。
    Intel hex 文件所有由可打印的ASCII字符组成(能够用记事本打开),以下例所示:扩展

        :2000000012014c75a800e4f508f509780a7a78e4f608dafcd283fcfded240af9a7050dbd81        数据类型

        :2000200000010ced2488ec34ff50edc283e4fcfded240af9e76d7013ed33e43c700d0dbd2a        

        :2000400000010ced2488ec34ff50e50509e50970020508e50924a8e50834fd50aee4f50874

    Intel hex 由一条或多条记录组成,每条记录都由一个冒号“:”打头,其格式以下:

         :CCAAAARR...ZZ      

    其中:

CC   

    本条记录中的数据字节数

AAAA   

    本条记录中的数据在存储区中的起始地址

RR   

    记录类型:     

00 数据记录 (data record)     
01 结束记录 (end record)     
02 段记录 (paragraph record)     
03 转移地址记录 (transfer address record)

...   

    数据域

ZZ   

    数据域校验和

    Intel hex文件记录中的数字都是16进制格式,两个16进制数字表明一个字节。CC域是数据域中的实际字节数,地址、记录类型和校验和域没有计算在内。校验和是取记录中从数据字节计数域(CC)到数据域(...)最后一个字节的全部字节总和的2的补码。