关于烧录的hex文件

hex文件和bin文件区别

转自https://blog.csdn.net/wordwarwordwar/article/details/77151611

HEX文件和BIN文件是我们经常碰到的2种文件格式。因为自己也是新手,所以一直对这两个文件懵懵懂懂,不甚了解,最近在做STM32单片机的IAP更新,其中要考虑HEX文件和BIN文件,所以需要学习下这两种文件。下面是最近的我的了解,如有不对地方还请指正。

1. HEX文件是包括地址信息的,而BIN文件格式只包括了数据本身
    在烧写或下载HEX文件的时候,一般都不需要用户指定地址,因为HEX文件内部的信息已经包括了地址。而烧写BIN文件的时候,用户是一定需要指定地址信息的。

2. HEX文件格式
    HEX文件都是由记录(RECORD)组成的。在HEX文件里面,每一行代表一个记录。以下为记录(Record)的具体格式:

 Record structure

  A record (line of text) consists of six fields (parts) that appear in order from left to right:

  1. Start code, one character, an ASCII colon ':'.
  2. Byte count, two hex digits, indicating the number of bytes (hex digit pairs) in the data field. The maximum byte count is 255 (0xFF). 16 (0x10) and 32 (0x20) are commonly used byte counts.
  3. Address, four hex digits, representing the 16-bit beginning memory address offset of the data. The physical address of the data is computed by adding this offset to a previously established base address, thus allowing memory addressing beyond the 64 kilobyte limit of 16-bit addresses. The base address, which defaults to zero, can be changed by various types of records. Base addresses and address offsets are always expressed as big endian values.
  4. Record type (see record types below), two hex digits, 00 to 05, defining the meaning of the data field.
  5. Data, a sequence of n bytes of data, represented by 2n hex digits. Some records omit this field (n equals zero). The meaning and interpretation of data bytes depends on the application.
  6. Checksum, two hex digits, a computed value that can be used to verify the record has no errors.



     看个例子:
     :020000040000FA
     :10000400FF00A0E314209FE5001092E5011092E5A3
     :00000001FF         
       
      对上面的HEX文件进行分析:
      第1条记录的长度为02,LOAD OFFSET为0000,RECTYPE为04,说明该记录为扩展段地址记录。数据为0000,校验和为FA。从这个记录的长度和数据,我们可以计算出一个基地址,这个地址为0X0000。后面的数据记录都以这个地址为基地址。
      第2条记录的长度为10(16),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,标识文件的结尾。
       
        在上面这个例子里,实际的数据只有16个BYTE:FF00A0E314209FE5001092E5011092E5,其起始地址为0x4。

3. BIN文件格式
    对二进制文件而言,其实没有”格式”。文件只是包括了纯粹的二进制数据。

4. HEX文件是用ASCII来表示二进制的数值。例如一般8-BIT的二进制数值0x3F,用ASCII来表示就需要分别表示字符'3'和字符'F',每个字符需要一个BYTE,所以HEX文件需要 > 2倍的空间。
    对一个BIN文件而言,你查看文件的大小就可以知道文件包括的数据的实际大小。而对HEX文件而言,你看到的文件 大小并不是实际的数据的大小。一是因为HEX文件是用ASCII来表示数据,二是因为HEX文件本身还包括别的附加信息。

hex文件大小与STM32中芯片flash大小的关系

转自https://blog.csdn.net/he__yuan/article/details/78036073

之前一直以为STM32flash空间大小和hex文件
相关,以为hex文件大小超过flas大小后程序就会
出问题但是我发现hex文件大于flash也可以正常
下载,有的程序也可以正常运行,有的不可以,所
以经过总结如下:
1、flhex文件其实是个格式规范的文本文件。程序代码

大小与hex文件大小没有绝对的关联性,因为我们在用串

口下载程序时一般都是用的hex文件下载,,所以大家会

以为hex文件大小和flash大小息息相关,hex文件大小超

过了flash大小就会出问题,我也以为是这样,直到最近

我发现有hex文件大于flash的大小但是依然可以写进去,

因为真正烧写进去的是二进制文件,在hex文件中包含了

bin文件的信息

2、hex文件大小和bin文件大小没有决定性关系

  hex文件内容很多,其中就包含了bin文件二进制的内容,

所有很多软件都能直接把hex文件转化成bin文件,烧写进flash

的文件不是hex而是一堆bin文件

3、flash大小和bin文件大小息息相关

  bin文件就是完全的程序文件,里面包含了所有的程序

内容,bin文件烧写进flash就可以执行,可以用STlink进

入仿真查看相关的flash,就是bin文件内容

猜你喜欢

转载自blog.csdn.net/lizehao1973/article/details/84840554