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

目录

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】中截取的部分内容。

【VCU】详解S19文件(S-record)_第1张图片 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

你可能感兴趣的:(VCU,笔记,编程语言,ascii码表,motorola)