【VCU】详解S19文件(S-record)

2023-05-16

目录

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. 累加: 0FCA+C00C+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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【VCU】详解S19文件(S-record) 的相关文章

  • 2021年第八届大唐杯全国大学生移动通信5G技术大赛省赛

    2021年第八届大唐杯全国大学生移动通信5G技术大赛省赛 实验背景 勘站规划 网络部署 开通调测 业务认证摘自 https www bilibili com video BV1Hr4y1Y7m8 spm id from 333 337 se
  • 通用集合中的记录相等性

    假设您有一条带有重载相等运算符的记录 TSomeRecord record Value String class operator Equal Left Right TSomeRecord Boolean end 实现比较字符串值 如果根据
  • 记录访问器的语法默认值

    像我以前一样写下答案刚才 我遇到了一个有趣的问题 data Gender Male Female deriving Eq Show data Age Baby Child PreTeen Adult deriving Eq Show Ord
  • 在 iOS 上同时录制和播放(Phonegap 版本)

    我正在使用 Phonegap Build 版本 3 3 0 开发 iOS 和 Android 应用程序 应用程序的主要焦点是录音 并在后台播放另一个音频 音乐 对于这两种情况 我都使用phonegap媒体api和正确的音频文件进行录制 iO
  • 我在记录时崩溃:“所需条件为假:format.sampleRate == hwFormat.sampleRate”afterweb rtc 调用

    我的记录工作正常 但问题是在 WebRTC 调用之后 我崩溃了 所需条件为 false format sampleRate hwFormat sampleRate 这是我开始崩溃和 installTap 的方式 func startReco
  • 如何访问记录属性?

    我需要访问 记录属性并设置 获取该属性值 首先 我想访问属性 但我不能 怎么了 版本 德尔福 XE6 示例代码 type TmyRecord record private Str String public property StrProp
  • Postgres 函数结束循环并返回错误

    我尝试创建这个函数 但系统返回 循环错误 并且我不知道如何同时返回 3 个变量 我很努力地想弄清楚这个问题 但我没有在任何地方找到答案 CREATE OR REPLACE FUNCTION conta relatos fator norma
  • Java 录制/混合两个音频流

    我有一个java应用程序 它记录来自混音器的音频并将其存储在字节数组中 或将其保存到文件中 我需要的是同时从两个混音器获取音频 并将其保存到音频文件 我正在尝试使用 wav 问题是我可以获得两个字节数组 但不知道如何合并它们 合并 我并不是
  • Haskell——有什么方法可以限定记录名称或消除记录名称的歧义吗?

    我有两种数据类型 用于hastache模板 在我的代码中 有两种不同的类型是有意义的 两者都有一个名为 name 的字段 这当然会引起冲突 似乎有一种机制可以消除对 名称 的任何调用的歧义 但实际的定义会引起问题 是否有任何解决方法 例如让
  • Delphi (-XE):通过隐式转换转换为记录类型

    我有一个带有方法的记录类型 代表特定的硬件测量类型 从仪器中作为字符串读取 该记录包含与字符串的隐式转换 如果我将字符串转换为记录类型 它似乎可以工作 但这安全吗 也就是说 通过隐式字符串转换将字符串转换为记录是否会根据分配临时值调用隐式转
  • erlang 是否以任何巧妙的方式实现记录复制和修改?

    given record foo a b c 我做了这样的事情 Thing foo a 1 2 b 3 4 c 5 6 Thing1 Thing foo a 7 8 从语义角度来看 Thing 和 Thing1 是唯一的实体 然而 从语言实
  • 使用 FMOD 将输出保存到磁盘

    我正在使用 FMOD 播放一些声音 我想将生成的混音保存到磁盘 我一直在尝试 system gt recordStart 0 sound true 路径 但这保存了设备的麦克风输入 以某种方式 我想将扬声器输出重定向到磁盘 谢谢 Marc
  • 编译器无法判断哪个具有重复字段的记录类型应该是函数参数类型

    我的程序有一些具有相同字段名称的记录类型 每种记录类型意味着不同的内容 编译器坚持认为与此记录形状匹配的函数参数必须是最后声明的类型 即使我声明具有明确字段名称的记录实例 并且始终将一致的类型传递到每个函数中 处理这个问题的适当方法是什么
  • 星号拨号方案中 ${CDR(duration)} 和 ${CDR(billsec)} 之间的区别

    我想获取通话的持续时间 但混淆了要使用哪个变量 CDR 持续时间 or CDR billsec Here https wiki asterisk org wiki display AST CDR Variables不清楚 CDR durat
  • 在 Haskell 类型类中记录选择器

    我想实施一个Type Class有几个默认方法 但我收到一个错误 我无法使用record selectors inside type classes定义 下面的代码基本上创建了type class它定义了add函数 它应该添加一个元素到re
  • 使用记录 Haskell 进行泛型派生

    我基本上是想看看是否可以在 Haskell 中模拟 ORM 框架 这样如果用户想要创建数据库模型 他们会做这样的事情 data Car Car company String model String year Int deriving Mo
  • 如何模拟Delphi记录中的位域?

    我想在 Delphi 中声明一条记录 其中包含与 C 中相同的布局 对于那些感兴趣的人 该记录是 Windows 操作系统 LDT ENTRY 记录中联合的一部分 我需要在 Delphi 中使用此记录 因为我正在 Delphi 中开发 Xb
  • 如何在这个程序中使用枚举?

    f open Student dat r opens Student dat file roll1 input Enter roll to be found to find a record in a list using a roll n
  • mysql根据之前的记录增加值

    我有一张桌子 Id Parent Counter 1 A NULL 2 A NULL 3 A NULL 4 B NULL 5 B NULL 6 C NULL 7 D NULL 8 D NULL 我想更新表 使计数器列更新 1 与之前的一样长
  • 何时在 F# 中使用区分联合与记录类型

    在继续讨论复杂的示例之前 我试图先弄清楚 F 的基础知识 我正在学习的材料介绍了区分联合和记录类型 我已经审阅了两者的材料 但我仍然不清楚为什么我们要使用其中之一而不是另一个 我创建的大多数玩具示例似乎都可以在两者中实现 记录似乎非常接近我

随机推荐

  • 使用MATLAB进行三维空间绘图

    目录 使用MATLAB进行三维空间绘图一个入门例程matlab中的mesh 函数matlab中的meshgrid 函数matlab中的plot3函数例程代码解释 使用MATLAB进行三维空间绘图 三维图具有直观 立体的空间形象 xff0c
  • python特殊数据类型应用(2)元组类型

    目录 标题python特殊数据类型应用 xff08 2 xff09 元组类型元组的定义声明元组元组的访问元组和列表的相互转换元组和列表的区别 标题python特殊数据类型应用 xff08 2 xff09 元组类型 元组的定义 在python
  • python特殊数据类型应用(3)集合类型

    目录 python特殊数据类型应用 xff08 3 xff09 集合类型集合的定义集合的声明集合的运算集合元素的增加 xff1a 交集intersection 并集union差集difference xff1a 对称差集symmetric
  • python中字符串及其格式转换技巧

    目录 python中字符串及其格式转换技巧其他数据转为字符串字符串的格式化带格式限定符的格式化字符串的连接字符串切片字符串转换为 ASCII 值 python中字符串及其格式转换技巧 在python语言中 xff0c 对字符串的处理可以说是
  • Linux命令发送Http的get或post请求(curl和wget两种方法)

    xfeff xfeff Http请求指的是客户端向服务器的请求消息 xff0c Http请求主要分为get或post两种 xff0c 在Linux系统下可以用curl和wget命令来模拟Http的请求 下面就来介绍一下Linux系统如何模拟
  • 让bat文件后台运行

    让bat文件后台运行 文章目录 让bat文件后台运行 前言方法一方法二 前言 bat文件运行时会有一个黑黑的cmd exe窗口 xff0c 很吓人 xff0c 就算用start min命令去运行bat文件 xff0c 电脑的任务栏下仍然会有
  • 5.C语言中全局变量在多个文件中使用

    转自 xff1a https www eefocus com codevisionlife blog 13 12 300658 1a0b8 html 用C语言编写程序的时候 xff0c 我们经常会遇到这样一种情况 xff1a 希望在头文件中
  • 利用GitHub actions实现Docker Image的构建并传送到Docker Hub或者harbor

    目录 1 github actions的介绍 2 dockerfile 的编写 2 1 dockerfile 范例 2 2 其他指令 3 workflow的编写 3 1 上传到docker hub 3 2 上传到 harbor 4 结果展示
  • UCOSIII编写无人机飞控程序——第一篇

    研究无人机飞控已经接近两年 xff0c 作为一个业余的兴趣爱好 兴趣源于看到国外大神Raffaello D 39 Andrea在TED做的无人机演讲和展示 xff0c 感觉无人机很像工程师所施展的魔法 xff0c 给一向给人苦逼印象的工程师
  • 解决 Ubuntu :: Configure: Error: The QtCore Library >= 4.3.0 Could Not Be Found? 问题

    解决 Ubuntu Configure Error The QtCore Library gt 61 4 3 0 Could Not Be Found 问题 作者 19届YJF 日期 2020 10 2 这是我在打 robocup 2D仿真
  • 魔都,3年,程序员到CTO

    过一个平凡无趣的人生实在太容易了 xff0c 你可以不读书 xff0c 不冒险 xff0c 不运动 xff0c 不写作 xff0c 不外出 xff0c 不折腾 但是 xff0c 人生最后悔的事情就是 xff1a 我本可以 陈素封 我可以 在
  • 几种内存泄露检测工具的比较

    概述 内存泄漏 memory leak 指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况 xff0c 在大型的 复杂的应用程序中 xff0c 内存泄漏是常见的问题 当以前分配的一片内存不再需要使用或无法访问时 xff0c 但是却并没
  • ubuntu查看磁盘占用和分配情况

    1 df hl Filesystem Size Used Avail Use Mounted on udev 978M 0 978M 0 dev tmpfs 200M 3 6M 197M 2 run dev sda5 28G 12G 15G
  • Android Studio主菜单(Main Menu)消失后,恢复显示

    当出现这个情况的时候 xff0c 我按找一般软件的办法找了半天也没找到 xff0c 最后没办法只能用万能的百度了 这里只记录一下当前我个人认为比较不错的方法 在Android Studio软件的右上角找到搜索 xff0c 输入Menu xf
  • github响应时间过长,无法访问此网站[已解决]

    某一天或某个时段总是出现 github 响应时间过长 xff0c 无法访问此网站的问题 获取github可以使用的DNS域名 通过站长工具 下的DNS查询 获取TTL值最小的 修改hosts配置 找到hosts xff08 域名解析文件 x
  • STM32(F407)—— 堆栈

    目录 1 SRAM 2 堆栈的作用 3 堆栈的设置 4 堆栈的实现 5 双堆栈机制 堆栈 是一种数据结构 堆栈都是一种数据项按序排列的数据结构 xff0c 只能在一端 称为栈顶 top 对数据项进行插入和删除 xff0c 相应地 xff0c
  • zabbix4.0学习五:Zabbix监控邮箱发送设置

    zabbix4 0学习五 xff1a Zabbix监控邮箱发送设置 文章目录 zabbix4 0学习五 xff1a Zabbix监控邮箱发送设置 前言配置centos安装mailx配置zabbix用户与报警媒介绑定 前言 zabbix里报警
  • STM32(F407)—— 存储区映射和存储器重映射

    Arm Cortex M4 处理器采用哈佛结构 xff0c 可以使用相互独立的总线来读取指令和加载 存储 数据 指令代码和数据都位于相同的存储器地址空间 xff0c 但在不同的地址范围 程序存储器 xff0c 数据存储器 xff0c 寄存器
  • MarkDown语法汇总

    文章目录 总览标题1 使用 号创建标题2 使用 61 和 号创建标题 段落1 换行2 字体格式3 删除线4 脚注5 下划线6 首行缩进7 字体颜色 大小 字体类型8 文本高亮 块引用1 嵌套块引用2 具有其他元素的块引用 列表1 有序列表2
  • 【VCU】详解S19文件(S-record)

    目录 1 概述 2 S record格式 3 S record类型 4 S19文件示例 5 校验和计算示例 6 参考 1 概述 Motorola S record是由Motorola创建的一种文件格式 xff0c 它以 ASCII十六进制