【嵌入式烧录/刷写文件】-S19文件解析(首行数据解析)

目录

               一、概述

               二、S19文件解析

               三、举例


 

一、概述:

Motorola S-record是一种文件格式,由摩托罗拉在20世纪70年代中期为Motorola 6800处理器创建,以ASCII文本形式传达二进制信息的十六进制值,其文件格式也可能为SRECORD,SREC,S19,mot,.S28,S37,SX,.s,.s1,.s2,.s3,. exo,.mxt。

S-record格式文件是Freescale CodeWarrior编译器生成的后缀名为.S19的程序文件,是一段直接烧写进MCU的ASCII码,英文全称问Motorola format for EEPROM programming。

注意:

上面“是一段直接烧写进MCU的ASCII码”,这样说可能会误导初学者,因为并不是直接将ASCII码写进MCU,写进MCU前还要对S19文件进行一个解析,把有用的机器代码分解出来,然后再进行写入,写入的也不是ASCII而是二进制码。

二、S19文件解析

S19文件格式与mot、SREC文件只是命名方式不同,看数据格式的话,其实是同一种文件,这里以S19文件为例。

S19文件每一行数据全部由记录类型和十六进制数字组成,包含类型、长度、地址、数据和校验和五个部分。

以下举例详细介绍每个组成部分

S19中记录类型包括S0、S1、S2、S3、S5、S7、S8、S9,S4是保留的,目前没有定义。

S0:
位于文件的第一行,和其他行不同,地址部分没有使用,用“0000”置位,整行表示记录的开始;

数据场中的信息被划分为以下四个子域(此行表示程序的开始,不需烧入memory):

                    name(名称):20个字符,用来编码单元名称

                    ver(版本):2个字符,用来编码版本号

                    rev(修订版本):2个字符,用来编码修订版本号

                    description(描述):0-36个字符,用来编码文本注释。

S1
表示地址长度为两字节(4字符)的记录,包含类型、长度、地址、数据和校验和五个部分;

S2:
表示地址长度为三字节(6字符)的记录,包含类型、长度、地址、数据和校验和五个部分;

S3:
表示地址长度为四字节(8字符)的记录,包含类型、长度、地址、数据和校验和五个部分;

S5:
表示文件中含有S1、S2、S3记录的个数,其后不接数据,包含S5的记录并不是每个文件必须的;

S7:
表示地址长度为四字节(8字符)的记录,包含类型、长度、地址和校验和四个部分,此行表示程序的结束;

S8:
表示地址长度为三字节(6字符)的记录,包含类型、长度、地址和校验和四个部分,此行表示程序的结束;

S9:
表示地址长度为两字节(4字符)的记录,包含类型、长度、地址和校验和四个部分,此行表示程序的结束;

只有S1、S2、S3、S5需要写入Flash中。

三、举例                 

S0 11 0000 0000486578766965772056312E31 08 :

长度:长度包含一个字节,长度 = 地址字节数 + 数据字节数 + 校验和字节数;

0x11转换成十进制为17,即地址2+数据14+校验1 三部分长度为17;

地址:表示该行的起始地址,字节数由类型决定,S1两个字节,S2三个字节,S3四个字节;

0000.由于是S0类型,所以地址位不用,使用0000置位,表示记录的开始;

数据:0000486578766965772056312E31,解析为HexviewV1.1(版本生成工具信息)

校验和:08, 校验和=0xff – (记录长度 + 存储地址 + 数据)——>0xff-(0x11+0x00+0x00 +0x00+0x00+0x48+0x65+0x78+0x76+0x69+0x65+0x77+0x20+0x56+0x31+0x2E+0x31)=0xff-(0x3F7)——>0x3F7取0xF7——>0xff-0xf7=0x08

S3 0D 00F98000 015A000000FA0400 20:

类型:S3,地址长度为4个字节

长度:0x0D转换成十进制为13,即地址4+数据8+校验1 三部分长度为13;

地址:00F98000.表明将数据015A000000FA0400下载到从地址00F98000开始的一段连续的地址中;

数据:015A000000FA0400

校验和:20, 校验和=0xff – (记录长度 + 存储地址 + 数据)——>0xff-(0x0D+0x00 +0xF9 +0x80 +0x00 +0x01 +0x5A +0x00 +0x00 +0x00 +0xFA +0x04 +0x00)=0xff-(0x2DF)——>0x3F7取0xDF——>0xff-0xDF=0x20

累加和checksum在线校验工具
1)累加和checksum校验算法,不同领域可能采用不同算法,算法存在细微差别
2)本工具采用简便累加和计算方法,对十进制串按8位进行分割,对各8位值进行累加,即得校验和;
         如果校验和的数值超过十六进制的FF,也就是255,就要求其补码作为校验和
3)如01 12 45 30 22 11,将各8位数值进行相加,即得校验和bb
4)如01 12 45 30 22 11 cc,将各8位数值相加后,结果大于255,对结果取补码后,得校验和为79
5)校验和checksum算法不一致,可能结果不一样,后续增加其它checksum算法,如通信领域8位校验和、16位校验和、IP/TCP/UDP头部校验和算法

相关推荐

  1. 如何读取文件的最后一

    2024-04-09 10:10:02       32 阅读
  2. Dockerfile文件

    2024-04-09 10:10:02       20 阅读
  3. 【ARM 嵌入 编译系列 10.4 -- 生成二进制文件

    2024-04-09 10:10:02       34 阅读
  4. 发票pdf文件

    2024-04-09 10:10:02       34 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-09 10:10:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-09 10:10:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-09 10:10:02       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-09 10:10:02       20 阅读

热门阅读

  1. Liquid的Covenants:处理比特币脚本中的金额

    2024-04-09 10:10:02       13 阅读
  2. 如何查看git管理了哪些文件?

    2024-04-09 10:10:02       10 阅读
  3. [RK3588-Android12] 关于HDMIN-IN视频调试命令

    2024-04-09 10:10:02       27 阅读
  4. go语言并发编程(二)——锁

    2024-04-09 10:10:02       11 阅读
  5. 力扣记录 4.8

    2024-04-09 10:10:02       10 阅读
  6. Hive和Pig有什么区别吗?

    2024-04-09 10:10:02       10 阅读
  7. 课时89:流程控制_函数进阶_函数变量

    2024-04-09 10:10:02       13 阅读
  8. 前端进阶特训营-发布会

    2024-04-09 10:10:02       11 阅读
  9. hive窗口函数数据范围

    2024-04-09 10:10:02       11 阅读