【嵌入式烧录/刷写文件】-1-详解Motorola S-record(S19/SREC/mot/SX)格式文件

目录

1 什么是Motorola S-record

2 Motorola S-record的格式

2.1 Motorola S-record的结构

2.1.1 “Record type记录类型”的说明

2.1.2 “Record length记录长度”的说明

2.1.3 如何计算“Checksum校验和”

2.2 Record order记录顺序

2.3 Text line terminator文本行终止符

2.4 Comments注释

结尾


优质博文推荐阅读(单击下方链接,即可跳转):

点击返回「Autosar从入门到精通-实战篇」总目录

点击返回「《Autosar_BSW高阶配置》总目录」

1 什么是Motorola S-record

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

Motorola S-record通常用于对microcontroller微控制器EPROMEEPROM其他类型的可编程逻辑器件中的flash memory进行编程。在一个典型的应用中,compiler编译器assembler汇编器将程序的源代码(如C或汇编语言)转换为machine code机器码,并将其输出为HEX文件。然后,程序员导入HEX文件,将机器码"刻录"到非易失性存储器non-volatile memory中,或传输到目标系统中进行加载和执行。

2 Motorola S-record的格式

2.1 Motorola S-record的结构

S

Type

Byte Count

Address

Data

Checksum

一个SREC格式文件由一系列ASCII text record组成,一个S-record的长度将小于或等于78字节。这些record从左到右有以下结构:

举例:

1.Record start:每条record以大写字母"S"字符(ASCII 0x53)开始,代表该Record的开始;

2.Record type:一个"0"到"9"的十六进制数字字符(ASCII 0x30到0x39),定义该Record的类型;

3.Byte count:两个十六进制数字字符(既,1个字节,"00"到"FF"),表示该Record其余部分(Address + Data + Checksum)中的字节数。该段的最小值为3(16-bit address field为2字节,checksum field为1字节),最大值为255(0xFF),其"00"/"01"/"02 "是非法值;

4.Address:四/六/八个十六进制数字字符(既,2/3/4个字节),由Record type决定。Address bytebig-endian格式排列:从左往右,地址依次增加

5.Data:2n个十六进制数字字符的序列(既,n个字节)。对于S1/S2/S3 Record,每条Record最多32个字节是典型的,因为它将适合于80个字符宽的terminal screen,尽管16个字节会更容易视觉解码特定地址的每个字节;

6.Checksum:两个十六进制数字字符(既,1个字节),是Byte count、Address和Data的两个十六进制数字字符对所代表的数值之和的最小有效字节LSB的补码在C语言中,Sum通过以下方式转换为checksum: 0xFF - (sum & 0xFF)

2.1.1 “Record type记录类型”的说明

下表描述了10个可能的S-record。S4是保留的,目前没有定义。S6最初是保留的,但后来被重新定义。

Record field

Record purpose

Address field

Data field

Record description

S0

Header

16-bit
"0000"

适用

该record包含供应商特定的ASCII文本注释,表示为一系列成对的十六进制数字字符。该record的数据通常是以空尾字符串的格式出现。文本数据可以是任何东西,包括以下信息的混合:文件/模块名称、版本/修订号、日期/时间、产品名称、供应商名称、PCB上的memory代号、版权声明、签名。这是很常见的情况:48、44、52,这是字母 "H"、"D"、"R "的ASCII表示。

S1

Data

16-bit
Address

适用

该record包含从16-bit address开始的数据。record包含的数据字节数是"Byte Count Field "最小为3("16-bit Address Field "的2个字节,"Checksum Field"的1个字节)record通常用于8位和16位处理器

S2

Data

24-bit
Address

适用

该record包含从24-bit address开始的数据。record中包含的数据字节数是 "Byte Count Field"最小为4("24-bit Address Field "的3个字节," Checksum Field "的1个字节)record通常用于32位处理器

S3

Data

32-bit
Address

适用

该record包含从32-bit address开始的数据。record包含的数据字节数是"Byte Count Field"最小为5("32-bit Address Field "的4个字节," Checksum Field"的1个字节)record通常用于32位处理器

S4

Reserved

该record是保留的。

S5

Count

16-bit
Count

不适用

该可选的record包含一个S1/S2/S3 record的16-bit count。如果record count小于或等于65535(0xFFFF),则使用该record,否则将使用S6 record。

S6

Count

24-bit
Count

不适用

该可选的record包含一个S1/S2/S3 record的24-bit count。如果record count小于或等于16777215(0xFFFFFF),则使用该record。如果小于65536 (0x10000),那么将使用S5 record。

注意:这个较新的record是最近的变化(它可能不是正式的)。

S7

Start Address
(Termination)

32-bit
Address

不适用

该record包含32-bit address的起始执行位置。这是用来终止一系列的S3 record的。如果SREC文件只用于对一个memory设备进行编程,并且执行位置被忽略,那么可以使用一个0的地址。

S8

Start Address
(Termination)

24-bit
Address

不适用

该record包含24-bit address的起始执行位置。这是用来终止一系列S2 record的。如果SREC文件只用于对一个memory设备进行编程,并且执行位置被忽略,那么可以使用一个0的地址。

S9

Start Address
(Termination)

16-bit
Address

不适用

该record包含16-bit address的起始执行位置。这是用来终止一系列S1 record的。如果SREC文件只用于对一个memory设备进行编程,并且执行位置被忽略,那么可以使用一个0的地址。

2.1.2 “Record length记录长度”的说明

record count的长度随着Record field的变化而变化。历史上Unix O/S文件中的一个手册页指出:"一个S-record文件由一连串特殊格式的ASCII字符串组成。一个S-record的长度将小于或等于78字节"。"本手册页是唯一记录了总record length 78字节限制或data length 64字节限制的地方。"。

Record field = S14-hex-character address,64-hex-character data和2-hex-character checksum,共record count = 70-hex-character = 23 Byte(这个计数忽略了行末的字符串终止符)。

Record field = S26-hex-character address,64-hex-character data和2-hex-character checksum,共record count = 72-hex-character = 24 Byte(这个计数忽略了行末的字符串终止符)。

Record field = S38-hex-character address,64-hex-character data和2-hex-character checksum,共record count = 74-hex-character = 25 Byte(这个计数忽略了行末的字符串终止符)。

注意:

如果忽略78字符的历史限制,一个S-record的最大长度将是514个字符。假设字节数为0xFF(255),则Record Type field为2,Byte Count field为2,Address / Data / Checksum field为2*255514个字符

以下图S0为例,Address + Data + Checksum长度超过了78字符:

2.1.3 如何计算“Checksum校验和”

下面的record为例,来介绍Checksum的计算:

S10DFC004303030B01004259010104

Checksum计算过程:

1.对所有Byte count + Address + Data十六进制字节求和:0D + FC + 00 + 43 + 03 + 03 + 0B + 01 + 00 + 42 + 59 + 01 + 01 = 1FB。

2.保留最后一个LSB字节,即十六进制字节FB,其二进制为1111 1011。

3. LSB的二进制补码为0000 0100,即十六进制字节04。或checksum=FF - FB = 04

2.2 Record order记录顺序

尽管一些Unix文档指出 "文件中S-record的顺序并不重要,也不需要假定特定的顺序",但实际上大多数软件都对SREC record进行了排序。

典型的record顺序是从一个(有时是可选的)S0 header record开始,接着是一个或多个S1/S2/S3 data record的序列,可能有一个可选的S5/S6 count record,最后是一个适当的S7/S8/S9 termination record

16-bit address record:

S03E0000433A5C55736572735C757365725C4465736B746F705C424E5C455642434D5C62696E5C53565F43383133335F62335F332E31312E315F4259312E31C6
S123C000CF2600C6055B134A81E6FE4A81BCFE0005C015DA670FE60018E60FA000020C0FE0
S123C020B0000E3C0FC0000EC70FD0000E1600000000000000000000000000000000C70094
S123C040FC00E900E200E400E000E500E700EA00EB00E800EF00EE00EC00C400C500C900AD
......
S123FBC00600C0003013880000A5000001F403E803E800000400FFFFFFFFFFFFFFFFFFFF26
S123FBE0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03DA954962
S10DFC004303030B01004259010104
S110FC203230313630363232313732360070
S105FF7AD7FEAC
S105FF8AD8E4B5
S105FFD4D872DD
S105FFDED9AE96
S107FFE4D960D9B54E
S107FFF0D722D871C7
S105FFFEC0003D
……
S9030000FC

24-bit address record: 

S2240F7CE04E128840E5D49440D6CD9340866194408B66AC402D41AD407729B240462FB24059
S2240F7D00D70CA940D70CA940D70CA94041A7B14041A7B14041A7B140DAADC7401151AB4085
S2240F7D20D266BD40B8EDBF406A17A540BDFC8A4021F187404E128840E5D49440D6CD934069
S2240F7D40866194408B66AC402D41AD407729B240462FB240D70CA940D70CA940D70CA940BF
S2240F7D6041A7B14041A7B14041A7B140DAADC7401151AB40D266BD40B8EDBF406A17A5404A
……
S804000000FB

32-bit address record:

S00600006C7463B6
S32580054924203889A4B409A57470D882186DFF12E6857F3EA060FC54CF160A74CF6DFFD0E661
S3258005494454CF6F1F16806DFF05E6857F70D8C82F14FF5E1454CF16033C0454CF160B960804
S3258005496474CF6DFFBDE654CF74AF820854AFDF085482857670D8857F02B082044964080A88
S3258005498460FFD445857F06B054F060F2095F02090245D46754217E05095006095F012500E6
S325800549A4857F0AB0821560F5857F0EB05450745FD4450951020974F1D4450951020974F1BF
S325800549C4D44F09F1060974218201A0BF8F11003082320F32002026027625DA020F3F00F0E3
S325800549E4A6F4C211FCF4BD074B00F657857F0AB060FF857F0EB074FFD46F857F0AB0A07408
……
S30FA00F20C0916000E8D9EE5EEFDC0E8A
S30FA00F20E0916000E8D9EE72DFDC0E66
S705A0048020B6

2.3 Text line terminator文本行终止符

SREC Record被一个或多个ASCII行termination character终止符隔开,使每条Record单独出现在一个文本行上。这通过视觉上划分Record的边界来提高可读性,同时也提供了Record之间的填充,可以用来提高机器的解析效率。创建HEX Record的程序通常使用符合其操作系统惯例的行终止符。例如,Linux程序使用一个LF字符(line feed换行,ASCII字符值为0x0A)来终止行,而Windows程序使用一个CR字符(carriage return回车,ASCII字符值为0x0D),后面跟着一个LF字符。

2.4 Comments注释

除了S0 header record中的ASCII-hex转换的注释外,SREC文件格式不正式支持人类可读的ASCII注释,尽管有些软件忽略了所有不以 "S "开头的行和/或忽略了Checksum field(因此尾部文本有时被用于(不兼容)注释)后的所有文本。

部分内容摘自:

SREC (file format) - 维基百科https://en.wikipedia.org/wiki/SREC_%28file_format%29

结尾

获取更多“汽车电子资讯”和“工具链使用”,

请关注CSDN博客“汽车电子助手”,做您的好助手。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/3166.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

HTTP/2.x:最新的网页加载技术,快速提高您的SEO排名

2.1 http2概念HTTP/2.0(又称HTTP2)是HTTP协议的第二个版本。它是对HTTP/1.x的更新,旨在提高网络性能和安全性。HTTP/2.0是由互联网工程任务组(IETF)标准化的,并于2015年发布。2.2 http2.x与http1.x区别HTTP…

spring5(三):IOC操作Bean管理(基于xml方式)

IOC操作Bean管理(基于xml方式)前言一、基于 xml 方式创建对象二、基于 xml 方式注入属性1. 使用 set 方法进行属性注入2. 使用有参数构造进行属性注入3. p 名称空间注入简化操作(了解)三、xml 注入其它类型属性1. 字面量2. 注入属…

【云原生之企业级容器技术 Docker实战一】Docker 介绍

目录一、Docker 介绍1.1 容器历史1.2 Docker 是什么1.3 Docker 和虚拟机,物理主机1.4 Docker 的组成1.5 Namespace1.6 Control groups1.7 容器管理工具1.8 Docker 的优势1.9 Docker 的缺点1.10 容器的相关技术1.10.1 容器规范1.10.2 容器 runtime1.10.3 容器管理工具…

看齐iOS砍掉祖传功能,Android 16G内存也危险了

手机内存发展是真的迅速,12GB 没保持几年现在又朝着 16GB 普及。 相比 iOS 的墓碑机制,Android 后台就主打一个真实,只是可惜 APP 不那么老实。 如果你较早接触 Android 机,各种系统管理、优化 APP 的一键加速、清理应该还历历在…

AD9235芯片手册阅读笔记

特征 单个3 V电源操作(2.7 V至3.6 V) SNR70 dBc至65 MSPS时的奈奎斯特 SFDR85 dBc至65MSPS时奈奎斯特低功率: 300 mW至65 MSPS差分输入,带500 MHz带宽 片上参考和SHA DNL0.4 LSB 灵活模拟输入:1 V p-p至2 V p-p范围 偏…

Python的加密与解密,你知道几类?

人生苦短,我用python python 安装包资料:点击此处跳转文末名片获取 据记载, 公元前400年, 古希腊人发明了置换密码。 1881年世界上的第一个电话 保密专利出现。 在第二次世界大战期间, 德国军方启用“恩尼格玛”密码机&#xff0…

[数据结构] 用两个队列实现栈详解

文章目录 一、队列实现栈的特点分析 1、1 具体分析 1、2 整体概括 二、队列模拟实现栈代码的实现 2、1 手撕 队列 代码 queue.h queue.c 2、2 用队列模拟实现栈代码 三、总结 🙋‍♂️ 作者:Ggggggtm 🙋‍♂️ 👀 专栏&#xff1…

入职第一天就被迫离职,找工作多月已读不回,面试拿不到offer我该怎么办?

大多数情况下,测试员的个人技能成长速度,远远大于公司规模或业务的成长速度。所以,跳槽成为了这个行业里最常见的一个词汇。 前言 前几天,我们一个粉丝跟我说,正常入职一家外包,什么都准备好了&#xff0…

Portainer堪称最优秀的容器化管理平台

一、Portainer是什么? Portainer是一款开源的容器管理平台,支持多种容器技术,如Docker、Kubernetes和Swarm等。它提供了一个易于使用的Web UI界面,可用于管理和监控容器和集群。Portainer旨在使容器管理更加简单和可视化&#xf…

WinForm | C# 界面弹出消息通知栏 (仿Win10系统通知栏)

ApeForms 弹出消息通知栏功能 文章目录ApeForms 弹出消息通知栏功能前言全局API通知栏起始方向通知排列方向通知栏之间的间隔距离无鼠标悬停时的不透明度消息通知窗体的默认大小示例代码文本消息提示栏文本消息提示栏(带选项)图文消息提示栏图文消息提示…

【Spring-boot源码剥析】| 启动原理之侠客行篇

目录一. 传说篇二. 快速启动原理三. 自动配置原理3.1 准备阶段3.2 配置阶段3.3 运行阶段三. Pefect Ending一. 传说篇 江湖传说,有一个神秘的江湖大侠,他名叫SpringBoot,擅长于开发出快速启动的应用程序。这个侠客的江湖名号传遍了整个江湖&a…

did not find expected key while parsing a block mapping at line 2 column 1的解决方法

问题描述 真的是困扰了好久的一个问题&#xff0c;真的是邪乎了&#xff0c;报的错误实际上是错的 完整报错&#xff1a; Error: YAML Exception reading /path_to_your_blog/_publications/2020-08-21.md: (<unknown>): did not find expected key while parsing a b…

JQuery

概述&#xff1a; JQuery&#xff1a;JavaScript和查询&#xff0c;他是辅助JavaScript开发的js类库。 他的的核心思想就是write less&#xff0c;do moire 实现了很多浏览器兼容问题 JQuery的核心函数 $(参数) 1 参数是函数&#xff1a;$(function(){}) window.onlooad fun…

AI风暴 :文心一言 VS GPT-4

&#x1f497;wei_shuo的个人主页 &#x1f4ab;wei_shuo的学习社区 &#x1f310;Hello World &#xff01; 文心一言 VS GPT-4 文心一言&#xff1a;知识增强大语言模型百度全新一代知识增强大语言模型&#xff0c;文心大模型家族的新成员&#xff0c;能够与人对话互动&#…

TryHackMe-Zeno(boot2root)

Zeno 你有和伟大的斯多葛派哲学家芝诺一样的耐心吗&#xff1f;试试吧&#xff01; 端口扫描 循例 nmap Web枚举 进到12340端口 目录扫描 /rms是一个业务站点 在admin登录页面尝试弱口令和注入&#xff0c;也都没有成功 SQLI 在点餐这发现了个get参数id&#xff0c;尝试sql…

八大排序算法之归并排序(递归实现+非递归实现)

目录 一.归并排序的基本思想 归并排序算法思想(排升序为例) 二.两个有序子序列(同一个数组中)的归并(排升序) 两个有序序列归并操作代码: 三.归并排序的递归实现 递归归并排序的实现:(后序遍历递归) 递归函数抽象分析: 四.非递归归并排序的实现 1.非递归归并排序算法…

如何从 Vue CLI 迁移到 Vite

如何从 Vue CLI 迁移到 Vite 十一月11 2021如果你在 2021 年之前一直在使用 Vue 进行开发&#xff0c;那么你选择的构建工具很有可能是 Vue CLI。一段时间以来&#xff0c;它一直是脚手架 Vue.js 项目的事实标准。不过现在&#xff0c;Evan You的下一代构建工具Vite已经引起了很…

精选7个 Python 学习资源库,助你成为优秀的开发者

当你在学习编程时&#xff0c;很容易被大量的资源所吓到&#xff0c;不知道该从何开始。 GitHub 仓库是一个很好的起点&#xff0c;因为它们提供了一种非常实用的方式来了解实际的编程应用。你可以查看其他人的代码&#xff0c;并将其与自己的代码进行比较和学习。 当涉及到 …

kubernetes(k8s)为容器和 Pod 分配内存资源

kubernetes(k8s)为容器和 Pod 分配内存资源 展示如何将内存请求&#xff08;request&#xff09;和内存限制&#xff08;limit&#xff09;分配给一个容器。 我们保障容器拥有它请求数量的内存&#xff0c;但不允许使用超过限制数量的内存。 创建新的命名空间 kubectl creat…

【数据结构】顺序栈的C语言实现

​ ​&#x1f4dd;个人主页&#xff1a;Sherry的成长之路 &#x1f3e0;学习社区&#xff1a;Sherry的成长之路&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;数据结构 &#x1f3af;长路漫漫浩浩&#xff0c;万事皆有期待 文章目录栈1. 栈的概念1.1 栈…
最新文章