参考:https://blog.csdn.net/spdian/article/details/52963467 https://zhidao.baidu.com/question/180988134632085124.html
在烧写或下载HEX文件的时候,一般都不需要用户指定地址,因为HEX文件内部的信息已经包括了地址。而烧写BIN文件的时候,用户是一定需要指定地址信息的。 HEX文件是十六进制文件,整个文件以行为单位,每行以冒号开头,内容全部为16进制码。第一个字节表示本行数据的长度;第二、三字节表示本行数据的起始地址;第四字节表示数据类型,数据类型有:0x00、0x01、0x02、0x03、0x04、0x05。然后是数据字段,最后一个字节为校验和。
00用来记录数据,HEX文件的大部分记录都是数据记录01用来标识文件结束,放在文件的最后,标识HEX文件的结尾02用来标识扩展段地址的记录03开始段地址记录04用来标识扩展线性地址的记录05开始线性地址记录举个栗子
:020000040000FA :10000400FF00A0E314209FE5001092E5011092E5A3 :00000001FF
对上面的HEX文件进行分析: 第1条记录的长度为02,LOAD OFFSET为0000,RECTYPE为04,说明该记录为扩展段地址记录。数据为0000,校验和为 FA。从这个记录的长度和数据,我们可以计算出一个基地址,这个地址为0X0000。后面的数据记录都以这个地址为基地址。 第2条记录的长度为10,LOAD OFFSET为0004,RECTYPE为00,说明该记录为数据记录。 数据为FF00A0E314209FE5001092E5011092E5,共16个BYTE。这个记录的校验和为A3。此时的基地址为0X0000,加上OFFSET, 这个记录里的16BYTE的数据的起始地址就是0x0000 + 0x0004 = 0x0004。 第3条记录的长度为00,LOAD OFFSET为0000,TYPE = 01,校验和为FF。说明这个是一个END OF FILE RECORD,标识 文件的结尾。
例如一个的十六进制数值0x3F,用ASCII来表示就需要分别表示字符’3’和字符’F’,每个字符需要一个BYTE,所以HEX文件需要 > 2倍的空间。 HEX文档是ASCII码的文档。是不能直接烧到单片机中的。中间要有转换程序。但是现在很多编程器都设计成直接可以导入hex文件烧录的,其实这是做了设计的。bin文件是二进制文件,是可以直接烧到芯片中,中间不用转换的。