• 【车载开发系列】S19/HEX/BIN文件解析


    【车载开发系列】S19/HEX/BIN文件解析

    一. 文件烧录原理

    编译器/汇编器将程序源代码转换为机器代码, 输出到一个文件。
    上位机将机器代码烧录到ROM/Flash Memory, 或传输到目标系统以加载执行

    二. 为什么要文件解析

    平常使用编译器的时候会自动生成相应格式的烧录文件,直接进行烧录即可,但是在有的时候我们需要使用对文件格式进行转换,比较好用刷写文件解析工具推荐使用HexView,也可以使用J-Flash。
    若通过BootLoader进行升级,或者需要对文件进行补齐填充的时候,或者需要自己进行文件提取的时候,我们就需要自己编写代码进行解析,搭配上位机等进行文件的烧录。

    三. BIN格式文件

    bin后缀的是一种二进制文件,它的用途是根据用户系统或者电脑内的应用而定。这是文件格式binary的缩写,bin文件没有什么特别之处,直接解析即可。
    Bin文件是最纯粹的二进制机器代码,没有格式,或者说是“顺序格式”。按assembly code顺序翻译成binary machine code。由于分析出来Hex文件中的数据域ASCII码表示的十六进制与二进制一一对应,而且我公司DSP又是16位的,以一个word为最小单位,所以四个十六进制ASCII码代表一条机器指令单位或者地址,借于上面分析,编写了工具代码。

    1)bin格式优点

    他的优点有简单直接, 文件内容地址和memory内容地址一一对应, 直观。

    2)bin格式缺点

    地址连续, 无法跨空间, 二进制需要特殊工具查看内容。

    四. S-record概述

    Motorola S-record是由Motorola创建的一种文件格式,它以 ASCII十六进制文本形式传送二进制信息。这种文件格式也可以称为SRECORD、SREC、S19、S28、S37。它通常用于对微控制器、EPROM和其他类型的可编程逻辑设备进行编程。
    S-record格式是在1970年代中期为 Motorola 6800处理器创建的。该处理器和其他嵌入式处理器的软件开发工具将生成S-record格式的可执行代码和数据。程序员将读取S-record格式并将数据“刻录”到嵌入式系统中使用的PROM或EPROM中。

    五. S19,MOT,SREC文件格式

    这三种文件格式之所以放在一起说明,是因为这几种格式的文件是相同的,除了后缀名不同,文件的排列格式是一样的,没有特别之处。采用同一种方式解析即可。

    1)格式预览

    S-record 格式文件由一系列 ASCII 文本记录组成。这些记录从左到右具有以下结构:
    在这里插入图片描述

    2)Record type记录类型

    2个字符,一个大写的S(0x53),然后是一个数字0~9,定义了记录的类型 (S0,S1,S2,S3,S5,S7,S8,S9),其中0~9的数字,定义数据类型。

    3)Byte count字节计数

    一个字节,表示后面其余部分(地址+数据+校验和)的字节数。该字段最小值为3(两个字节地址字段+1个字节校验和)。
    该字段的最小值为 3,最大值为 255 (0xFF)。通常记录有 32 个数据字节。

    4)Address地址

    4或6或8个字符。由记录类型 type 决定。对于S1和S9类型(S19),地址字段为 4 个十六进制数字(2 个字节)。对于S2和S8 record(S28),地址字段为 6 个十六进制数字(3个字节),对于S3和S7 record(S37),地址字段为 8 个十六进制数字(4 个字节)。地址首先以 MSB 发送。地址字节以大端格式排列。

    5)Data数据段

    0—64字符。用来组成和说明一个代表了内存载入数据或者描述信息的16进制的值。
    一般建议该段最大32字节。S0/S1/S2/S3 类型的最小数据数是0。最大可记录的数据数由地址段来决定,因为数据段最大记录数是255,减去1个字节的校验位,再减去地址段,剩下的才是数据段长度,因此S0/S1最大支持252字节数据,S2最大支持251字节数据,S3最大支持250字节数据。

    6)Checksum校验和

    占一个字节。
    Checksum = 取补码( (Byte count + Address + Data) )

    六. S-Record记录类型

    S0:S格式文件的第一个记录,表示文件名(含路径),存储地址部分没有使用,以0000置位。此记录表示记录的开始,无需下载到MCU。
    S1: 地址为2字节(4个字符)的记录。
    S2: 地址为3字节的记录。
    S3: 地址为4字节的记录。
    S5: 标记本文件的S1、S2、S3记录的个数(此记录不是一个S文件所必须的)。
    S7: 地为4字节,表示程序的开始执行地址,代码/数据部分没有被使用,此行表示程序的结束,无需下载到MCU。
    S8: 地为3字节,表示程序的开始执行地址,代码/数据部分没有被使用,此行表示程序的结束,无需下载到MCU。
    S9: 地为2字节,表示程序的开始执行地址,代码/数据部分没有被使用,此行表示程序的结束,无需下载到MCU。

    七. S-Record的实例

    1)S0的一个实例

    S01F0000 443A5C50726F6A6563745F335C62696E5C50726F6A6563742E61627371
    S0,表示S19文件格式开始;1F为剩余字节数;0000无用;
    最后两位71是校验和;
    中间的内容是ASCII码。转成字符串就是:D:\Project_3\bin\Project_3.abs.。

    2)S1的一个实例

    S123C000CF2100C6055B134A800BFE4A8000FE0000C015C03100000000000000\n0000000092
    S1,表示本条记录存储地址长度为2字节;23(注意为16进制)剩余字节数;
    C000表示起始地址;
    92表示校验和。即,本行表示将CF2100C6055B134A800BFE4A8000FE0000C015C0310000000000000000000000依次下载到从地址C000开始的一段连续地址中。

    3)S2的一个实例

    S218FE8020F2FEC013EC31270BED31180A30700434F920F10A0B
    S2,表示本条记录存储地址长度为3字节,18(16进制数)表示剩余字节数,FE8020表示起始地址,0B为校验和。
    校验和的计算:以S2记录为例,校验和 = 0xFF – (0xFE + 0×80 + 0×20 + 0Xf2 + … + 0x0A);## 七. S-Record的实例

    八. HEX文件

    Hex 是另一种十六进制格式,指的是Intel-HEX,它是由Intel制定的格式。
    它是一种十六进制的文件,是ascii码的文档, 所以不能直接烧到单片机。以行为单位, 每行以冒号 : 开头, 内容全为16进制码。
    它也包含了数据类型,数据字段和校验和等信息。

    与bin文件的区别

    1)HEX文件包含地址信息,BIN文件只包含数据信息。
    2)HEX文件是用ASCII来表示十六进制
    3)对一个BIN文件而言,文件的大小就是文件包括的数据的实际大小。而对HEX文件而言,看到的文件大小并不是实际的数据的大小:一是因为HEX文件是用ASCII来表示数据,二是因为HEX文件本身还包括别的附加信息。
    对二进制文件而言,其实没有”格式”。文件只是包括了纯粹的二进制数据。HEX文件都是由记录(RECORD)组成的。在HEX文件里面,每一行代表一个记录。

  • 相关阅读:
    RHCE之路配置本地DNS服务器的正反向解析
    按区间反转文章片段
    快消品行业经销商协同系统:实现经销商可视化管理,提高沟通执行效率
    思科设备路由综合配置
    日常学习之:如何基于 OpenAI 构建自己的向量数据库
    GP SQL 优化及执行计划相关记录
    电脑重装系统后Win10如何添加系统组件
    常用算法(四)——KMP算法
    shell编程
    树的重心学习
  • 原文地址:https://blog.csdn.net/Last_Impression/article/details/133580853