|
汽车零部件采购、销售通信录 填写你的培训需求,我们帮你找 招募汽车专业培训老师
今天分享的内容是bin、hex、s19等文件格式的讲解,希望能对你有所帮助
一、bin文件
1.1 简介
bin文件是一种二进制文件格式,通常用于存储固件程序。bin文件中的数据是按字节存储的,没有任何格式信息,存储的就是raw data,因此它们可以很容易地在芯片上进行烧录和执行,烧录的时候需要指定烧录地址。一般来说,使用bin文件的优点是速度快、体积小,但是不容易阅读和调试。
来看一个bin文件的格式
二、hex文件
2.1 简介
hex文件是一种十六进制格式的文件,它可以用来存储程序的机器码和地址信息。hex文件中的每一行都包含了地址和数据信息,每个文本行都称为一条记录(record),其中地址是以十六进制形式表示的。hex文件在芯片烧录和调试过程中非常方便,可以很容易地转换为二进制格式,同时可以通过十六进制形式阅读和调试程序。
此处讨论的HEX,指的是Intel-HEX,由Intel制定的格式
在烧录HEX文件的时候,一般都不需要用户指定地址,因为HEX文件内部的信息已经包括了地址。前面也介绍了bin文件是不包含地址信息的,烧录BIN文件的时候,用户是需要指定地址信息的。
2.2 格式介绍
hex格式的每一行包含6个内容,格式如下:
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类型有如下几种:
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的补码
三、s19文件
3.1 简介
s19格式文件是Motorola公司在20世纪70年代推出的一种文件格式,它主要用于存储程序的机器码和地址信息。s19格式文件也是一种十六进制格式的文件,它包含了地址、数据以及校验和等信息。与hex文件相比,s19文件具有更好的可读性和可靠性,因为它可以检查校验和以确保程序的正确性。
3.2 格式介绍
S格式文件中的每一行称为一个S记录,每个S记录由记录类型、记录长度、存储地址、代码/数据、校验和5个部分组成。
每字节数据被编码成2个16进制字符,第一个字符代表数据的高四位,第二个字符代表数据的低4位。
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就是校验和后面的是一样的,以此类推
四、格式转换
这里用到的转换工具为srec_cat,srec_cat 程序可用于将 EPROM 加载文件或部分 EPROM 加载文件连接在一起。因为它理解所有的输入和输出格式,所以它也可用于将文件从一种格式转换为另一种格式。
想详细了解srec_cat的请移步官网:https://srecord.sourceforge.net/
4.1 将bin文件转换成hex文件
命令介绍:执行srec_cat.exe,后面跟输入文件,-binary表示输入文件是bin文件,-offset表示存放数据的地址,-o表示输出output,后面跟输出的文件名,文件类型
.\srec_cat.exexxx.bin-binary-offset 0x50000-oxxx.hex-intel
4.2 将hex文件转换成bin文件
.\srec_cat.exexxx.hex-intel-offset 0x50000-oxxx.bin-binary
4.3 将bin文件转换成s19文件
.\srec_cat.exexxx.bin-binary-offset 0x50000-oapp.s19-Motorola
如果需要srec_cat.exe这个工具的同学,可在官网下载,若觉得麻烦,不想去官网下载,主页消息窗口回复“bin文件格式转换工具”,即可获取
最后,如果觉得有帮助,希望你能一键三连(分享,点赞,在看),你们的认可是我持续输出的动力,感激不尽
|
|