简介

  • 一、摘要
    • 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(一)之文件详解相关推荐

  1. 阿里聚安全Android应用漏洞扫描器解析:本地拒绝服务检测详解

    阿里聚安全Android应用漏洞扫描器解析:本地拒绝服务检测详解 阿里聚安全的Android应用漏洞扫描器有一个检测项是本地拒绝服务漏洞的检测,采用的是静态分析加动态模糊测试的方法来检测,检测结果准确 ...

  2. 把java文件打包成.jar (jar命令详解)

    把java文件打包成.jar (jar命令详解) 先打开命令提示符(win2000或在运行框里执行cmd命令,win98为DOS提示符),输入jar Chelp,然后回车(如果你盘上已经有了jdk1. ...

  3. java中属性文件读取案例_java相关:Spring中属性文件properties的读取与使用详解

    java相关:Spring中属性文件properties的读取与使用详解 发布于 2020-6-3| 复制链接 摘记: Spring中属性文件properties的读取与使用详解实际项目中,通常将一些 ...

  4. dicom多帧转换_Python解析多帧dicom数据详解

    概述 pydicom是一个常用python DICOM parser.但是,没有提供解析多帧图的示例.本文结合相关函数和DICOM知识做一个简单说明. DICOM多帧数据存储 DICOM标准中关于多帧 ...

  5. c++中.dll与.lib文件的生成与使用的详解

    c++中.dll与.lib文件的生成与使用的详解 --------------------------------------------------------------------------- ...

  6. python中with open写csv文件_Python中的CSV文件使用with语句的方式详解

    是否可以直接使用with语句与CSV文件?能够做这样的事情似乎很自然: import csv with csv.reader(open("myfile.csv")) as read ...

  7. java 输入流可以合并吗_Java 使用IO流实现大文件的分割与合并实例详解

    java 使用IO流实现大文件的分割与合并 文件分割应该算一个比较实用的功能,举例子说明吧比如说:你有一个3G的文件要从一台电脑Copy到另一台电脑, 但是你的存储设备(比如SD卡)只有1G ,这个时 ...

  8. python读取大文件csv_对python中大文件的导入与导出方法详解

    1.csv文件的导入和导出 通过一个矩阵导出为csv文件,将csv文件导入为矩阵 将csv文件导入到一个矩阵中 import numpy my_matrix = numpy.loadtxt(open( ...

  9. android 7 apk 安装程序,Android安装apk文件并适配Android 7.0详解

    Android安装apk文件并适配Android 7.0详解 首先在AndroidManifest.xml文件,activity同级节点注册provider: android:name="a ...

  10. 【运维】PowerShell编程 目录文件相关方法的封装与案例详解

    PowerShell 目录文件管理 目录文件相关方法的封装与案例详解 李俊才 的 CSDN 博客:https://blog.csdn.net/qq_28550263?type=blog 邮箱 :291 ...

最新文章

  1. 最高10万奖励!不限选题!高通AI应用创新大赛应用赛道详解
  2. 使用Canvas进行验证码识别
  3. Linux_正则表达式
  4. H3C SecPath防火墙GRE+IPSEC+OSPF典型配置举例
  5. 一张PDF了解JDK10 GC调优秘籍-附PDF下载
  6. 爱思助手短信备份到安卓_爱思助手肿么将短信导入iphone
  7. 函数计算如何访问 PostgreSQL 数据库
  8. Windows下使用Git配置SSH免密登录
  9. [转载] 生活小常识 :joke:
  10. 基于阿里云服务器+wordpress构建自己的网站(全过程系列,无需任何编程知识)
  11. 计算机网络监控,计算机网络连接监控系统.doc
  12. 《Spring揭秘》读后感
  13. Selenium与phantomjs安装与环境配置,以及易班网站模拟登陆操作
  14. 前端使用jspdf生成PDF通过ajax传输后台生成PDF文件
  15. 700 boost yeezy_公司级Adidas Yeezy Boost 700上脚测评
  16. 别混淆你想要什么和能否实现
  17. 在VFP中如何调用其它程序
  18. win10不能设置ip地址
  19. linux服务器重启日志,Linux系统最近重启时间、错误日志
  20. 27岁转行软件测试,成功虽晚但不迟,写给跟我一样在迷茫的人...

热门文章

  1. 关于Visual studio 2010运行时闪退问题的解决
  2. mysql的decimal类型与Java的BigDecimal
  3. 【Android 布局】AbsoluteLayout(绝对布局)
  4. 如何学习TRIZ理论将其应用于创新实践当中?
  5. COMP9021笔记
  6. ubuntu16.04 搜狗输入法/谷歌拼音输入法
  7. http无状态还是web应用无状态
  8. 设计模式探索二(引自:http://blog.csdn.net/UserQi)
  9. springboot使用xhtmlrenderer将html转图片 支持img标签、css
  10. Android实现学生信息管理系统之学生端功能实现