S-Record
Das Motorola-S-Record-Format ist ein ASCII-basiertes Datenformat zur Kodierung von Binärdateien. Es ist auch als SREC- oder S19-Format bekannt. Hauptsächlich wird es zum Abspeichern des Programmcodes von Mikrocontrollern in eingebetteten Systemen verwendet. Es wurde in den 1970er Jahren vom Hersteller Motorola für dessen 6800-Mikroprozessor entwickelt.
Ein ähnliches, wenn auch leicht unterschiedliches Format ist das Intel-HEX-Format, welches u. a. für Intel-Prozessoren verwendet wird.
Die ASCII-Kodierung erlaubt die Bearbeitung bzw. das Öffnen der Datei mit einem Texteditor. Da es Prüfsummen enthält, können bei einer Übertragung beschädigte Datensätze erkannt werden.[1]
Format
Eine S-Record-Datei besteht aus einer Reihe von ASCII-Datensätzen (engl. Records). Alle Hexadezimalzahlen sind Big endian, d. h. das höchstwertige Byte wird als erstes, also auf der kleineren Adresse gespeichert. Die Datensätze haben folgende Struktur:
- Start code, ein Zeichen: S
- Record type (Datensatztyp), eine Ziffer, 0 bis 9, definiert den Typ des Datensatzes
- Byte count (die Anzahl der Bytes), zwei hexadezimale Ziffern, 0 bis F, beinhaltet die Anzahl der Bytes (also jeweils zwei hexadezimale Ziffern) die im restlichen Datensatz (Adresse, Daten und Prüfsumme) folgen.
- Adresse, vier, sechs oder acht hexadezimale Ziffern (abhängig vom Datensatztyp), die die Speicheradresse der darauf folgenden Daten festlegen.
- Datenfeld, eine Folge von 2n hexadezimalen Ziffern, also n Datenbytes
- Checksum (Prüfsumme), zwei hexadezimale Ziffern – das Einerkomplement des niederwertigen Bytes der Summe von byte count, Adresse (byteweise) und der Daten (ebenfalls byteweise)
Es gab einige Programme, die die Anzahl der Zeichen in einem S-Record aus Gründen der Kompatibilität mit Fernschreibern auf 56 druckbare Zeichen begrenzten[2]. Eine UNIX-Manpage schreibt von einer Begrenzung auf 78 druckbare Zeichen[3]. Da von Motorola kein Limit definiert wurde, sollte ein Programm auch mit einem Byte count von 255, also mit 514 druckbaren zuzüglich terminierender Zeichen, umgehen können[4].
Es existieren die acht unten aufgeführten Datensatztypen:
Record | Beschreibung | Adressbytes | Datenfeld |
---|---|---|---|
S0 | Block header (Block Vorspann) | 2 | Ja |
S1 | Datenreihe | 2 | Ja |
S2 | Datenreihe | 3 | Ja |
S3 | Datenreihe | 4 | Ja |
S5 | Record count (Datensatzanzahl) | 2 | Nein |
S7 | End of block (Blockende) | 4 | Nein |
S8 | End of block (Blockende) | 3 | Nein |
S9 | End of block (Blockende) | 2 | Nein |
- Der S0-Vorspann enthält keine Programmdaten, sondern herstellerspezifische Daten. Das Datenfeld ist folgendermaßen aufgebaut:
- Modulname (20 Zeichen)
- Version (2 Zeichen)
- Revision (2 Zeichen)
- Beschreibung (0–36 Zeichen)
- Im S5-Datensatz ist die Anzahl der vorstehenden S1-, S2- und S3-Datensätze in dem zwei Byte großen Adressfeld gespeichert. Dieser Datensatz enthält kein Datenfeld.
- Die Adressfelder von S7, S8, oder S9 können die Startadresse des Programmes enthalten.[2]
Beispiel
S00F000068656C6C6F212020202000003B S11F00007C0802A6900100049421FFF07C6C1B787C8C23783C6000003863000026 S11F001C4BFFFFE5398000007D83637880010014382100107C0803A64E800020E9 S111003848656C6C6F20776F726C642E0A0042 S5030003F9 S9030000FC
Die Prüfsumme für den ersten Beispiel-Datensatz berechnet sich wie folgt: .
Verwandte Dateiformate
Sehr ähnlich ist das Intel HEX-Format (auch kurz Intel HEX). Weitere Formate für diesen Anwendungsbereich sind z. B. der einfache Binärcode oder das Jedec-Format.
Quellen
- srec - Linux man page
- MC68000 Family Programmer’s Reference Manual (PDF; 2,4 MB) Appendix C
- Archivierte Kopie (Memento des Originals vom 19. Juni 2015 im Internet Archive) Info: Der Archivlink wurde automatisch eingesetzt und noch nicht geprüft. Bitte prüfe Original- und Archivlink gemäß Anleitung und entferne dann diesen Hinweis.
- http://www.macgui.com/usenet/?author=Ron+Widell&id=1600&group=45
Weblinks
- Aufbau des S-Record-Formats
- SRecord (englisch) Eine Sammlung von Programmwerkzeugen zur Bearbeitung von S-Record-Dateien
- SB-Projects: fileformats: motorola – sehr übersichtliche Darstellung (englisch)
- hexformat – Python-Bibliothek für die HEX-Formate SRecord und IntelHex