• 842查看
  • 0回复

[应用层软件] bin、hex、s19等文件格式讲解

[复制链接]


该用户从未签到

发表于 10-12-2023 08:16:02 | 显示全部楼层 |阅读模式

汽车零部件采购、销售通信录       填写你的培训需求,我们帮你找      招募汽车专业培训老师


今天分享的内容是bin、hex、s19等文件格式的讲解,希望能对你有所帮助
一、bin文件

1.1 简介

bin文件是一种二进制文件格式,通常用于存储固件程序。bin文件中的数据是按字节存储的,没有任何格式信息,存储的就是raw data,因此它们可以很容易地在芯片上进行烧录和执行,烧录的时候需要指定烧录地址。一般来说,使用bin文件的优点是速度快、体积小,但是不容易阅读和调试。

来看一个bin文件的格式

bin、hex、s19等文件格式讲解w1.jpg

二、hex文件

2.1 简介

hex文件是一种十六进制格式的文件,它可以用来存储程序的机器码和地址信息。hex文件中的每一行都包含了地址和数据信息,每个文本行都称为一条记录(record),其中地址是以十六进制形式表示的。hex文件在芯片烧录和调试过程中非常方便,可以很容易地转换为二进制格式,同时可以通过十六进制形式阅读和调试程序。

此处讨论的HEX,指的是Intel-HEX,由Intel制定的格式

在烧录HEX文件的时候,一般都不需要用户指定地址,因为HEX文件内部的信息已经包括了地址。前面也介绍了bin文件是不包含地址信息的,烧录BIN文件的时候,用户是需要指定地址信息的。
2.2 格式介绍

hex格式的每一行包含6个内容,格式如下:

bin、hex、s19等文件格式讲解w2.jpg

Start code, 1个字符,是ASCII的冒号 ':'

Byte count,  1个字节, 表示这个record的data区有几个字节 (不包括地址,类型和checksum)。最大值是255 (0xFF). 16 (0x10) 和32 (0x20)是最常用的。

Address, 2个字节,  表示Memory数据的偏移地址。物理地址通常是由这个偏移加上基地址。基地址默认是0,可以通过record type来更改。基地址和地址偏移通常是一个大端的数值。

Record type, 1个字节, 00 ~ 05, 表示不同数据段的含义。

Data, 一系列data, 表示为 2n 个hex数字,实际的内容数据。

Checksum, 1个字节, 用来校验这段record内容有没有出错。计算方法就是将当前行所有的内容求和(冒号除外),得到数据再求补码。

record type类型有如下几种:

bin、hex、s19等文件格式讲解w3.jpg

2.3 举例说明

看一个实际的hex文件

第一行:0X02表示数据长度为2个字节,0X0000为地址,0X04表示记录类型为扩展线性地址,0X0005就是地址,高16位,那32位地址,就是0X50000,F5就是checksum,0X02 + 0X00 + 0X00 + 0X04 + 0X00 + 0X05 = 0X0B,求补码,取反再加一,得到0XF4 + 0X1 = 0XF5

第二行:0X20表示数据长度为32个字节,0X0000表示偏移地址,实际地址为0X50000 + 0X0000,0X00表示record type为数据,后面的就是实际的data,0X23就是校验和

最后一行::00000001FF

0X00,表示数据长度为0,0X0000 是数据在存储器中的地址,在结束文件中的地址是没有意义和可以忽略的。一个 0000 的地址是很典型的。0X01是记录类型,结束文件记录,0XFF就是0X01的补码

bin、hex、s19等文件格式讲解w4.jpg

三、s19文件
3.1 简介

s19格式文件是Motorola公司在20世纪70年代推出的一种文件格式,它主要用于存储程序的机器码和地址信息。s19格式文件也是一种十六进制格式的文件,它包含了地址、数据以及校验和等信息。与hex文件相比,s19文件具有更好的可读性和可靠性,因为它可以检查校验和以确保程序的正确性。
3.2 格式介绍

S格式文件中的每一行称为一个S记录,每个S记录由记录类型、记录长度、存储地址、代码/数据、校验和5个部分组成。

每字节数据被编码成2个16进制字符,第一个字符代表数据的高四位,第二个字符代表数据的低4位。

bin、hex、s19等文件格式讲解w5.jpg

record类型:1个字节,用来描述记录的类型,共定义了8种类型:S0:S格式文件的第一个记录,表示文件名(含路径),存储地址部分没有使用,以0000填充。此记录表示记录的开始,无需下载到MCU。S1: 表示地址为2字节(4个字符)的记录。S2: 表示地址为3字节的记录。S3: 表示地址为4字节的记录。S4:保留
S5: 标记本文件的S1、S2、S3记录的个数(此记录不是一个S文件所必须的)。S7: 地址为4字节,表示程序的开始执行地址,代码/数据部分没有被使用,此行表示程序的结束,无需下载到MCU。S8: 地址为3字节,表示程序的开始执行地址,代码/数据部分没有被使用,此行表示程序的结束,无需下载到MCU。S9: 地址为2字节,表示程序的开始执行地址,代码/数据部分没有被使用,此行表示程序的结束,无需下载到MCU。记录长度: 1个字节,显示在记录中剩余的字节数。即记录长度 = 存储地址字节数 + 代码/数据字节数 + 校验和字节数存储地址: 2或3或4个字节(由记录类型决定),用来表示代码/数据应该装载的起始地址。代码/数据: 0-64字符(即0-32字节),表示需要下载到MCU中的数据。校验和: 2个字符(即1字节),校验数据,计算方法:校验和 = 0Xff – (记录长度 + 存储地址 + 代码/数据)(注意,校验和不是字符的校验和,而是实际二进制数的校验和)3.3 举例说明

看一个s19格式的文件
第一行:S0表示S19文件的开始;0X0A表示当前记录行的长度,即10个字节;0X0000表示地址,这里没用,用0补位;0X4150502E733139表示文件名,ASCII码转成字符,就是APP.s19,0X09就是checksum,0XFF - (0X41 + 0X50 + 0X50  + 0X2E + 0X73 +0X31 + 0X39) = 0X09第二行:S2表示地址为3个字节,0X24表示当前这一行的记录长度为36;0X050000表示数据存放的地址;后面的就是32个字节的数据,0X19就是校验和后面的是一样的,以此类推
bin、hex、s19等文件格式讲解w6.jpg

四、格式转换

这里用到的转换工具为srec_cat,srec_cat 程序可用于将 EPROM 加载文件或部分 EPROM 加载文件连接在一起。因为它理解所有的输入和输出格式,所以它也可用于将文件从一种格式转换为另一种格式。

想详细了解srec_cat的请移步官网:https://srecord.sourceforge.net/

bin、hex、s19等文件格式讲解w7.jpg

4.1 将bin文件转换成hex文件
命令介绍:执行srec_cat.exe,后面跟输入文件,-binary表示输入文件是bin文件,-offset表示存放数据的地址,-o表示输出output,后面跟输出的文件名,文件类型
.\srec_cat.exexxx.bin-binary-offset 0x50000-oxxx.hex-intel
bin、hex、s19等文件格式讲解w8.jpg

4.2 将hex文件转换成bin文件
.\srec_cat.exexxx.hex-intel-offset 0x50000-oxxx.bin-binary
bin、hex、s19等文件格式讲解w9.jpg

4.3 将bin文件转换成s19文件
.\srec_cat.exexxx.bin-binary-offset 0x50000-oapp.s19-Motorola
bin、hex、s19等文件格式讲解w10.jpg

如果需要srec_cat.exe这个工具的同学,可在官网下载,若觉得麻烦,不想去官网下载,主页消息窗口回复“bin文件格式转换工具”,即可获取

最后,如果觉得有帮助,希望你能一键三连(分享,点赞,在看),你们的认可是我持续输出的动力,感激不尽

快速发帖

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|Archiver|汽车工程师之家 ( 渝ICP备18012993号-1 )

GMT+8, 4-3-2025 22:31 , Processed in 0.497528 second(s), 36 queries .

Powered by Discuz! X3.5

© 2001-2013 Comsenz Inc.