Controller Tipp Was sind S-Records?

Redakteur: Johann Wiesböck

Bei der Arbeit mit Mikrocontrollern von Freescale Semiconductors (früher Motorola Halbleiter) trifft man sehr bald auf ein Dateiformat mit der Bezeichnung S-Record. In diesem Format werden Programme...

Firmen zum Thema

( Archiv: Vogel Business Media )

Bei der Arbeit mit Mikrocontrollern von Freescale Semiconductors (früher Motorola Halbleiter) trifft man sehr bald auf ein Dateiformat mit der Bezeichnung S-Record. In diesem Format werden Programme und Daten z.B. vom Computer in den Mikrocontroller transferiert. Von einem Compiler oder Assembler generiert, liegen sie zunächst auf der Festplatte und können dann nach Bedarf in den Mikrocontroller programmiert oder in den Debugger geladen werden. Doch was, wenn der Mikrocontroller nicht so reagiert wie er soll? Häufig kann ein Blick in die S-Record-Datei bestimmte Fehler, wie beispielsweise einen vergessenen oder falschen Reset- oder Interruptvektor, oder einen falschen Speicherbereich, bestätigen oder widerlegen (so etwas kommt öfter vor, als man im ersten Moment meinen möchte). So eine S-Record-Datei, ursprünglich gemacht um einfache Portabilität zwischen verschieden Systemen zu ermöglichen, ist letztlich nichts anderes, als eine ASCII-Repräsentation dessen, was im Speicher des Mikrocontrollers steht bzw. stehen soll, wobei jedes Nibble als ein ASCII-Zeichen-Paar dargestellt wird. Das grundlegende Format ist eine Textzeile und sieht folgendermaßen aus:

Hierbei gibt Type, bestehend aus zwei Zeichen, den Typ an (S0, S1, S2, S3, S5, S7, S8, S9). Count, ebenfalls zwei Zeichen, stellt eine Hexadezimalzahl dar und gibt die Anzahl der noch verbleibenden Zeichenpaare in allen folgenden Feldern in diesem Record an. Adress ist ein Feld aus 4, 6 oder 8 Zeichen und gibt, als Hexadezimalzahl gesehen, die Adresse an, ab der die Daten im Mikrocontroller liegen. Dabei besagt der Typ S1, dass es sich um einen Datenrecord-, Typ S9 um einen Abschlußrecord mit 16-Bit-Adresse ( 4 Zeichen), Typ S2 wieder Daten- und Typ S8 wieder Abschlußrecord mit 24-Bit-Adresse (6 Zeichen) und Typ S3 wiederum Daten und S7 Abschlußrecord mit 32-Bit-Adresse (8 Zeichen) handelt. Data sind die Daten bzw. das Programm als Hex-Werte dargestellt, jedes Zeichenpaar entspricht einem Byte. Und Checksum, wieder ein Zeichenpaar als Hex-Wert, ist das Einer-Komplement des Least-Significant-Byte der Summe über Count, Address und Data. Eine bestimmte Reihenfolge der S-Records in einer Datei muss nicht eingehalten und darf auch nicht grundsätzlich erwartet werden. Jeder Record wird mit einem Line-Feed abgeschlossen und ist maximal 78 Byte lang. Sollte zum Line-Feed ein weiteres oder anderes Zeichen zur Übertragung im gegebenen System notwendig sein, liegt das in der Verantwortung des entsprechenden Tools. Der S0-Record ist ein Header, bei dem das Adressfeld nicht verwendet und daher mit 0000 aufgefüllt wird. Das Datenfeld ist weiter unterteilt in die Subfelder name (20 Zeichen), ver (2 Zeichen), rev (2 Zeichen) und description (bis 36 Zeichen), wird jedoch nur sehr selten benutzt. Der S5-Record verwendet das Adressfeld mit 4 Zeichen und gibt darin als Hex-Wert die Zahl der bis dahin schon gesendeten S1-, S2- und S3-Records. Ein S5-Record muss nicht notwendigerweise in einer S-Record-Datei enthalten sein und kommt auch nur sehr selten vor. Hier ein Beispiel für eine typische S-Record-Datei:

Die Datei besteht aus einem S0-Record, vier S1-Records, einem S5-Record und einem S9-Record. Im S0-Record steht S0 = Header Record, 06 = (hexadezimal) 6 Zeichenpaare folgen noch, 0000 = Adressfeld hier mit 0 belegt, 48 = ASCII „H“, 44 = ASCII „D“, 52 = ASCII „R“, das ist HDR für Header und 1B = Checksum. Der S1 Record besteht aus S1 = Datenrecord mit 16-Bit-Adresse, 13 = 13 hex bzw. 19 dezimal Zeichenpaare, 0000 = 16-Bit-Adresse ist 0x0000, 28 bis 7C = 16 Zeichenpaare die die tatsächlichen Binärwerte darstellen und 2A = Checksumme. Der zweite und dritte S1-Record sind ebenfalls je 19 Zeichenpaare mit den Checksummen 13 bzw. 52. Der vierte S1-Record hat nur eine Länge von 7 Zeichenpaaren und Checksumme 92. Der S5-Record besagt es ist ein Zähl-Record, 03 = noch drei Zeichenpaare, 0004 = vier S1-Records waren vor diesem S5-Record und F8 = Checksumme. Zu guter letzt noch ein S9-Record als Abschluss-Record für 16-Bit-Adressen, 03 = noch drei Zeichenpaare, 0000 = Startadresse der Daten und FC wieder die Checksumme. (Johann Holzmann/jw)

(ID:126014)