The Motorola S-record format is an ASCII hexadecimal ("hex") text encoding for binary data. It is also known as the SREC[1] or S19[2] format. Each record contains a checksum to detect data that has been corrupted during transmission.[3] The first record (S0) may include arbitrary comments such as a program name or version number.[4] The last (termination) record (S7, S8, or S9) may include a starting address.[4]
The S-record format was created in the 1970s for the Motorola 6800 processor. Software development tools for that and other embedded processors would make executable code and data in the S-record format. PROM programmers would then read the S-record format and "burn" the data into the PROMs or EPROMs used in the embedded system.
There are other ASCII encoding with a similar purpose. BPNF, BHLF, and B10F were early binary formats, but they are neither compact nor flexible. Hexadecimal formats are more compact because they represent 4 bits rather than 1 bit per character. Many, such as S-record, are more flexible because they include address information so they can specify just a portion of a PROM. Intel HEX format was often used with Intel processors. Tek Hex is another hex format that can include a symbol table for debugging.
Contents |
An SREC format file consists of a series of ASCII records. All hexadecimal (hex) numbers are Big Endian. The records have the following structure:
S1137AF0 0A0A0D0000000000000000000000000061
13+7A+F0 +0A+0A+0D+00+00+00+00+00+00+00+00+00+00+00+00+00 = 19E , then take the least significant byte and then take the ones' complement of that byte (9E) which equals 0x61
There are eight record types, listed below:
Record | Description | Address Bytes | Data Sequence |
---|---|---|---|
S0 | Block header | 2 | Yes |
S1 | Data sequence | 2 | Yes |
S2 | Data sequence | 3 | Yes |
S3 | Data sequence | 4 | Yes |
S5 | Record count | 2 | No |
S7 | End of block | 4 | No |
S8 | End of block | 3 | No |
S9 | End of block | 2 | No |
The S0 record data sequence contains vendor specific data rather than program data. String with file name and possibly version info.
Data sequence, depending on size of address needed. A 16-bit/64K system uses S1, 24-bit address uses S2 and full 32-bit uses S3.
Count of S1, S2 and S3 records previously appearing in the file or transmission. The record count is stored in the 2-byte address field. There is no data associated with this record type.[5]
The address field of the S7, S8, or S9 records may contain a starting address for the program.[6]
S00F000068656C6C6F202020202000003C S11F00007C0802A6900100049421FFF07C6C1B787C8C23783C6000003863000026 S11F001C4BFFFFE5398000007D83637880010014382100107C0803A64E800020E9 S111003848656C6C6F20776F726C642E0A0042 S5030003F9 S9030000FC