SREC (file format)
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. The first record (S0) may include arbitrary comments such as a program name or version number.[3] The last (termination) record (S7, S8, or S9) may include a starting address.[3]
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 |
Format [edit]
An SREC format file consists of a series of ASCII records. All hexadecimal (hex) numbers are Big Endian. The records have the following structure:
- Start code, one character, an S.
- Record type, one digit, 0 to 9, defining the type of the data field.
- Byte count, two hex digits, indicating the number of bytes (hex digit pairs) that follow in the rest of the record (in the address, data and checksum fields).
- Address, four, six, or eight hex digits as determined by the record type for the memory location of the first data byte. The address bytes are arranged in big endian format.
- Data, a sequence of 2n hex digits, for n bytes of the data.
- Checksum, two hex digits - the least significant byte of ones' complement of the sum of the values represented by the two hex digit pairs for the byte count, address and data fields. For example:
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 |
S0 [edit]
The S0 record data sequence contains vendor specific data rather than program data. String with file name and possibly version info.
S1, S2, S3 [edit]
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.
S5 [edit]
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.[4]
S7, S8, S9 [edit]
The address field of the S7, S8, or S9 records may contain a starting address for the program.[5]
Example [edit]
S00F000068656C6C6F202020202000003C S11F00007C0802A6900100049421FFF07C6C1B787C8C23783C6000003863000026 S11F001C4BFFFFE5398000007D83637880010014382100107C0803A64E800020E9 S111003848656C6C6F20776F726C642E0A0042 S5030003F9 S9030000FC
See also [edit]
- Intel HEX file format
- GNU Binutils objdump and objcopy programs can produce and display S-records.
- Binary-to-text encoding for a comparison of various encoding algorithms
References [edit]
- ^ SREC is an abbreviation of S-RECord
- ^ S19 comes from the initial characters of each record: S1, S2, S3, ... S9. That gives S1-S9 which is shortened to just S19.
- ^ a b Motorola (1992, p. C-2)
- ^ "Motorola S-records". Retrieved 2011-02-16.
- ^ Motorola (1992, p. Appendix C)
- Motorola (1992), MC68000 Family Programmer’s Reference Manual
External links [edit]
- SRecord is a collection of tools for manipulating SREC format files.