关于hex格式和mot格式转bin格式的总结

关于hex格式和mot格式转bin格式的总结
关于hex格式和mot格式转bin格式的总结

关于hex格式和mot格式转bin格式的总结

本文介绍用java转换hex和mot的方式

Hex格式文件是Intel产品主要格式文件,mot格式文件是摩托罗拉公司推出的格式文件。从解析方式上不能一概而论。倒是文件结构大体一致。

Bin文件是数据文件,一般来说从hex或mot转成的bin文件都比原文件小。因为hex 文件和mot文件都有很多描述文件和数据文件,而bin文件只要数据不需要描述。

Hex文件中的:标记了一行的开始。其后的每两个字符(不区分字母或数字)都看作一个字节。其中一行中包括

:|数据长度1字节|数据地址2字节|数据类型1字节|数据n字节|校验1字节

可以看出除了数据字节不确定其它都是固定的。而且数据类型中只有00类型的是数据记录,所以每一行中判断数据类型除了是00的其它的都可以不看。我们要取数据字节就要刨除:|数据长度|数据地址|数据类型|校验,5个字节和1个:共11个字符之外其它都是数据了。

while(true){

sLine=br.readLine();

if(sLine==null){

break;

}

//注意,字符串长度上:占了1位,在截取时要算进去

if(sLine.substring(0, 1).equals(":")){

//00000001为文件的结束描述

if(sLine.substring(1,9).equals("00000001")){

break;

}

//数据类型在第7和8位上(00为数据记录,01文件结束记录,02地址延伸

//03地址开始部分,04线性地址记录,05开始线性地址记录

//转为bin文件只取数据记录

if(sLine.substring(7, 9).equals("00")){

//数据从第9位开始到倒数第3位。后两位是数据校验

srtb.append(sLine.substring(9,sLine.length()-2));

}

}

}

byte[] filebin=hexStringToBytes(srtb.toString());mot文件跟hex文件基本一样,mot文件不同的是数据描述有三种类型,三种类型的最大区别就是地址占用的长度不一致。这样在取数据部分的时候就要判断数据描述类型。根据类型取数据。mot文件中一行包括

数据类型1字节|数据长度1字节|数据地址(2,3,4)字节不等|数据n字节|校验1字节mot文件麻烦一点就在数据地址长度不固定。但也是有规律的,规律就在数据类型上。我们只关注数据mot文件行中出了S1,S2,S3是数据类型其它都是描述类型。S1类型数据地址2字节,S2类型数据地址3字节,S3类型数据地址4字节。那么如果是一行S1的类型数据S113106A000EE00338D46AA8000EE004F03030D54C这是一行随意截取的真实数据我们来

分析下;S1类型,数据长度13(这是16进制哦),地址106A,数据000EE00338D46AA8000EE004F03030D5,校验4C。地址2字节+数据部分32个字符占16字节+校验1字节=19字节。数据长度13刚好,如果你看不明白去好好看看进制换算。(16进制的13就是10进制的19)。如果看不明白没关系贴段代码去复制吧。

while(true){

sLine=br.readLine();

if(sLine==null){

break;

}

//前两位占一字节文件类型描述

//S1地址2字节,长度1字节,加上本身1字节占去4字节,从第9位开始

if(sLine.substring(0, 2).equals("S1")){

//数据从第9位开始到倒数第3位。后两位是数据校验

srtb.append(sLine.substring(8, sLine.length()-2));

//S2地址3字节,相应数据截取往后退两位开始截取

}else if(sLine.substring(0, 2).equals("S2")){

srtb.append(sLine.substring(10, sLine.length()-2));

//S2地址4字节,相应数据截取往后再退两位开始截取

}else if(sLine.substring(0, 2).equals("S3")){

srtb.append(sLine.substring(12, sLine.length()-2));

}

}

byte[] filebin=hexStringToBytes(srtb.toString());

个人觉得hex文件操作相对简单。所以篇幅有点少。代码为真实项目片段,无毒,环保,健康。

IntelHEX格式简介

什么是Intel HEX格式? Intel HEX文件是记录文本行的ASCII文本文件,在Intel HEX文件中,每一行是一个HEX记录 由十六进制数组成的机器码或者数据常量,Intel HEX文件经常被用于将程序或数据传输 存储到ROM.EPROM,大多数编程器和模拟器使用Intel HEX文件. 记录格式 一个Intel HEX文件可以包含任意多的十六进制记录,每条记录有五个域,下面是一个记录的格式. :llaaaatt[dd...]cc 每一组字母是独立的一域,每一个字母是一个十六进制数字,每一域至少由两个十六进制数字组成,下面是字节的描述. :冒号是每一条Intel HEX记录的开始 ll 是这条记录的长度域,他表示数据(dd)的字节数目. aaaa 是地址域,他表示数据的起始地址 <如果是数据记录,这表示将要烧录的这条记录中的数据在EPROM中的偏移地址, 对于不支持扩展段地址和扩展线性地址的,如89C51,这就是此条记录的起始地址> tt 这个域表示这条HEX记录的类型,他有可能是下面这几种类型 00 ----数据记录 01 ----文件结束记录 02 ----扩展段地址记录 04 ----扩展线性地址记录 dd 是数据域,表示一个字节的数据,一个记录可能有多个数据字节,字节数目可以 查看ll域的说明 cc 是效验和域,表示记录的效验和,计算方法是将本条记录冒号开始的所有字母对 <不包括本效验字和冒号> 所表示的十六进制数字 <一对字母表示一个十六进制数,这样的一个十六进制数为一个字节>

都加起来然后模除256得到的余数最后求出余数的补码即是本效验字节cc. <例如: :0300000002005E9D cc=0x01+NOT((0x03+0x00+0x00+0x00+0x02+0x00+0x5E)%0x100)=0x01+0x 9C=0x9D C语言描述: UCHAR cc; cc=(UCHAR)~(0x03+0x00+0x00+0x00+0x02+0x00+0x5E); cc++; > 数据记录 Intel HEX文件由若干个数据记录组成,一个数据记录以一个回车和一个换行结束 <回车为0x0d换行为0x0a> 比如下面的一条数据记录 :10246200464C5549442050524F46494C4500464C33 10 是此行记录数据的字节数目 2462 是数据在内存<将要烧写的eprom地址>中的起始地址 00 是记录类型00(是一个数据记录) 464C 到464C 是数据 33 是此行记录的效验和 扩展线性地址记录(HEX386) 扩展线性地址记录也可称为32位地址记录和HEX386记录,这个纪录包含高16(16-31位)位数据地址,这种扩展的线性记录总是有两个字节数据,像下面这样: :02000004FFFFFC 02 是记录的数据字节数目 0000 是地址域这在扩展地址记录中总是0000 04 是记录类型04(扩展地址记录) FFFF 是高16位地址 FC 是记录效验和,计算方法如下: 01h + NOT(02h + 00h + 00h + 04h + FFh + FFh) 当一个扩展线性地址记录被读到后,扩展线性地址记录的数据区域将被保存 并应用到后面从Intel HEX文件中读出的记录,这个扩展线性记录一直有效, 直到读到下一个扩展线性记录.

HEX格式

HEX文件格式学习笔记 为了编写一个可以按照自己的要求进行ISP的程序,大概学习了一下HEX文件格式。把学习笔记写出来,以为重新巩固所学习内容。 HEX文件以行为单位。每行以字符‘:’ (0x3a)开头,以回车换行符 0x0d, 0x0a为结束。每行开始和结束之间的所有内容,都是以字符形式 表现的。例如数据如果是 0x1A ,那么转换到HEX格式的行里面就是0x31 0x41。如果数据是16bit的,例如地址,则先显示高位,后显示底位。例如 0x1234,转换成HEX格式文件后变成 0x31 0x32 0x33 0x34,显示出来以后就是1234。将数据部分内容每2个字符看做一个HEX数据,例如: :020*********FA , 我把它看做 0x02 0x00 0x00 0x04 0x00 0x00 0xFA 第一个 0x02 为数据长度。 紧跟着后面的0x00 0x00 为地址。 再后面的0x04为数据类型,类型共分一下几类: '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 然后,接着0x04后面的两个 0x00 0x00就是数据。最后一个0xFA 是校验码。 HEX文件的每一行都是这样的格式:

在例如: :1000000018F09FE518F09FE518F09FE518F09FE5C0 安装上面的数据行格式分析如下: 每行中的数据并不是一定有的,第二个直接的数据长度为0,那么这行就没有数据。 由于每行标识数据地址的只有2Byte,所以最大只能到64K,为了可以保存更大数据地址数据,就有了Extended Linear Address Record。如果这行的数据类型是0x04,那么,这行的数据就是随后数据的基地址。例如: :020*********F6 :1000000018F09FE518F09FE518F09FE518F09FE5C0 :1000100018F09FE5805F20B9F0FF1FE518F09FE51D 第一行,是Extended Linear Address Record,里面的基地址是0x0004,第二行是Data Record,里面的地址值是0x0000。那么数据18F09FE518F09FE518F09FE518F09FE5要写入FLASH中的地址为 (0x0004 << 16) | 0x0000,也就是写入FLASH的0x40000这个地址。同样,第三行的数据的写入地址为0x40010。当一个HEX文件的数据超过64k的时候,文件中就会出现多个Extended Linear Address Record。 End of File Record 行是每一个HEX文件的最后一行。例如: :00000001FF

Hex文件格式说明文档

Hex File Reference The postlocator is responsible for generating the hex file needed for the ROM flow. It can also be used by emulator and simulator for testing purposes. Due to the data structure of Intel hex files, it is not possible to handle virtual and physical addresses as data structures within the same file nor virtual addresses for multiple levels. Therefore, SLE 79 specific information is provided within comment lines. Such information are comments to be is played in the ROM generator GUI, date and time of creation, segment descriptors, virtual addresses and so on. Note: The Intel hex file is an ASCII text file with lines of text that follow the Intel hex file format. Each data line in an Intel hex file contains one hex record. These records are made up of hexadecimal numbers that represent machine language code and/or constant data. Intel hex files are often used to transfer program and data to be stored in ROM or NVM. 1.1 Hex File Structure The SLE 70 hex file is divided into three parts which have to occur in the described order: ? Comment part containing the following information: –As first line “; TYPE=SLE70_MASK_IHEX” as identifier for the SLE 70 hex file format. – Five sections in arbitrary order - COMMENT (optional) - INFO - MEMORY_ADDRESSES - CONFIG - DESCRIPTOR – The keywords inside these sections may contain - Letters “a –z” and ”A –Z” (not case sensitive) - Digits “0 –9” but not as first character - “-” or “_” but not as the first character -Leading and trailing spaces are ignored ? Data part which data lines (records) start always with a colon “:”. The only comments allowed in this part are the definitions of the virtual addresses “V_ADDR = 0x...”. These comments are allowed at the beginning of a line and define the virtual address for the following data lines until another definition of the virtual address. The virtual address must contain the level information in the upper byte. The offset

Intel Hex文件格式说明

Intel HEX文件是记录文本行的ASCII文本文件,在Intel HEX文件中,每一行是一个HEX记录 由十六进制数组成的机器码或者数据常量,Intel HEX文件经常被用于将程序或数据传输 存储到ROM.EPROM,大多数编程器和模拟器使用Intel HEX文件. 记录格式 一个Intel HEX文件可以包含任意多的十六进制记录,每条记录有五个域,下面是一个记录的格式. :llaaaatt[dd...]cc 每一组字母是独立的一域,每一个字母是一个十六进制数字,每一域至少由两个十六进制数字组成,下面是字节的描述. :冒号是每一条Intel HEX记录的开始 ll 是这条记录的长度域,他表示数据(dd)的字节数目. aaaa 是地址域,他表示数据的起始地址 <如果是数据记录,这表示将要烧录的这条记录中的数据在EPROM中的偏移地址, 对于不支持扩展段地址和扩展线性地址的,如89C51,这就是此条记录的起始地址> tt 这个域表示这条HEX记录的类型,他有可能是下面这几种类型 00 ----数据记录 01 ----文件结束记录 02 ----扩展段地址记录 04 ----扩展线性地址记录 dd 是数据域,表示一个字节的数据,一个记录可能有多个数据字节,字节数目可以 查看ll域的说明 cc 是效验和域,表示记录的效验和,计算方法是将本条记录冒号开始的所有字母对 <不包括本效验字和冒号> 所表示的十六进制数字 <一对字母表示一个十六进制数,这样的一个十六进制数为一个字节> 都加起来然后模除256得到的余数最后求出余数的补码即是本效验字节cc. <例如: :0300000002005E9D cc=0x01+NOT((0x03+0x00+0x00+0x00+0x02+0x00+0x5E)%0x100)=0x01+0x9C=0x9D C语言描述: UCHAR cc;

生成HEX文件

生成HEX文件的MATLAB程序 ROM初始化文件既可以是*.mif也可以是*.hex文件,但是如果工程需要在Modelsim中进行仿真的话,则必须生成*.hex文件对ROM进行初始化。一般简单且有规律的初始化数据可以用Excel先生成mif文件再在综合软件中转化为hex文件,但如果所需信号要叠加各种各样的噪声时。Excel则不能胜任,此时我们用MATLAB生成所需初始化数据,在使用下述程序则很容易生成HEX初始化文件。程序先介绍hex文件的结构,后给出matlab程序,且我做了详细的注释,希望对大家有所帮助。 % __Created by He Yapeng.@School of Electronic Engineering and Photoelectricity Technology at Nanjing University of Science and Technology % --Email:lwkj0920@https://www.360docs.net/doc/397991294.html,. '); % Intel HEX文件是由一行行符合Intel HEX文件格式的文本所构成的ASCII文本文件。在Intel HEX文件中, % 每一行包含一个HEX记录。这些记录由对应机器语言码和/或常量数据的十六进制编码数字组成。Intel HEX文件通常用于传输将被存于ROM或者EPROM中的程序和数据。大多数EPROM编程器或模拟器使用Intel HEX文件。 % 记录格式 % Intel HEX由任意数量的十六进制记录组成。每个记录包含5个域,它们按以下格式排列:% :llaaaatt[dd...]cc % 每一组字母对应一个不同的域,每一个字母对应一个十六进制编码的数字。每一个域由至少两个十六进制编码数字组成,它们构成一个字节,就像以下描述的那样: % : 每个Intel HEX记录都由冒号开头. % ll 是数据长度域,它代表记录当中数据字节(dd)的数量. % aaaa 是地址域,它代表记录当中数据的起始地址. % tt 是代表HEX记录类型的域,它可能是以下数据当中的一个: % 00 –数据记录 % 01 –文件结束记录 % 02 –扩展段地址记录 % 04 –扩展线性地址记录 % dd 是数据域,它代表一个字节的数据.一个记录可以有许多数据字节.记录当中数据字节的数量必须和数据长度域(ll)中指定的数字相符. % cc 是校验和域,它表示这个记录的校验和.校验和的计算是通过将记录当中所有十六进制编码数字对的值相加,以256为模进行以下补足. %

HEX文件的烧录

1. keil编译生成hex文件大小与单片机内的flash空间大小没有完全绝对的关系 2. HEX 文件的大小,不是最终的代码大小, 一般实际要更小一些. 如果有兴趣研究,可以下载一下叫做 hex2bin 的小程序,可以把hex转换为bin 3. Intel hex 文件格式: Intel hex 文件常用来保存单片机或其他处理器的目标程序代码。它保存物理程序存储区中的目标代码映象。一般的编程器都支持这种格式。 Intel hex 文件全部由可打印的ASCII字符组成(可以用记事本打开),如下例所示: :2000000012014c75a800e4f508f509780a7a78e4f608dafcd283fcfded240af9a705 0dbd81 :2000200000010ced2488ec34ff50edc283e4fcfded240af9e76d7013ed33e43c700d 0dbd2a :2000400000010ced2488ec34ff50e50509e50970020508e50924a8e50834fd50aee4 f50874 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)到数据域(...)最后一个字节的所有字节

HEX格式说明

什么是Intel HEX文件格式? Intel HEX文件是由一行行符合Intel HEX文件格式的文本所构成的ASCII文本文件。在Intel HEX文件中,每一行包含一个HEX记录。这些记录由对应机器语言码和/或常量数据的十六进制编码数字组成。Intel HEX文件通常用于传输将被存于ROM或者EPROM中的程序和数据。大多数EPROM编程器或模拟器使用Intel HEX文件。记录格式 Intel HEX由任意数量的十六进制记录组成。每个记录包含5个域,它们按以下格式排列: :llaaaatt[dd...]cc 每一组字母对应一个不同的域,每一个字母对应一个十六进制编码的数字。每一个域由至少两个十六进制编码数字组成,它们构成一个字节,就像以下描述的那样: : 每个Intel HEX记录都由冒号开头. ll 是数据长度域,它代表记录当中数据字节(dd)的数量. aaaa 是地址域,它代表记录当中数据的起始地址. tt 是代表HEX记录类型的域,它可能是以下数据当中的一个: 00 –数据记录 01 –文件结束记录 02 –扩展段地址记录 04 –扩展线性地址记录 dd 是数据域,它代表一个字节的数据.一个记录可以有许多数据字节.记录当中数据字节的数量必须和数据长度域(ll)中指定的数字相符. cc 是校验和域,它表示这个记录的校验和.校验和的计算是通过将记录当中所有十六进制编码数字对的值相加,以256为模进行以下补足. 数据记录 Intel HEX文件由任意数量以回车换行符结束的数据记录组成.数据记录外观如下: :10246200464C5549442050524F46494C4500464C33 其中: 10 是这个记录当中数据字节的数量. 2462 是数据将被下载到存储器当中的地址. 00 是记录类型(数据记录) 464C…464C是数据. 33 是这个记录的校验和. 扩展线性地址记录(HEX386) 扩展线性地址记录也叫作32位地址记录或HEX386记录.这些记录包含数据地址的高16位.扩展线性地址记录总是有两个数据字节,外观如下: :02000004FFFFFC 其中: 02 是这个记录当中数据字节的数量. 0000 是地址域,对于扩展线性地址记录,这个域总是0000. 04 是记录类型04(扩展线性地址记录) FFFF 是地址的高16位. FC 是这个记录的校验和,计算方法如下: 01h + NOT(02h + 00h + 00h + 04h + FFh + FFh). 当一个扩展线性地址记录被读取,存储于数据域的扩展线性地址被保存,它被应用于从Intel HEX文件读取来的随后的记录.线性地址保持有效,直到它被另外一个扩展地址记录所改变. 通过把记录当中的地址域与被移位的来自扩展线性地址记录的地址数据相加获得数据记录的绝对存储器地址. 以下的例子演示了这个过程.. 来自数据记录地址域的地址 2462 扩展线性地址记录的数据域 + FFFF 绝对存储器地址FFFF2462 扩展段地址记录(HEX86) 扩展段地址记录也叫HEX86记录,它包括4-19位数据地址段.扩展段地址记录总是有两个数据字节,外观如下: :020*********EA 其中: 02 是记录当中数据字节的数量. 0000 是地址域.对于扩展段地址记录,这个域总是0000. 02 是记录类型02(扩展段地址记录) 1200 是地址段. EA 是这个记录的校验和,计算方法如下: 01h + NOT(02h + 00h + 00h + 02h + 12h + 00h). 当一个扩展段地址记录被读取,存储于数据域的扩展段地址被保存,它被应用于从Intel HEX文件读取来的随后的记录.段地址保持有效,直到它被另外一个扩展地址记录所改变. 通过把记录当中的地址域与被移位的来自扩展段地址记录的地址数据相加获得数据记录的绝对存储器地址. 以下的例子演示了这个过程.. 来自数据记录地址域的地址2462 扩展段地址记录数据域+ 1200 绝对存储器地址 00014462 文件结束(EOF)记录 Intel HEX文件必须以文件结束(EOF)记录结束.这个记录的记录类型域的值必须是01.EOF记录外观总是如下: :00000001FF 其中: 00 是记录当中数据字节的数量. 0000 是数据被下载到存储器当中的地址.在文件结束记录当中地址是没有意义被忽略的.0000h是典型的地址. 01 是记录类型01(文件结束记录) FF 是这个记录的校验和,计算方法如下: 01h + NOT(00h + 00h + 00h + 01h). Intel HEX文件例子: 下面是一个完整的Intel HEX文件的例子: :10001300AC12AD13AE10AF1112002F8E0E8F0F2244 :10000300E50B250DF509E50A350CF5081200132259 :03000000020023D8 :0C002300787FE4F6D8FD7581130200031D :10002F00EFF88DF0A4FFEDC5F0CEA42EFEEC88F016 :04003F00A42EFE22CB :00000001FF

Intel HEX文件格式

什么是Intel HEX格式? 回答: Intel HEX文件是记录文本行的ASCII文本文件,在Intel HEX文件中,每一行是一个HEX记录 由十六进制数组成的机器码或者数据常量,Intel HEX文件经常被用于将程序或数据传输 存储到ROM.EPROM,大多数编程器和模拟器使用Intel HEX文件. 记录格式 一个Intel HEX文件可以包含任意多的十六进制记录,每条记录有五个域,下面是一个记录的格式. :llaaaatt[dd...]cc 每一组字母是独立的一域,每一个字母是一个十六进制数字,每一域至少由两个十六进制数字组成,下面是字节的描述. :冒号是每一条Intel HEX记录的开始 ll 是这条记录的长度域,他表示数据(dd)的字节数目. aaaa 是地址域,他表示数据的起始地址 <如果是数据记录,这表示将要烧录的这条记录中的数据在EPROM中的偏移地址, 对于不支持扩展段地址和扩展线性地址的,如89C51,这就是此条记录的起始地址> tt 这个域表示这条HEX记录的类型,他有可能是下面这几种类型 00 ----数据记录 01 ----文件结束记录 02 ----扩展段地址记录 04 ----扩展线性地址记录 dd 是数据域,表示一个字节的数据,一个记录可能有多个数据字节,字节数目可以 查看ll域的说明 cc 是效验和域,表示记录的效验和,计算方法是将本条记录冒号开始的所有字母对 <不包括本效验字和冒号> 所表示的十六进制数字 <一对字母表示一个十六进制数,这样的一个十六进制数为一个字节> 都加起来然后模除256得到的余数最后求出余数的补码即是本效验字节cc.

HEX文件格式分析

阿龙整理 Intel HEX文件是用来保存单片机或其他处理器的目标程序代码的文件,它保存物理程序存储器中的目标代码的映像,以便编程器和仿真器调用.绝大多数编程器都支持Intel HEX格式。 下面是一个Intel HEX文件用记事本打开后看到的内容: :020*********FA :1000000018F09FE518F09FE518F09FE518F09FE5C0 :1000100018F09FE5805F20B9F0FF1FE518F09FE51D :10002000C000000040000000440000004800000044 :100030004C00000000000000000000005000000024 ...... :103020005C300000A8E60040000000005C300000BA :1030300000000140000000004830000000000000D7 :103040001400004094E6000032FFF0FFE8030000A7 :0C30500064000000FFFFFFFF010******* :00000001FF Intel HEX文件是文本行的ASCII文本文件,文件内容全部由可打印的ASCII字符组成,可以用记事本打开. Intel HEX由一条或多条记录组成,每行一个记录,每条记录都以冒号":"开始,以回车(0DH)和换行(0AH)结束. 除":"外,每条记录有五个域,每一域由2N(N>=1)个HEX字符组成,格式如下 :[LL][ZZZZ][TT][SS....SS][RR] 其中: [LL]:表示该记录的实际数据的长度; [ZZZZ]:表示该记录所包含的数据在实际的存储区中的起始地址; [TT]:为该记录的类型; [SS....SS]:为该记录的实际数据,由2N(N>=1)个HEX字符组成,该域的长度应当与[LL]域所指出长度一致. [RR]:为该记录的数据校验和. 例如对上面例子中的第一行: :020*********FA 用"["和"]"分开后如下: :[02][0000][04][0000][FA] [02]:该记录的实际数据的长度[LL]为2个字节(4个HEX字符); [0000]:该记录所包含的数据在实际的存储区中的起始地址[ZZZZ]为0000H;

STM32的hex文件格式的分析

STM32的hex文件格式的分析 日常开发工作中hex文件是经常要接触到的一种文件格式,就算平时你的开发是各种link直接下载,但如果你的项目批量量产了,那么一种生成文件(.bin或hex...)交给生产部门或是你的终端产品需要支持远程升级交给平台工程师那么是不可避免要接触到的。所以还是要必须了解的。 下面开始结合stm32分析hex的文件格式: 官方定义: <0x3a>[数据长度1Byte][数据地址2Byte][数据类型1Byte][数据nByte][校验1Byte]<0x0d><0x0a> 打开一个stm32生成的hex文件: 1)结合格式分析第一行(指定基地址) :020*********F2 断句 : 02 0000 04 0800 F2 我们已经按格式说明分割开 “:”对应格式中的<0x3a>,0x3a就是冒号的ASCII码 “02”对应的就是长度,这里就如所见,就是长度为2 “0000”对应数据地址,长度为2个字节。Stm32一个32位的芯片两个字节肯定不足以表示地址(要四个),所以这里地址的具体用法要结合后面的数据类型分析。这里为4指定基地址,所以这两个字节并没有什么用。 “04”对应的数据类型,具体的含义见【注释1】,这里的4是指定基地址。 “0800”对应的是数据,长度是浮动的,这里是2个字节,和前面的长度相呼应。这里指定的是基地址。当然指定的是高16的地址,如常见的0x0800 0000 ,所以这个基地址<<16使用。

“F2”对应的是校验结果,result = 256 - (date[0] + ... +date[n])% 256 ,这一行数据比较少,我就给大家带入一下0xF2 = 0x100 - (0x02 +0x00 + 0x00 + 0x04 + 0x08 + 0x00)%0x100。校验范围大家都看见了,是从长度到数据结束字节的这么一个范围,不少同学以为只是校验数据段,那是错误的,你的意思是长度和类型不重要可以存储出错吗? “”对应<0x0d><0x0a>,就是回车和换行,这个东西大家应该很熟悉,因为stm32串口发送例程中,串口数据的结束用的就是这两个符号做标识。 2)结合格式分析第二行(数据) 第二行开始到文件快结束的绝大部分内容都是对应的数据,我个人认为就相当于bin文件中所携带的内容,其他例如基地址,文件起始,文件结束等内容是hex 文件才有的附加信息。这里我只是试着分析一下其特殊部分,和第一行中相同且没变化的部分就不再赘述了。 :10000000600700200D0C0008050400080704000824 断句: :10 0000 00 60 07 00 20 0D 0C 00 08 05 04 00 08 07 04 00 08 24 “10”对应数据长度16,即60 07 00 20 0D 0C 00 08 05 04 00 08 07 04 00 08这16个字节。 “0000”对应地址,这里类型是数据,准确的说是低16位,高十六位由第一行的04基地址类型指定,上面指定的是0800 这里指定的是0000,那么后面的16个字节的目标位置就是addr = 0x800 << 16 + 0x0000, 就是0x0800 0000,是不是很熟悉?不熟悉的看下图,帮助回忆一下 我修改一下给大家看一看。 修改为0x0800 1000:

单片机,认识HEX文件

认识HEX文件 作者:林申茂看过几篇常用指令的用法后,我们换换口味,介绍一下Intel 原厂所公布的HEX文件标准格式,相信经过本文的介绍,一定可以让您对8051的操作有更进一步的认识。以下是一个程序经编译器编译后所得到的HEX文件内容: Example.hex 行号原始码 1 : 10 0000 00 020003787FE4F6D8FD75812B02004A0 2 D6 2 :10001000008FE493A3F8E493A34003F68001F20871 3 :10002000DFF48029E493A3F85407240CC8C333C435 4 :10003000540F4420C8834004F456800146F6DFE4A0 5 :10004000800B01020408102040809000C2E47E0171 6 :100050009360BCA3FF543F30E509541FFEE493A313 7 :1000600060010ECF54C025E060A840B8E493A3FAF7 8 :10007000E493A3F8E493A3C8C582C8CAC583CAF0B1 9 :10008000A3C8C582C8CAC583CADFE9DEE780BEE432 10 :10009000F52AF52BE52B25E02408F8E6F52808E6F7 11 :1000A000F529F590E528F5B07F707E171200E6057A 12 :1000B0002BE52B7002052AC39410E52A940040D446 13 :1000C00080CD20200800010002000400080010007C 14 :1000D0002000400080010002000400080010002001 15 :1000E000004000800000D3EF9400EE94004007EF42 16 :0700F0001F70F31E80F022D7 17 :00000001FF 面对这一大串的十六进制码,有没有头昏眼花的感觉呢?别急别急,经过本文的介绍,你一定会爱上这个会让你头昏眼花的机器码的! 首先我们先介绍HEX文件的编码格式,举范例程序中第一行说明: : 10000000020003787FE4F6D8FD75812B02004A02D6 12 3 4 5 6 为了方便解说,笔者将原始码以空格区分成六个部分,在实际转换的原始内容应该没有空格也没有行号的。第一部分是HEX文件的起始格式,文件一开始应该是一个冒号作为起点;第二部分的两码(10H)所代表的是该行总共具备多少个字节的数据,以本行为例,应该有16个字节,因为10H换算成十进制应该是16;第三部分的四码所代表的是放置数据的开始位置,换句话说,本行的数据应该是放置在0000H~000FH 这段地址中;第四部分的两码是检查码,所代表的是该行有无数据存放,若有则为00H,若无则为01H;第五部分则为数据存放区,总共32码16个字节,有兴趣的可以实际算算看,这里的机器码已经是标准的MCS-51指令,如果查表的话可以直接知道其功能,稍后的文章会再提到;第六部分为Checksum 值。 以上每一个数据行的标准格式,再看到最后一行,这是每一个HEX文件最后都会加上的一行,它所代表的意思也等于我们写程序的END差不多。当编译器看

HEX格式文档详解

Hex文件是可以烧录到MCU中,被MCU执行的一种文件格式。如果用记事本打开可发现,整个文件以行为单位,每行以冒号开头,内容全部为16进制码(以ASCII码形式显示)。Hex文件可以按照如下的方式进行拆分来分析其中的内容: 例如: :020*********f8, 可以看做是0x02 0x00 0x00 0x04 0x02 0x02 0xf8,其前四个字节和最后一个字节有特殊含义。中间为数据 第一个0x02表示该行数据中有两个数据 第二个,第三个0x00 0x00表示本行数据的起始地址位 第四个字节有0x00 0x01 0x02 0x03 0x04 0x05,分别有以下含义 '00'Data Rrecord:用来记录数据,HEX文件的大部分记录都是数据记录 '01'文件结束记录:用来标识文件结束,放在文件的最后,标识HEX文件的结尾 '02'扩展段地址记录:用来标识扩展段地址的记录 '03'开始段地址记录:开始段地址记录 '04'扩展线性地址记录:用来标识扩展线性地址的记录 '05'开始线性地址记录:开始线性地址记录

校验值:每一行的最后一个值为此行数据的校验和。例如: :1000000018F09FE518F09FE518F09FE518F09FE5C0 这行中的 0xC0 :1000100018F09FE5805F20B9F0FF1FE518F09FE51D 这行中的 0x1D 校验和的算法为:计算从0x3A 以后(不包括0x3A)的所有各字节的和模256的余。即各字节二进制算术和,不计超过256的溢出值,然后用0x100减去这个算数累加和,得出得值就是此行得校验和。

文件的格式类型介绍

qsc是爱奇艺播放影片后产生的视频缓存文件 pgf是pps网络电视点播时的缓冲 Tencent是腾讯公司的英文名称,Files我们都知道是文件夹 ufsmart是用友财务软件的文件及数据所在文件夹。 一般来讲是机器代码,汇编语言编译后的结果, (DOS下汇编语言编译后与.com文件相类似),用debug、WINHEX,U_EDIT等软件打开 所有的文件, 无论后缀名是什么, 一律分为两种格式. text 和binary. 一种文件格式binary 的缩写。一个后缀名为.bin的文件, 只是想表明它是binary格式.,但并不表明它与某种应用程序有必然的联系性. 比如虚拟光驱文件常用.bin作为后缀,但并不意味着所有.bin文件都是虚拟光驱文件。虚拟光盘文件常用.bin作为后缀, 但并不意味着所有.bin文件都是虚拟光盘.如果你的daemon无法正常安装它. 说明它很可能不是虚拟光盘.另外在软件的安装后文件夹中大部分软件或服务器软件都有个bin 文件夹。因为bin (binary)其中文意思既是:二进制,里面存放的一般是可执行的二进制文件,所以我们通常使用较大型的软件时都会发现有这个名称的文件夹 data是数据文件,用于存放你软件生成的数据信息,不过删除了你相应的软件就读取不了你原来是设置信息了。 在64位系统下,为了更好地兼容32位程序,在安装一些32位程序时,会默认扔到program files(x86)这个文件夹下,而一些64位程序或没有位数区别的程序,则默认扔到program files 这个文件夹下,两个文件夹中都有与程序使用相关的程序。 MSOCache是office的本地安装源,offic安装完成后,可以删除 Cache是临时缓存文件夹,很多软件启动后都会在这个文件夹里放一些缓存文件,可以删,之后还会自动生成。 Config是配置的意思,一般是修改系统配置或设置的,记录了软件运行时需要带的参数或运行环境 Office 14 是更新2010时的备用文件 360.vbs是一个U盘病毒 Apple software update是苹果软件的更新系统,如果电脑里装有苹果公司的软件就会有这个。Bonjour是apple的一个设备发现协议 MySQL是Linux操作系统里的数据库系统,即开放源代码的免费数据库,用来存储数据Temp、cookies是临时文件夹,其中内容可以删除,文件夹是Windows存储临时文件的地方后缀msuwin是Windows Vista和Windows7专用可执行程序,是微软发布的补丁程序。Appdata存放软件的设置数据等,很重要

HEX文件和BIN文件格式的区别

HEX文件和BIN文件格式的区别 HEX文件和BIN文件是我们经常碰到的2种文件格式。下面简单介绍一下这2种文件格式的区别: 1 -HEX文件是包括地址信息的,而BIN文件格式只包括了数据本身 在烧写或下载HEX文件的时候,一般都不需要用户指定地址,因为HEX文件内部的信息已经包括了地址。而烧写BIN文件的时候,用户是一定需要指定地址信息的。 3 -BIN文件格式 对二进制文件而言,其实没有”格式”。文件只是包括了纯粹的二进制数据。 4 -HEX文件格式 HEX文件都是由记录(RECORD)组成的。在HEX文件里面,每一行代表一个记录。记录的基本格式为: +---------------------------------------------------------------+ | RECORD | RECLEN | LOAD | RECTYPE | INFO or DA TA | CHKSUM | | MARK ':' | | OFFSET | | | | +---------------------------------------------------------------+ | 1-byte | 1-byte | 2-byte | 1-byte | n-byte | 1-byte | +---------------------------------------------------------------+ 记录类型包括: '00' Data Rrecord:用来记录数据,HEX文件的大部分记录都是数据记录 '01' End of File Record: 用来标识文件结束,放在文件的最后,标识HEX文件的结尾 '04' Extended Linear Address Record: 用来标识扩展线性地址的记录 '02' Extended Segment Address Record: 用来标识扩展段地址的记录 在上面的后2种记录,都是用来提供地址信息的。每次碰到这2个记录的时候,都可以根据记录计算出一个“基”地址。 对于后面的数据记录,计算地址的时候,都是以这些“基”地址为基础的。 数据记录的具体格式: +---------------------------------------------------------------+ | RECORD | RECLEN | LOAD | RECTYPE | INFO or DA TA | CHKSUM | | MARK ':' | | OFFSET | '00' | | | +---------------------------------------------------------------+ | 1-byte | 1-byte | 2-byte | 1-byte | n-byte | 1-byte | +---------------------------------------------------------------+ 看个例子: :020*********FA :10000400FF00A0E314209FE5001092E5011092E5A3 :00000001FF 对上面的HEX文件进行分析:

如何读懂hex文件

什么是Intel HEX 文件格式 Intel HEX 文件是遵循Intel HEX 文件格式的ASCII 文本文件。在Intel HEX 文件的每一行都包含了一个HEX 记录。这些记录是由一些代表机器语言代码和常量的16进制数据组成的。Intel HEX 文件常用来传输要存储在ROM 或者EPROM 中的程序和数据。大部分的E PROM 编程器能使用Intel HEX 文件。 Intel HEX由任意数量的十六进制记录组成。每个记录包含5个域,它们按以下格式排列: Start Code每个Intel HEX 记录都由冒号开头 Byte count是数据长度域,它代表记录当中数据字节的数量 Address是地址域,它代表记录当中数据的起始地址 Record type是代表HEX记录类型的域,它可能是以下数据当中的一个:00-数据记录 01-文件结束记录 02-扩展段地址记录 03-开始段地址记录 04-扩展线性地址记录 05-开始线性地址记录 Data是数据域,一个记录可以有许多数据字节.记录当中数据字节的数量必须和数据长度域中指定的数字相符 Checksum是校验和域,它表示这个记录的校验和.校验和的计算是通过将记录当中所有十六进制编码数字对的值相加,以256为模进行以下补足。

HEX文件以行为单位。每行以字符‘:’ (0x3a)开头,以回车换行符0x0d, 0x0a为结束。每行开始和结束之间的所有内容,都是以字符形式表现的。例如数据如果是 0x1A ,那么转换到HEX格式的行里面就是0x31 0x41。如果数据是16bit的,例如地址,则先显示高位,后显示底位。例如 0x1234,转换成HEX格式文件后变成 0x31 0x32 0x33 0x34,显示出来以后就是1234。将数据部分内容每2个字符看做一个HEX数据,例如: :020*********FA , 我把它看做 0x02 0x00 0x00 0x04 0x00 0x00 0xFA 第一个 0x02 为数据长度。 紧跟着后面的0x00 0x00 为地址。 再后面的0x04为数据类型,类型共分一下几类: '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 然后,接着0x04后面的两个 0x00 0x00就是数据。最后一个0xFA是校验码。 HEX文件的每一行都是这样的格式: <0x3a> [数据长度1Byte] [数据地址2Byte] [数据类型1Byte] [数据nByte] [校验1Byte] <0x0d> <0x0a>

相关文档
最新文档