BIN,S19,M0T,SREC,HEX文件解析;FileParse(一)之文件详解
简介
- 一、摘要
- 1.描述
- 2.关键字
- 二、为什么要文件解析
- 三、BIN文件格式
- 四、S19,M0T,SREC文件格式
- 五、HEX文件格式
- 六、源码下载
- 七、其他
- 八、参考
一、摘要
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文件格式之所以放在一起说明,是因为这几种格式的文件是相同的,除了后缀名不同,文件的排列格式是一样的,没有特别之处。采用同一种方式解析即可。
文件格式内容如下:
文件结构
0 | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|
S | Record type | Byte Count | Address | Data | Checksum |
- 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) )
- 记录类型
RecordField | Record Purpose | Address Field | Data Field | Record Description |
---|---|---|---|---|
S0 | Header | 16-bit“0000” | √ | 此记录包含特定于供应商的ASCII文本,表示为一系列十六进制数字对。通常可以看到此 记录的数据是以空结尾的字符串格式的。文本数据可以是任何内容,包括以下信息的混 合:文件据块名称、版本号/修订号、日期/时间、产品名称, 供应商名称、PCB上的内 存指示符、版权声明。常见的是:48 44 52,这是ASCII H、D和R--"HDR"。 |
S1 | Data | 16-bit Address | √ | 此记录包含从16位地址字段开始的数据。此记录通常用于8位微控制器,如AVR、PIC、 8051、68xx、6502、80xx、Z80。此记录中包含的数据字节数为"字行计数字段”减去3(即,"16位地址字段"为2字节,"校验和字段"为1字节)。 |
S2 | Data | 24-bit Address | √ | 此记录包含从24位地址开始的数据。此记录中包含的数据字节数为“字行计数字段“减去 4(即,3字节表示“24位地址字段',1字节表示"校验和字段")。 |
S3 | Data | 32-bit Address | √ | 此记录包含从32位地址开始的数据。此记录通常用于32位微控制器,如ARM和680x0. 此记录中包含的数据字节数为'字行计数字段“减去5 即,"32位地址字段"为4字节,"校 验和字段"为1字节)。 |
S4 | Reserved | N/A | N/A | 此记录已被保留。 |
S5 | Count | 16-bit Count | × | 此可选记录包含16位的S1/S2/S3记录计数。如果记录计数小于或等于 65535 ( 0xFFFF) ,则使用此记录,否则将使用S6记录。 |
S6 | Count | 24-bit Count | × | 此可选记录包含24位的S1/S2/S3记录计数。如果记录计数小于或等于 16777215 ( 0xFFFFFF) ,则使用此记录。如果小于65536( 0x010000) ,则将使用S5记录。 |
S7 | Start Address(Termination) | 32-bit Address | × | 此记录包含32位地址处的开始执行位置。这用于终止一系列S3记录。如果SREC文件仅用 于对内存设函进行编程,而忽略执行位置,则可以使用零地址。 |
S8 | Start Address(Termination) | 24-bit Address | × | 此记录包含24位地址处的开始执行位置。这用于终止一系列S2记录。如果SREC文件仅用 于对内存设函进行编程,而忽略执行位置,则可以使用零地址。 |
S9 | Start Address(Termination) | 16-bit Address | × | 此记录包含16位地址处的开始执行位置。这用于终止一系列S1记录。如果SREC文件仅用 于对内存设函进行编程,而忽略执行位置,则可以使用零地址。 |
五、HEX文件格式
- hex文件是由一行行符合Intel hex文件格式的文本所构成的ASCII 文本文件。在Intel hex文件中,每一行包含一 个hex记录 。 这些记录由对应机器语言码和/或常量数据的十六 进 制编码数字组成。
- 文件格式内容如下:
- 文件结构
0 | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|
: | A | B | C | D | E |
- 描述
内容 | 描述 |
---|---|
: | 数据每行都由冒号开头 |
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" | 开始线性地址记录:开始线性地址记录 |
六、源码下载
- 文件转换工具(FileCrcCreat)点击此处进行下载。
七、其他
本文主要是讲解BIN,S19,M0T,SREC,HEX文件解析,后续章节会对源码的内容进行讲解,方便新手查询,有些地方可能会有描述性的错误,希望看到的朋友及时指出,我会及时更正错误,其他地方有些借鉴的描述,写此文章的目的是为了交流,非商业用途,欢迎私信讨论,感谢大家阅读。
八、参考
【1】:S19文件格式详解
【2】:HEX文件格式详解
BIN,S19,M0T,SREC,HEX文件解析;FileParse(一)之文件详解相关推荐
- 阿里聚安全Android应用漏洞扫描器解析:本地拒绝服务检测详解
阿里聚安全Android应用漏洞扫描器解析:本地拒绝服务检测详解 阿里聚安全的Android应用漏洞扫描器有一个检测项是本地拒绝服务漏洞的检测,采用的是静态分析加动态模糊测试的方法来检测,检测结果准确 ...
- 把java文件打包成.jar (jar命令详解)
把java文件打包成.jar (jar命令详解) 先打开命令提示符(win2000或在运行框里执行cmd命令,win98为DOS提示符),输入jar Chelp,然后回车(如果你盘上已经有了jdk1. ...
- java中属性文件读取案例_java相关:Spring中属性文件properties的读取与使用详解
java相关:Spring中属性文件properties的读取与使用详解 发布于 2020-6-3| 复制链接 摘记: Spring中属性文件properties的读取与使用详解实际项目中,通常将一些 ...
- dicom多帧转换_Python解析多帧dicom数据详解
概述 pydicom是一个常用python DICOM parser.但是,没有提供解析多帧图的示例.本文结合相关函数和DICOM知识做一个简单说明. DICOM多帧数据存储 DICOM标准中关于多帧 ...
- c++中.dll与.lib文件的生成与使用的详解
c++中.dll与.lib文件的生成与使用的详解 --------------------------------------------------------------------------- ...
- python中with open写csv文件_Python中的CSV文件使用with语句的方式详解
是否可以直接使用with语句与CSV文件?能够做这样的事情似乎很自然: import csv with csv.reader(open("myfile.csv")) as read ...
- java 输入流可以合并吗_Java 使用IO流实现大文件的分割与合并实例详解
java 使用IO流实现大文件的分割与合并 文件分割应该算一个比较实用的功能,举例子说明吧比如说:你有一个3G的文件要从一台电脑Copy到另一台电脑, 但是你的存储设备(比如SD卡)只有1G ,这个时 ...
- python读取大文件csv_对python中大文件的导入与导出方法详解
1.csv文件的导入和导出 通过一个矩阵导出为csv文件,将csv文件导入为矩阵 将csv文件导入到一个矩阵中 import numpy my_matrix = numpy.loadtxt(open( ...
- android 7 apk 安装程序,Android安装apk文件并适配Android 7.0详解
Android安装apk文件并适配Android 7.0详解 首先在AndroidManifest.xml文件,activity同级节点注册provider: android:name="a ...
- 【运维】PowerShell编程 目录文件相关方法的封装与案例详解
PowerShell 目录文件管理 目录文件相关方法的封装与案例详解 李俊才 的 CSDN 博客:https://blog.csdn.net/qq_28550263?type=blog 邮箱 :291 ...
最新文章
- 最高10万奖励!不限选题!高通AI应用创新大赛应用赛道详解
- 使用Canvas进行验证码识别
- Linux_正则表达式
- H3C SecPath防火墙GRE+IPSEC+OSPF典型配置举例
- 一张PDF了解JDK10 GC调优秘籍-附PDF下载
- 爱思助手短信备份到安卓_爱思助手肿么将短信导入iphone
- 函数计算如何访问 PostgreSQL 数据库
- Windows下使用Git配置SSH免密登录
- [转载] 生活小常识 :joke:
- 基于阿里云服务器+wordpress构建自己的网站(全过程系列,无需任何编程知识)
- 计算机网络监控,计算机网络连接监控系统.doc
- 《Spring揭秘》读后感
- Selenium与phantomjs安装与环境配置,以及易班网站模拟登陆操作
- 前端使用jspdf生成PDF通过ajax传输后台生成PDF文件
- 700 boost yeezy_公司级Adidas Yeezy Boost 700上脚测评
- 别混淆你想要什么和能否实现
- 在VFP中如何调用其它程序
- win10不能设置ip地址
- linux服务器重启日志,Linux系统最近重启时间、错误日志
- 27岁转行软件测试,成功虽晚但不迟,写给跟我一样在迷茫的人...
热门文章
- 关于Visual studio 2010运行时闪退问题的解决
- mysql的decimal类型与Java的BigDecimal
- 【Android 布局】AbsoluteLayout(绝对布局)
- 如何学习TRIZ理论将其应用于创新实践当中?
- COMP9021笔记
- ubuntu16.04 搜狗输入法/谷歌拼音输入法
- http无状态还是web应用无状态
- 设计模式探索二(引自:http://blog.csdn.net/UserQi)
- springboot使用xhtmlrenderer将html转图片 支持img标签、css
- Android实现学生信息管理系统之学生端功能实现