目录

1. 概述

2. S-record格式

3. S-record类型

4. S19文件示例

5. 校验和计算示例

6. 参考


1. 概述

Motorola S-record是由Motorola创建的一种文件格式,它以 ASCII十六进制文本形式传送二进制信息。这种文件格式也可以称为SRECORDSRECS19S28S37。它通常用于对微控制器、EPROM 和其他类型的可编程逻辑设备进行编程。

S-record格式是在1970年代中期为 Motorola 6800处理器创建的。该处理器和其他嵌入式处理器的软件开发工具将生成S-record格式的可执行代码和数据。程序员将读取S-record格式并将数据“刻录”到嵌入式系统中使用的PROM或EPROM中。

Hex 是另一种十六进制格式,指的是Intel-HEX,它是由Intel制定的格式。

2. S-record格式

S-record 格式文件由一系列 ASCII 文本记录组成。这些记录从左到右具有以下结构:

S19文件行格式

type(记录类型):2个字符,一个大写的"S"(0x53),然后是一个数字0~9,定义了记录的类型 (S0,S1,S2,S3,S5,S7,S8,S9)。

count(字节计数):2个字符,16进制数字,表示记录的其余部分(address + data + checksum)的字节数(16进制数字对)。对于 16 位地址字段加上 1 个校验和字节,该字段的最小值为 3,最大值为 255 (0xFF)。通常记录有 32 个数据字节。

address(地址):4或6或8个字符。由记录类型 type 决定。对于S1S9类型(S19),地址字段为 4 个十六进制数字(2 个字节)。对于S2S8 record(S28),地址字段为 6 个十六进制数字(3个字节),对于S3S7 record(S37),地址字段为 8 个十六进制数字(4 个字节)。地址首先以 MSB 发送。地址字节以大端格式排列。

data(数据):0—64字符。用来组成和说明一个代表了内存载入数据或者描述信息的16进制的值。

checksum(校验和):2个字符。这些字符当被配对并换算成16进制数据的时候形成了一个最低有效字符 节,该字符节用来表达作为补充数据,地址和数据库的字符对所代表的(字节的)补码的byte总和。即计数值、地址场和数据场的若干字符以两个字符为一对, 将它们相加求和,和的溢出部分不计,只保留最低两位字符NN,checksum =0xFF-0xNN。有关详细的校验和示例,请参见示例部分。

不建议在一个记录中发送太多的数据字节,因为这可能会在出错时增加传输时间。还要避免每条记录只发送几个数据字节,因为与有效负荷相比,地址开销太大。

3. S-record类型

下表描述了 10 种可能的 S 记录。S4 是保留的,当前未定义。S6 最初是保留的,但后来在某个时候重新定义。

记录
字段
记录
目的
地址
字段
数据
字段
记录
描述
S0 标题 16 位
“0000”

此记录包含以一系列十六进制数字对表示的供应商特定 ASCII 文本。通常以的格式查看此记录的数据。文本数据可以是任何内容,包括以下信息的混合:文件/模块名称、版本/修订号、日期/时间、产品名称、供应商名称、PCB 上的内存指示符、版权声明。
S1 数据 16 位
地址

该记录包含从 16 位地址字段开始的数据。该记录通常用于 8 位微控制器,例如 AVR、PIC、8051、68xx、6502、80xx、Z80。该记录包含的数据字节数为“字节计数字段”减3,其中“16位地址字段”为2个字节,“校验和字段”为1个字节。
S2 数据 24 位
地址

该记录包含从 24 位地址开始的数据。该记录包含的数据字节数为“字节计数字段”减4,其中“24位地址字段”为3字节,“校验和字段”为1字节。
S3 数据 32 位
地址

该记录包含从 32 位地址开始的数据。该记录通常用于 32 位微控制器,例如 ARM 和 680x0。该记录包含的数据字节数为“字节计数字段”减5,其中“32位地址字段”为4个字节,“校验和字段”为1个字节。
S4 预订的 不适用 不适用 此记录已保留。
S5 数数 16 位
计数

此可选记录包含S1 / S2 / S3记录的 16 位计数。如果记录计数小于或等于 65,535 (0xFFFF),则使用此记录,否则将使用S6记录。
S6 数数 24 位
计数

此可选记录包含S1 / S2 / S3记录的 24 位计数。如果记录计数小于或等于 16,777,215 (0xFFFFFF),则使用此记录。如果小于 65,536 (0x010000),则将使用S5记录。注意:这个较新的记录是最近的变化(不确定是否是官方的)。
S7 起始地址
(终止)
32 位
地址

该记录包含 32 位地址的起始执行位置。这用于终止一系列S3记录。如果 SREC 文件仅用于对存储设备进行编程并且忽略执行位置,则可以使用零地址。
S8 起始地址
(终止)
24 位
地址

该记录包含 24 位地址的起始执行位置。这用于终止一系列S2记录。如果 SREC 文件仅用于对存储设备进行编程并且忽略执行位置,则可以使用零地址。
S9 起始地址
(终止)
16 位
地址

该记录包含 16 位地址的起始执行位置。这用于终止一系列S1记录。如果 SREC 文件仅用于对存储设备进行编程并且忽略执行位置,则可以使用零地址。

在上表中,可以看到为什么他们将这些摩托罗拉格式称为S19S28S37。名称中的第一个数字代表正常数据记录标识符。第二个数字是文件结束记录标识符。

4. S19文件示例

下图是在ECU程序编译后生成的S19文件【Project.abs.s19】中截取的部分内容。

 S0 Record:记录类型是“S0” (0x5330)。地址场没有被用,用零置位(0x0000)。数据场中的信息转换成字符串就是:“E:\VMS\test\VCU\bin\Project.abs ”。此行表示程序的开始,不需烧入memory,只是告诉你这个文件的相关信息,实际应用中,将工程名Project换成工程名+版本号+描述文本的格式,易于识别文件,这样在ECU升级时时非常有用。

S1 Record:记录类型是“S1” (0x5331)。地址场由2个字节地址来说明。数据场由可载入的数据组成。

S9 Record:记录类型是“S9” (0x5339)。地址场由2字节的地址说明,包含了开始执行地址。没有数据场。此行表示程序的结束,不需烧入memory。

5. 校验和计算示例

S1 0F CAC0  0C0C0C0C0C0C0C007F400000 53

被解码以显示校验和值是如何计算的,如下所示:

  1. 累加: 0F + CA+C0 + 0C+0C+0C+0C+0C+0C+0C+00+7F+40+00+00 = 2AC(hex)
  2. 掩码:保留最低有效字节 = AC(hex)  = 1010 1100(bin)
  3. 补码:计算最低有效字节的补码 =  53(hex)

6. 参考

【1】WIKI百科.SREC

【VCU】详解S19文件(S-record)相关推荐

  1. [转]文件IO详解(二)---文件描述符(fd)和inode号的关系

    原文:https://www.cnblogs.com/frank-yxs/p/5925563.html 文件IO详解(二)---文件描述符(fd)和inode号的关系 ---------------- ...

  2. python open写入_Python3 open() 函数详解 读取文件写入文件追加文件二进制文件

    Python3 open() 函数详解 读取文件写入文件追加文件二进制文件 open()函数的主要作用是打开文件并返回相应文件对象,使用文件对象可以对当前文件进行读取.写入.追加等操作,默认情况下&q ...

  3. python获取mysql中的数据供js调用_详解js文件通过python访问数据库方法

    我来教你 js文件怎么通过python访问数据库,希望能够为你带来帮助. 1.如果是要提交表单内容给 服务器的 python 处理,那么只需要在表单 里面的 action 填写服务端的处理路由就可以了 ...

  4. android 数据文件存储,实例详解Android文件存储数据方式

    总体的来讲,数据存储方式有三种:一个是文件,一个是数据库,另一个则是网络.下面通过本文给大家介绍android文件存储数据方式. 1.文件存储数据使用了java中的io操作来进行文件的保存和读取,只不 ...

  5. linux下测试ftp传输,linux下ftp命令使用详解---linux文件传输ftp命令

    linux下ftp命令使用详解---linux文件传输ftp命令 上一篇 / 下一篇  2010-12-18 09:15:35 / 个人分类:Linux ftp(file transfer proto ...

  6. 计算机无法读取exe文件,详解EXE文件出错不能打开的修复方法

    我们在XP电脑的使用中,很多的小伙伴在安装XP以后出现不知道打开EXE文件出错的问题,出现文件打不开的情况可能就是系统中的注册表设置的值有问题造成的,很多的小伙伴都是有出现这样的情况不知道怎么处理,今 ...

  7. 43. Systemd的Unit配置详解,unit文件位置,优先级,unit类型,unit文件字段详解,Unit/Service/Install字段,添加mysql服务等例子

    Systemd的Unit配置详解,unit文件位置和优先级,unit文件类型,unit文件字段详解,[Unit]字段,[Service]字段,[Install]字段,添加服务,创建.service 文 ...

  8. ZIP文件格式详解(一)——文件数据格式

    ZIP文件格式详解(一)--文件数据格式 ------------------------------------------------------------------------------- ...

  9. php读取图片文件流,详解php文件包含原理(读取文件源码、图片马、各种协议、远程getshell等)...

    详解php文件包含原理(读取文件源码.图片马.各种协议.远程getshell等) 作者是namezz (看完图相当于做了一轮实验系列) 现有文件代码如下 1.png (21.16 KB, 下载次数: ...

最新文章

  1. 身份验证——《跟我学Shiro》
  2. iOS多线程的初步研究(十)-- dispatch同步
  3. opencv学习笔记8:类型转换
  4. wxWidgets:wxTreebook类用法
  5. windows应用程序的开发一个键盘记录器
  6. 如何基于 Notadd 构建 API (Laravel 写 API)
  7. Python中class的简单介绍
  8. Nuxt --- 也来说说vue服务端渲染
  9. php 合并数组 效率,PHP将两个关联数组合并函数-增高函数效率
  10. mysql忘记密码时如何修改root用户密码
  11. 计算机知识课程简单课件,计算机基础知识实用课件.ppt
  12. java的学习--第一章 java基础入门
  13. Leetcode 905. Sort Array By Parity
  14. 直接序列扩频通信系统
  15. linux下打开.mpp文件(微软project).
  16. UBOOT源码分析的第一阶段start.S分析(3)
  17. matlab 热图,基于表格数据创建热图
  18. 鸿蒙跨屏流转是什么,华为智慧屏SE系列评测:从用上到爱上 就是一“眼”之间...
  19. 基于J2EE的科研项目管理系统设计与实现
  20. RNA-seq结果图片如何解读(火山图、韦恩图、聚类热图和折线图)

热门文章

  1. jsf java_JSF学习实战
  2. Matlab绘制特殊图形------直方图
  3. java 第三方接口安全性_提供接口给第三方使用,需要加上校验保证接口的安全性(rsa加密解密)...
  4. Win11图片打开为Windows照片查看器
  5. scrapy splash模拟点击
  6. ar8031网卡中的光口和电口相互切换
  7. 15必须掌握的win7快捷键
  8. 王者荣耀虚拟服务器设置方法,《王者荣耀》操作设置详解
  9. JSP————详解jsp标签
  10. NAND Flash 和 eMMC 的区别