BIN,S19,M0T,SREC,HEX文件解析;FileParse(一)之文件详解

一、摘要

1.描述

  • 本文主要描述的是如何通过使用C#解析常用MCU的刷写格式文件,如Bin,S19,Hex,Mot,Serc。
  • 本软编写的语言是基于C#语言,并未使用其他关联的DLL文件,所以不同的电脑之间兼容性很好,不会出现调用异常的问题。
  • 郑重申明,关于实现方法,我也是从网上很多地方学习而来,大家若觉得版权问题可以联系我随时删除。

2.关键字

文件解析,C#,Bin,S19,Hex,Mot,Serc。

二、为什么要文件解析

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

三、BIN文件格式

  • bin后缀的是一种二进制文件,它的用途是根据用户系统或者电脑内的应用而定 的。这是文件格式binary的缩写,bin文件没有什么特别之处,直接解析即可,bin文件不带

四、S19,M0T,SREC文件格式

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

  • 文件格式内容如下:
    在这里插入图片描述

  • 文件结构

012345
SRecord typeByte CountAddressDataChecksum
  • Record type: 两个字节,一个大写“S” 和 一个0~9的数字,定义数据类型。
  • Byte count: 一个字节,表示后面其余部分(地址+数据+校验和)的字节数。该字段最小值为3(两个字节地址字段+1个字节校验和)。
  • Address: 地址段长度由Record type来决定。地址字节对齐方式为大端对齐。
  • Data: 数据段。一般建议该段最大32字节。S0/S1/S2/S3 类型的最小数据数是0。最大可记录的数据数由地址段来决定,因为数据段最大记录数是255,减去1个字节的校验位,再减去地址段,剩下的才是数据段长度,因此S0/S1最大支持252字节数据,S2最大支持251字节数据,S3最大支持250字节数据。
  • Checksum: 一个字节。Checksum = 取补码( (Byte count + Address + Data) )
  • 记录类型
RecordFieldRecord PurposeAddress FieldData FieldRecord Description
S0Header16-bit“0000”此记录包含特定于供应商的ASCII文本,表示为一系列十六进制数字对。通常可以看到此 记录的数据是以空结尾的字符串格式的。文本数据可以是任何内容,包括以下信息的混 合:文件据块名称、版本号/修订号、日期/时间、产品名称, 供应商名称、PCB上的内 存指示符、版权声明。常见的是:48 44 52,这是ASCII H、D和R--"HDR"。
S1Data16-bit Address此记录包含从16位地址字段开始的数据。此记录通常用于8位微控制器,如AVR、PIC、 8051、68xx、6502、80xx、Z80。此记录中包含的数据字节数为"字行计数字段”减去3(即,"16位地址字段"为2字节,"校验和字段"为1字节)。
S2Data24-bit Address此记录包含从24位地址开始的数据。此记录中包含的数据字节数为“字行计数字段“减去 4(即,3字节表示“24位地址字段',1字节表示"校验和字段")。
S3Data32-bit Address此记录包含从32位地址开始的数据。此记录通常用于32位微控制器,如ARM和680x0. 此记录中包含的数据字节数为'字行计数字段“减去5 即,"32位地址字段"为4字节,"校 验和字段"为1字节)。
S4ReservedN/AN/A此记录已被保留。
S5Count16-bit Count×此可选记录包含16位的S1/S2/S3记录计数。如果记录计数小于或等于 65535 ( 0xFFFF) ,则使用此记录,否则将使用S6记录。
S6Count24-bit Count×此可选记录包含24位的S1/S2/S3记录计数。如果记录计数小于或等于 16777215 ( 0xFFFFFF) ,则使用此记录。如果小于65536( 0x010000) ,则将使用S5记录。
S7Start Address(Termination)32-bit Address×此记录包含32位地址处的开始执行位置。这用于终止一系列S3记录。如果SREC文件仅用 于对内存设函进行编程,而忽略执行位置,则可以使用零地址。
S8Start Address(Termination)24-bit Address×此记录包含24位地址处的开始执行位置。这用于终止一系列S2记录。如果SREC文件仅用 于对内存设函进行编程,而忽略执行位置,则可以使用零地址。
S9Start Address(Termination)16-bit Address×此记录包含16位地址处的开始执行位置。这用于终止一系列S1记录。如果SREC文件仅用 于对内存设函进行编程,而忽略执行位置,则可以使用零地址。

五、HEX文件格式

  • hex文件是由一行行符合Intel hex文件格式的文本所构成的ASCII 文本文件。在Intel hex文件中,每一行包含一 个hex记录 。 这些记录由对应机器语言码和/或常量数据的十六 进 制编码数字组成。
  • 文件格式内容如下:
    在这里插入图片描述
  • 文件结构
012345
ABCDE
  • 描述
内容描述
数据每行都由冒号开头
A数据长度 1 Byte ,表示本行数据的长度
B数据地址 2 Byte ,表示数据的起始地址
C数据类型 1 Byte
D具体数据 N Byte ,表示本行中数据字节的数量,它和A说明的数据长度一致
E校验和 1 Byte ,检验和 = 0x100 - 累加和
  • 数据类型
内容描述
"00"数据记录:用来记录数据,HEX文件的大部分记录都是数据记录
"01"文件结束记录:用来标识文件结束,放在文件的最后,标识HEX文件的结尾
"02"扩展段地址记录:用来标识扩展段地址的记录
"03"开始段地址记录:开始段地址记录
"04"扩展线性地址记录:用来标识扩展线性地址的记录
"05"开始线性地址记录:开始线性地址记录

六、源码下载

七、其他

本文主要是讲解BIN,S19,M0T,SREC,HEX文件解析,后续章节会对源码的内容进行讲解,方便新手查询,有些地方可能会有描述性的错误,希望看到的朋友及时指出,我会及时更正错误,其他地方有些借鉴的描述,写此文章的目的是为了交流,非商业用途,欢迎私信讨论,感谢大家阅读。

八、参考

【1】:S19文件格式详解
【2】:HEX文件格式详解

  • 5
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值