汽车电子 -- Bin、Hex、Srec、s19等文件的区别

一、烧写文件

烧写文件有很多种格式,比如bin、Hex、s19等。下面对这几种文件格式做一下介绍。

1、bin文件

参看:【嵌入式烧录/刷写文件】-3.1-详解二进制Bin格式文件

什么是bin

bin是binary的缩写,翻译为“二进制”。binary file 二进制文件是一个 非text file 文本文件的计算机文件。binary file 是一种计算机文件格式,它以二进制编码表示文件的内容。这些文件通常包含计算机程序或数据,例如软件/固件、操作系统、文档、音频和视频等。

在嵌入式软件开发中,binary file 通常是软件固件或操作系统的映像文件。binary file 通常用于将代码和数据加载到嵌入式系统的 nonvolatile memory 非易失性存储器(如 flash memory)或其他存储器中。此外,binary file 还可以用于将数据从一个嵌入式系统传输到另一个嵌入式系统。

  • 程序代码的存储和加载:binary file 通常用于将嵌入式系统的程序代码存储在 flash memory或其他存储器中,并在系统启动时加载到RAM中。这样可以将程序代码与嵌入式系统的其他部分(如操作系统和应用程序)分离开来,从而提高代码的可移植性和维护性。
  • 软件/固件升级:binary file 还尝尝用于升级嵌入式系统的软件/固件。嵌入式系统通常包含一个bootloader程序,它负责从flash memory 中加载软件/固件文件并将其烧写到系统中。这个软件/固件通话吃那个是以二进制格式存储的。
  • 数据存储和加载:在许多嵌入式系统中,binary file 也用于存储和加载数据。例如,嵌入式系统可能需要加载图像、声音或视频等多媒体文件。这些文件通常以二进制格式存储,并通过嵌入式系统的应用程序加载到RAM中进行处理。

在操作系统中,可执行文件和库文件通常以二进制格式存储。
在网络通信中,binary file可以被用作数据传输的格式,如HTTP请求和响应、SMTP邮件等。

bin文件的结构

binary file 通常被认为是若干字节序列,这意味着将其用十六进制格式显示,如下图
在这里插入图片描述
在嵌入式软件编译过程中,源代码被编译器编译成机器码,然后以二进制形式存储在可执行文件中。因此,可执行文件包含的二进制代码就是计算机执行的机器码。这些机器码可以直接被MCU解释和执行,从而实现程序的功能。

因此,binary file和机器码的关系可以用简单的公式表示:binary file = 机器码 + 数据。机器码是binary file中最重要的部分,它决定了程序的行为和功能。binary file中只有代码+数据,没有地址信息,所以在使用 binary file 烧录/刷写时,需要指定地址,这一过程一般在烧录/刷写上位机工具上完成。

打开一个bin文件

  • 使用UE软件,软件下载:UEdit
    通过快捷键 ctrl + H 十六进制模式和ASCII模式切换。
    在这里插入图片描述
  • 使用Vector HexView工具打开:
    在这里插入图片描述

2、hex文件

参看:【嵌入式烧录/刷写文件】-2.1-详解Intel Hex格式文件

什么是Intel Hex

Intel Hex格式最初于1973年为Intel的Intellec Microcomputer Development Systems (MDS)设计,以便从纸带上加载和执行程序。它还被用于向Intel指定memory内容,以便生产ROM。1973年,Intel的“软件小组”仅由Bill Byerly和Ken Burget以及作为外部顾问的Gary Kildall组成。从1975年开始,该格式被MCS系列II ISIS-II系统所利用,使用文件扩展名HEX。后来许多PROM和EPROM编程设备接受了这种格式。

Intel Hex文件格式是一种以ASCII文本形式传达二进制的十六进制值信息的文件格式。它通常用于对Microcontroller微控制器、EPROM和其它类型的可编程逻辑器件和硬件仿真器进行编程。在一个典型的应用程序中,compiler编译器或assembler汇编器将程序的源代码(例如C或汇编语言)转换为machine code 机器码,并将其输出到HEX文件中。有些人还将其用作容纳流数据包的容器格式。由此产生的文件常用的扩展名是.HEX或.H86。然后,programmer编程器读取HEX文件,以将机器码写入PROM中,或传输到目标系统进行加载和执行。

Intel Hex的格式

一个Intel Hex文件由一系列ASCII text record组成,一个record的长度将小于或等于92字符。这些record从左到右有以下结构:
在这里插入图片描述
例如:
在这里插入图片描述

  1. Start code:一个ASCII码冒号“:”(其十六进制值 0x3A)字符。
  2. Byte count:两个ASCII码字符,表示Data段中的ASCII码字符对数。最大计数为255(0xFF)。8(0x08),16(0x10)和32(0x20)是常用的data byte数。
  3. Address:四个ASCII码字符,表示Data段的16位起始memory地址偏移量。Data的物理地址是通过将此偏移量添加到先前建立的base address基址来计算的,从而允许memory寻址超过16位地址的64 KB限制。基址默认为零,可以通过各种类型的record进行更改。Base address和address offset始终表示为big endian大端值。
  4. Record type(参见下文的record type):两个ASCII码字符,00到05,定义了Data段的含义。
  5. Data:由2n个ASCII码字符表示的数据组成的序列(既,n组ASCII码字符对)。某些record省略此Data段(n等于零)。data byte的含义和解释取决于应用程序。(4-bit data必须存储在字节(ASCII码字符对)的下半部分或上半部分,也就是说,一个字节只容纳一个可寻址的数据项)。
  6. Checksum:两个ASCII码字符,一个计算值,可用于验证record是否有错误。一个record的checksum是checksum之前record中所有解码的ASCII码字符对值之和的LSB的二进制补码(按位取反,再加1)。

“Record type记录类型”的说明:
Intel HEX有六种标准record type:
在这里插入图片描述

“Record length记录长度”的说明
不同于Motorola S-record(S19/SREC/mot/SX)文件,Intel Hex文件中的record count仅用来表征Data段的长度,record count最大为255,而8(0x08),16(0x10)和32(0x20)是常用的data byte数。

一个record的总长度最大为521个ASCII码字符:

  • Start code为1个ASCII码字符;
  • Byte count为2个ASCII码字符;
  • Address为4个ASCII码字符;
  • Record type为2个ASCII码字符;
  • Data最大255*2个ASCII码字符;
  • Checksum为2个ASCII码字符。

如何计算“Checksum校验和”
下面的record为例,来介绍Checksum的计算:

:208800000A3400090A34000A0A34000B0A34000C0A34000D0A34000E0A34000F0A34001004

Checksum计算过程:

1.对所有Byte count + Address + Record type +Data的ASCII码字符对求和:

20 + 88 + 00 + 00 + 0A + 34 + 00 + 09 + 0A + 34 + 00 + 0A + 0A + 34 + 00 + 0B + 0A + 34 + 00 + 0C + 0A + 34 + 00 + 0D + 0A + 34 + 00 + 0E + 0A + 34 + 00 + 0F + 0A + 34 + 00 + 10 = 2FC。

2.保留最后一个LSB字节,即十六进制字节FC,其二进制为1111 1100。
3. LSB的二进制补码:取反为0000 0011,再加1后为0000 0100,即十六进制字节04。或checksum=FF - FC + 1= 04。

3、s19文件

参看:【嵌入式烧录/刷写文件】-1.1-详解Motorola S-record(S19/SREC/mot/SX)格式文件

什么是Motorola S-record

Motorola S-record是一种文件格式,由摩托罗拉在20世纪70年代中期为Motorola 6800处理器创建,以ASCII文本形式传达二进制信息的十六进制值,其文件格式也可能为:

*.SRECORD,*.SREC,*.S19,*.mot,*.S28,*.S37,*.SX,*.s,*.s1,*.s2,*.s3,*. exo, *.mxt。

在这里插入图片描述

Motorola S-record的结构

一个SREC格式文件由一系列ASCII text record组成,一个S-record的长度将小于或等于78字符。这些record从左到右有以下结构:
在这里插入图片描述
在这里插入图片描述

1.Record start:每条record以大写字母"S"ASCII码字符(十六进制 0x53)开始,代表该Record的开始;

2.Record type:一个"0"到"9"的ASCII码字符(十六进制 0x30到0x39),定义该Record的类型;

3.Byte count:两个ASCII码字符,表示该Record其余部分(Address + Data + Checksum)中的ASCII码字符对数。该段的最小值为3(16-bit address field为4个ASCII码字符,checksum field为为2个ASCII码字符,共3组ASCII码字符对),最大值为255(0xFF),其"00"/“01”/"02 "是非法值;

4.Address:四/六/八个ASCII码字符,由Record type决定。Address byte以big-endian格式排列:从左往右,地址依次增加;

5.Data:2n个ASCII码字符的序列(n组ASCII码字符对)。对于S1/S2/S3 Record,每条Record最多32组ASCII码字符对是典型的,因为它将适合于80个字符宽的terminal screen,尽管16组ASCII码字符对会更容易视觉解码特定地址;

6.Checksum:两个ASCII码字符,是Byte count、Address和Data的两个ASCII码字符对所代表的数值之和的LSB的反码。在C语言中,Sum通过以下方式转换为checksum: 0xFF - (sum & 0xFF)。

“Record type记录类型”的说明

下表描述了10个可能的S-record。S4是保留的,目前没有定义。S6最初是保留的,但后来被重新定义。
在这里插入图片描述

“Record length记录长度”的说明

Byte count = Address + Data + Checksum

Record field = S3,8-hex-character address,64-hex-character data和2-hex-character checksum,共record count = 74-hex-character = 37(0x25) Byte(这个计数忽略了行末的字符串终止符)。
在这里插入图片描述

计算“Checksum校验和”

示例: S1137AF00A0A0D0000000000000000000000000061

相加:13 + 7A+F0 + 0A+0A+0D+00+00+00+00+00+00+00+00+00+00+00+00+00 = 19E(hex) 掩码:保留最后一个LSB字节,即十六进制字节= 9E(hex),其二进制为 1001 1110。
LSB的二进制反码为 0110 0001,即十六进制字节61(hex)。或checksum=FF - 9E = 61

这里需要注意一个知识点,什么是反码什么是补码?
参看:C语言再学习 – 负数
补码=原码取反+1。

二、转换工具

1、SRecord

开源工具SRecord能够解析转换多种映像文件,Binary,Intel,intel_16等数十种文件.

  • srec_cat 转换,合并文件
  • srec_cmp 比较文件,可以比较hex和bin
  • srec_info 查看文件信息

srecord官网下载:http://srecord.sourceforge.net/
下载:srecord-1.63-win32.zip

示例:
将srec转bin脚本:
在这里插入图片描述

2、IntelHex

IntelHex是用Python写的,如其名字,专门用来处理Intel-Hex文件,当然也可以处理bin文件。其用法非常简单。

下载:IntelHex GitHub

  • 安装:
 pip install intelhex

使用方法:python插件intelhex的使用

在离线安装包的解压路径下,调用命名为hex2bin.py的脚本即可实现hex转换为bin。
在这里插入图片描述
复制hex2bin.py至app.bin的测试文件同级路径下。
在这里插入图片描述
执行脚本可得到转换后的bin文件。
在这里插入图片描述

3、Vector HexView

下载:HexView(Vector)V1.12.05
链接:https://pan.baidu.com/s/1RBSYdJhSR0tSsWq-8ZP87w
提取码:wv4a

Vector出品的工具软件HexView是汽车行业内有名的软件,支持增删改查S19、HEX、BIN等格式,并且具有对称、非对称加密、哈希计算、生成消息摘要、数字签名等高级功能。

三、Vector HexView使用

1、命令行选项

在这里插入图片描述

2、使用

参看:编写Bat脚本调用Vecotr工具软件HexView

数据字节对齐、填充

0xff填充app并256字节对齐

Hexview.exe /s boot.bin /AD:0xFF /AL:0x100 /xb -o boot.bin

其中:
/s 以静默模式运行HexView。
/AD:xx 对齐数据
/AL 对齐长度
/XB 以Fiat二进制格式输出数据,包括PRM和bin文件。

生成文件:将bin文件转换为S19文件

将bin文件转换为S19文件

Hexview.exe /s boot.bin /XS:32:2 -o boot.s19

其中:
/s 以静默模式运行HexView。
/XS[:reclinelen[:rectype]] 将数据导出为二进制文件格式。

该格式(S1、S2或S3)将由HexView根据最高地址的大小自动检测到。如果此地址是16位的,则使用S1-记录格式。如果它是24位的,则使用s2记录类型。如果最长为32位,则使用s3记录格式。
但是,选择记录类型可能是有用的,例如,当需要S2或S3时,即使最高地址低于其阈值。在这种情况下,可以选择“rectype”参数。使用以下设置:

  • Rectype = 0: S1-Record
  • Rectype = 1: S2-Record
  • Rectype = 2: S3-Record.
    每个S-Record行的数据字节数可以在recclinelen参数中指定。参数之间用冒号分隔。可以用整数或十六进制格式指定。
    例如:
    HexView intelfile.hex /XS:32 –o srecord.s19
    Hexview myhexfile.S19 /s /xs:16:2 –o mysrecord.s3

生成文件:将hex文件转换为bin文件

参看:【嵌入式烧录/刷写文件】-3.2-S19/Hex文件转换为Bin文件

hexview.exe /s input.hex /XB  -o output.bin

/XB 以Fiat二进制格式输出数据,包括PRM和bin文件。

生成文件:将S19文件转换为bin文件

hexview.exe /S input.s19 /XN  -o output.bin

其中:
/s 以静默模式运行HexView。
/XN[:reclinelen[:rectype]] 以摩托罗拉S-Record格式导出。

合并文件

Hexview.exe /s /MT:header.s19;0x00:0x00,0x200+boot.s19;0x1000:0x00,0x2F000 /XS:32:2 -o boot.s19
Hexview.exe /s /MT:boot.s19;0x00:0x00,0x30000+firmware.s19;0x30000:0x00,0xFE000 /XS:32:2 -o firmware.s19
Hexview.exe /s /MT:firmware.s19;0x00:0x00,0x12E000+APP_CAL_VALID_FLAG.s19;0:0x12E000,0x2000 /XS:32:2 -o APP.s19

其中:
/s 以静默模式运行HexView。
/MT:file1 [;offset][:range1][+file2][;offset][:range1]
以透明模式将文件或其部分从文件列表合并到内存中(不覆盖现有数据)。可选偏移量将应用于被合并文件的所有地址。该范围限制了偏移量之前的文件名可以有通配符,如?或*。

首先,需要选择合并操作的类型。合并可以在透明(/MT)或不透明(/MO)模式下完成。两者都不能混合。在一个命令行操作中,只能选择一个。
在透明模式下,所加载的文件数据将不会覆盖内部内存中的数据。不透明模式不会检查数据是否已经存在,并且将无条件地从合并后的文件中加载数据。已经存在的数据可能会被覆盖。
选项扩展:file1[;offset][:‘range’][+file2;offset][:‘range’]
文件名必须直接跟在选项后面,用’:‘或’ = '符号分隔(/Mx:file或/Mx=file)。可以添加一个可选的偏移参数。偏移量可以是正数或负数,以十六进制或整数指定。此外,可以指定从合并文件加载的数据范围。这可以在有或没有偏移的情况下给出。注意,该范围将应用于未移位的数据,然后将应用地址移位操作。
可以使用“+”字符添加进一步要合并的文件来分离下一个要加载的文件。
例如:
/MT:testfile1.hex;0x2000:0x1000,0x4000+cal2.s19;-0x3000:0x1000-0x1FFF
合并testfile1的地址范围0x1000 ~ 0x4fff。十六进制并将这些范围的所有块地址偏移0x2000。然后,合并文件cal2的地址范围0x1000-0x1FFF。S19并将块起始地址更改为-0x3000。注意:/MT和/MO不能合并在一个命令行中。在这种情况下,只使用命令行列表中的最后一个。

删除数据范围

Hexview.exe /s app.s19 /CR:0x00,0x20 /XS:32:2 -o app.s19

/s 以静默模式运行HexView。
/CR:’range1’:’range2’:… 从加载的文件中删除数据范围

参数option /CR用于从加载的数据文件中截取一个范围。它删除指定范围内的所有数据。可以指定多个范围。每个范围必须用冒号“:”分隔。
例如:
/CR:0x1000,0x200
如果存在0x1000-0x11FF范围内的数据段,则该数据将从文件中删除。所有连续的操作都将对不包括本节的数据进行操作。所有其他部分都保持不变。如果该节位于一个段或块内,它将被分割为两个。

填充区域

Hexview.exe /s app.s19 /FR:0x30000,0xFE000 /FP:0xFF /XS:32:2 -o app.s19

/s 以静默模式运行HexView。
/FR:’range1’:’range2’:… 填充区域。
/FP:xxyyzz 填充该参数将作为十六进制格式的数据流处理。由/FR参数使用

此选项用于创建和填充内存区域。如果没有提供/FP参数,HexView将创建随机数据来填充块或区域。否则,/FP参数给出的值将被重复使用。填充操作不触及现有数据。因此,它甚至可以用来填充段之间的数据。范围由其起始和长度指定,用逗号分隔,或者由开始和结束地址指定,用减号分隔(例如/FR:0x1000,0x200:0x2000-0x2FFF)。

CRC校验值

Hexview.exe /s app.s19 /CS9:@0x12DFFC;0x30000-0x12DFFB /XS:16:2 -o app.s19

/s 以静默模式运行HexView。

/CSR用于对加载的数据文件计算校验和。一个数字直接跟在选项后面,用来指定哪个校验和计算方法应使用。数字及其相关校验和如下图所示。当使用“Edit -> Create Checksum”选项时,它也可以在GUI上看到。该数字以十进制值指定,并直接跟随命令行选项,不带任何空白。/CS或/CSR可以在命令行中指定。不同之处在于,/CSR以反向顺序提供结果,也称为“小端序”,而/CS以“大端序”提供结果。
在这里插入图片描述
例如:
/CS7:@upfront;0x2000-0x3fff/0x2800-0x29ff/0x3000,0x200

上面的选项使用方法7(第8个)对0x2000-0x3ffff范围内的数据计算校验和。0x2800-0x29ff和0x3000-0x31ff的范围将被排除在校验和计算之外。排除对实际数据没有影响。校验和计算的结果将在文件数据的最开头之前写入(注意:它不会预先写入0x2000,而是写入加载文件的最开头。这适用于所有其他标记地址说明符,如’ upfront ', ’ begin ‘和’ append ')。

  • 6
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
bin hex s19互转软件是一款可以将二进制(bin文件、十六进制(hex文件和S19文件相互转换的工具。 首先,二进制文件是计算机中最基本的文件格式之一,它由一系列的0和1组成,代表着计算机的机器指令和数据。而十六进制文件是将二进制文件中的每个字节表示为16进制数的文件格式,更加便于阅读和编辑。而S19文件则是 Motorola 公司在其 8位和16位CPU上使用的一种ASCII码格式的文件,也是常用的一种固件格式。 这款软件可以实现以下功能: 1. binhex:可以将二进制文件转换为十六进制文件。用户只需选择要转换的二进制文件,软件会自动将文件内容转换为相应的十六进制表示方式,并保存为一个新的hex文件。 2. hexbin:可以将十六进制文件转换为二进制文件。用户选择要转换的hex文件,软件将文件中的十六进制数转换为二进制形式,并保存为一个新的bin文件。 3. s19转binhex:可以将S19文件转换为二进制文件或十六进制文件。用户选择要转换的S19文件,软件将解析文件中的ASCII码,将其转换为二进制或十六进制形式,并保存为相应的文件格式。 此外,该软件还可能具有其他功能,如对转换后的文件进行校验和计算、文件的合并和分割、批量转换等。 通过使用bin hex s19互转软件,用户可以轻松地在不同的文件格式之间进行转换,便于读取、编辑和应用不同类型的固件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

聚优致成

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值