S19与HEX文件介绍

S19文件与HEX文件是控制器软件的镜像文件。S19/HEX文件可以刷写到控制器内部,从而实现控制器软件更新。S19/HEX文件中包含了大量控制器软件的实用信息。

一.S19文件介绍

1.1.S19文件概述

S19文件即Motorola S-Record是由Motorola创建的一种文件格式,它以ASCII十六进制文本形式存储二进制信息。这种文件格式也可以称为S-Record、srec、S19、S28、S37。它通常用于对微控制器和其它类型的可编程逻辑设备进行编程。

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

1.2.S19文件格式

S19格式文件由一行行ASCII文本记录组成。这些记录从左到右具有以下结构:

图1.2-1 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)。

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

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

checksum(校验和):2个字符。字节计数、地址和数据的若干字符以两个字符为一对, 将它们相加求和,和的溢出部分不计,只保留最低两个字符NN,checksum = 0xFF-0xNN。有关详细的校验和示例,请参见示例部分。

1.3.S19文件的S记录类型

下表描述了 7种常见的 S 记录(其余非常见S记录未统计到表格中)。

记录字段 功能 地址字段 数据字段 描述
S0 标题 16位“0000” 此记录包含以一系列十六进制数字对表示的供应商特定ASCII文本。
S1 数据 16位地址 该记录包含从16位地址开始的数据。
S2 数据 24位地址 该记录包含从24位地址开始的数据。
S3 数据 32位地址 该记录包含从32位地址开始的数据。
S7 终止 32位地址 该记录包含32位地址的起始执行位置。这用于终止一系列S3记录。如果 SREC 文件仅用于对存储设备进行编程并且忽略执行位置,则可以使用零地址。
S8 终止 24位地址 该记录包含24位地址的起始执行位置。这用于终止一系列S2记录。如果 SREC 文件仅用于对存储设备进行编程并且忽略执行位置,则可以使用零地址。
S9 终止 16位地址 该记录包含16位地址的起始执行位置。这用于终止一系列S1记录。如果 SREC 文件仅用于对存储设备进行编程并且忽略执行位置,则可以使用零地址。

从上表可以看出,S1记录与S9记录总是配对使用,S2记录与S8记录总是配对使用,S3记录与S7记录总是配对使用,这也是此类文件被称作S19文件(或者S28文件S37文件)的主要原因。

1.4.S19文件示例

下图是在RapidECU-U34控制器程序编译后生成的S19文件U34T2.srec中截取的部分内容。文件是在Notepad++软件中打开的,具备自动高亮与分类显示的功能。

S0记录:记录类型是“S0”,地址场没有被用,用零置位(0x0000)。数据场中的信息转换成字符串就是:U34T2.srec即当前S19文件的名称。此行表示程序的开始,不需烧入控制器,只是告诉用户这个文件的相关信息。

S2记录:记录类型是“S2”,地址字段由3个字节地址来说明,数据字段由可烧入控制器的数据组成。

S8记录:记录类型是“S8”,地址字段由3字节的地址来说明,包含了开始执行地址。没有数据字段。此行表示程序的结束,不需烧入控制器。

1.5.校验和计算示例

以上图中最后一行为例演示如何计算校验和:

  1. 累加(十六进制):04+50+14+20=88

  2. 掩码,保留最低两个字符:0x88(此处因为只有两个字符所以不变)

  3. 0xFF - 0x88 = 0x77,与上图相符。

二.HEX文件介绍

2.1.HEX文件概述

HEX文件即Intel HEX是Intel制定的一种文件格式,HEX文件通常用于存储将被存于ROM或EEPROM中的程序和数据。HEX文件是由一行行符合Intel HEX文件格式的文本所构成的ASCII文本文件。

HEX的英语原始意思是16进制,这也是此类文件被称作HEX文件的主要原因。

2.2.HEX文件格式

整个HEX文件以行为单位,每行以冒号开头,内容全部为16进制码,每2个ASCII码字符表示1个Hex字节。每行都符合以下图示的格式:

图2.2-1 HEX文件的行格式

起始码:每一行数据由冒号:(英文输入法下的冒号)作为起始码。

字节长度:两个字符(一对十六进制数字),指示数据字段中的字节数(十六进制数字对)。最大字节数为255(0xFF)。16(0x10)和32(0x20)是常用的字节数。

地址:四个字符,代表数据的16位起始存储器地址偏移量。数据的物理地址是通过将此偏移量添加到先前建立的基地址来计算的,因此允许内存寻址超过16位地址的64KB限制。基地址默认为零,可以通过各种类型的记录进行更改。基地址和地址偏移量始终表示为大端值。

指令类型:两个字符00到05,定义了这行数据的具体含义(参见下一章节)。

数据:n字节数据序列,由2*n个字符表示。

校验码:两个字符,可以用来验证记录没有错误的计算值。注意校验和算法:累加和=校验码之前所有16进制求和,校验和=0x100-累加和。

2.3.HEX文件的指令类型

下表描述了6种HEX文件的指令类型。

指令类型 名称 描述
00 数据记录 用来记录数据,HEX文件的大部分记录都是数据记录。
01 文件结束记录 用来标识文件结束,放在文件的最后,标识HEX文件的结尾。数据字段为空(因此字节数为00),并且地址字段通常为 0000。
02 扩展段数据记录 用来标识扩展段地址的记录,不常用。
03 开始段数据记录 开始段地址记录,不常用。
04 扩展线性地址记录 用来标识扩展线性地址的记录,允许32位寻址(最大4GB)。记录的地址字段将被忽略(通常是0000),其字节数始终为02。两个数据字节(大字节序)为所有后续类型指定32位绝对地址的高16位00记录; 这些高位地址位适用于下一个04记录。类型的绝对地址00通过组合最近的高16位地址位形成记录04用低16位的地址记录00记录。如果是类型00 记录之前没有任何类型04记录,然后其高16位地址位默认为0000。
05 开始线性地址记录 开始线性地址记录,地址字段是 0000(未使用),字节数始终为04。四个数据字节代表一个32位地址值(big-endian)。

通常,一个HEX文件以04记录开始第一行,以01记录结束最后一行,中间会有大量的00数据记录,05记录则只有一行。

2.4.HEX文件示例

下图是在RapidECU-A3控制器程序编译后生成的HEX文件A3T1.hex中截取的部分内容。文件是在Notepad++软件中打开的,具备自动高亮与分类显示的功能。

04记录:字节长度为02,记录的地址字段0000将被忽略,两个数据字节(A002)为所有后续类型指定32位绝对地址的高16位00记录。

00记录:字节长度为0x20,绝对地址的低16位为地址字段0000,数据字段由可烧入控制器的数据组成,校验码为0x1B。

05记录:字节长度为04,记录的地址字段0000将被忽略,四个数据字节(A0020000)代表一个32位地址值,即程序的起始地址。

01记录:字节长度为00,记录的地址字段0000将被忽略,无数据字段,标识HEX文件的结尾。

2.5.校验码计算示例

以上图中第一行为例演示如何计算校验和:

  1. 累加(十六进制):02+00+00+04+A0+02=A8

  2. 掩码,保留最低两个字符:0xA8(此处因为只有两个字符所以不变)

  3. 0x100 - 0xA8 = 0x58,与上图相符。

三.S19与HEX文件编辑软件HexView

HexView是VECTOR公司免费提供的十六进制或者二进制文件编辑工具软件。HexView可以用来查看、编辑各种格式的十六进制或者二进制文件,支持S19与Hex文件。HexView软件下载地址:HexView

HexView的几个典型功能:

  1. 格式转换,各种S19与Hex文件之间互相转换。

  2. 剪切S19与Hex文件,从S19与Hex文件剪切一部分指定地址的数据为单独文件。

  3. 填充S19与Hex文件,将S19与Hex文件指定地址填充特定数据。

  4. 合并S19与Hex文件,将多个S19与Hex文件合并为一个文件。

关于HexView软件的详细使用方法请参考HexView软件自带参考手册。

HexView属于专业软件,如果仅仅是需要查看S19文件与HEX文件的话,推荐使用Notepad++软件,Notepad++具备自动高亮与分类显示的功能。

需要注意的是,为了在Notepad++中使用自动高亮与分类显示的功能,S19文件的文件后缀名需要提前更改为.srec,否则Notepad++无法自动高亮与分类显示。

四.S19与HEX文件小结

S19文件与HEX文件是控制器软件的镜像文件。S19/HEX文件可以刷写到控制器内部,从而实现控制器软件更新。学习理解与使用S19/HEX文件是电控工程师的进阶技能之一。ECUCoder可以在编译模型的同时自动生成S19/HEX文件。查看S19文件与HEX文件推荐使用Notepad++软件,编辑S19文件与HEX文件推荐使用HexView