用记事本打开hex文件,是一串十六进制字符:
上面就是一个hex文件内容首尾的一部分数据,很明显可以看出这不是二进制数据。Hex文件是用ASCII来表示二进制的数值,十六进制数组成的指令或者数据,每一行就是一个hex记录。
hex文件每一行的数据格式为:
冒号 | 数据长度 | 存储地址 | 数据类型 | 数据内容 | 校验值 |
---|---|---|---|---|---|
1字节 | 2字节 | 1字节 | n字节 | 1字节 |
冒号后两位数字代表数据长度,即该行数据内容的长度值,例如第一行,:020000040800F2中的“02”表示数为0x02,“F2”就表示为0xF2。如果数据位地址时,地址高位在前低位在后。
数据内容在flash中的存储地址是数据长度后四位数字,但是由于存储地址只占有2个字节所以最大只能到64K,对于超过64K的数据就不能编码存储地址。
以第一行“:020000040800F2”为例:
数据类型位的值是“04”那么04后面的数据内容0800则为存储后面数据的基地址
以第二行”:100000000006002031010008390100083B0100080A“为例:
1、“:”表示一行的开始;
2、第1、2个字符10,即“0x10”表示本行包含的数据长度为16个;
3、第3、4、5、6个字符0000,固定这4位表示地址,即“0000”表示数据存储的起始地址,表示在0x0000地址开始存放本行包含的16个数据。
4、第7、8个字符00,固定这2位表示本行包含数据数据的类型,即“00”表示本行包含的数据为实际烧写的数据。
5、由前两个字符“10”可知本行的数据长度位16个字节,所有往后的32个字符就是本行包含的数据,每两个字符表示一个字节数据,总共有16个字节数据。跟最前两个字符决定的长度一致。但是这个数据的长度不是固定的。
6、最后两个字符0A为本行的校验码。