本文是根据维基百科及其他网络资源,经自己理解后做的总结。
S19文件格式的由来及介绍可自行查看维基,
详见维基百科:https://en.wikipedia.org/wiki/SREC_(file_format)
下面直接上干货。
===============干货分割线===============
Motorola_SREC_Chart.png
1.记录结构
0 | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|
S | Type | Byte Count | Address | Data | Checksum |
一个SREC格式文件包含一系列ASCLL格式的的数据。具体如下:
- Record type: 两个字节,一个大写“S” 和 一个0~9的数字,定义数据类型。
- Byte count: 一个字节,表示后面其余部分(地址+数据+校验和)的字节数。该字段最小值为3(两个字节地址字段+1个字节校验和)。
- Address: 地址段长度由Record type来决定。地址字节对齐方式为大端对齐。
- Data: 数据段。一般建议该段最大32字节。S0/S1/S2/S3 类型的最小数据数是0。最大可记录的数据数由地址段来决定,因为数据段最大记录数是255,减去1个字节的校验位,再减去地址段,剩下的才是数据段长度,因此S0/S1最大支持252字节数据,S2最大支持251字节数据,S3最大支持250字节数据。
- Checksum: 一个字节。Checksum = 取补码( (uint8_t)(Byte count + Address + Data) )
2.文本结束符
SREC记录由一个或多个ASCII行终止字符分隔,以便每个记录单独出现在文本行上。
通过可视化地划分记录来增强易读性,还提供了记录之间的填充,可以用来提高机器解析效率。
创建十六进制记录的程序通常使用符合其操作系统惯例的行终止字符。
例如,Linux程序使用一个LF(换行符,十六进制值0A)字符终止行,而Windows程序使用一个CR(回车符,十六进制值0D)后跟一个LF。
3.记录类型
RecordField | RecordPurpose | AddressField | DataField | RecordDescription |
---|---|---|---|---|
S0 | Header | 16-bit "0000" | ✔ | 此记录包含特定于供应商的ASCII文本,表示为一系列十六进制数字对。通常可以看到此记录的数据是以空结尾的字符串格式的。文本数据可以是任何内容,包括以下信息的混合:文件/模块名称、版本号/修订号、日期/时间、产品名称、供应商名称、PCB上的内存指示符、版权声明。常见的是:48 44 52,这是ASCII H、D和R-“HDR” |
S1 | Data | 16-bit Address | ✔ | 此记录包含从16位地址字段开始的数据。此记录通常用于8位微控制器,如AVR、PIC、8051、68xx、6502、80xx、Z80。此记录中包含的数据字节数为“字节计数字段”减去3(即,“16位地址字段”为2字节,“校验和字段”为1字节)。 |
S2 | Data | 24-bit Address | ✔ | 此记录包含从24位地址开始的数据。此记录中包含的数据字节数为“字节计数字段”减去4(即,3字节表示“24位地址字段”,1字节表示“校验和字段”)。 |
S3 | Data | 32-bit Address | ✔ | 此记录包含从32位地址开始的数据。此记录通常用于32位微控制器,如ARM和680x0。此记录中包含的数据字节数为“字节计数字段”减去5(即,“32位地址字段”为4字节,“校验和字段”为1字节)。 |
S4 | Reserved | N/A | N/A | 此记录已被保留。 |
S5 | Count | 16-bit Count | ✖ | 此可选记录包含16位的S1/S2/S3记录计数。如果记录计数小于或等于65535(0xFFFF),则使用此记录,否则将使用S6记录。 |
S6 | Count | 24-bit Count | ✖ | 此可选记录包含24位的S1/S2/S3记录计数。如果记录计数小于或等于16777215(0xFFFFFF),则使用此记录。如果小于65536(0x010000),则将使用S5记录。注:此新记录是最近的更改(可能不是正式的) |
S7 | Start Address (Termination) | 32-bit Address | ✖ | 此记录包含32位地址处的开始执行位置。这用于终止一系列S3记录。如果SREC文件仅用于对内存设备进行编程,而忽略执行位置,则可以使用零地址。 |
S8 | Start Address (Termination) | 24-bit Address | ✖ | 此记录包含24位地址处的开始执行位置。这用于终止一系列S2记录。如果SREC文件仅用于对内存设备进行编程,而忽略执行位置,则可以使用零地址。 |
S9 | Start Address (Termination) | 16-bit Address | ✖ | 此记录包含16位地址处的开始执行位置。这用于终止一系列S1记录。如果SREC文件仅用于对内存设备进行编程,而忽略执行位置,则可以使用零地址。 |
网友评论