Slotbaer / SCX Digital / SCX-Digital Daten-Protokoll

Physikalische Ebene - Terminals

Das SCX System ist genau wie die anderen digitalen Rennbahnsysteme ein zwei Leiter System. Die Schienen verfügen zwar über drei Leiter, aber der dritte Leiter führt "nur" versorgungsspannung und ist für das reine Digitalsystem nicht notwendig. Er erlaubt es allerdings weitere Geräte an die "Schienen" an zu schliessen ohne das die Treiber überfordert werden.

Bei einem analog System verändert sich die Spannung zwischen den beiden Leitern und regelt so die Geschwindigkeit des Slotcars. Bei einem digitalen System liegt eine konstante Spannung an, die allen Fahrzeugen als Versorgungsspannung dient. Bei SCX Digital sind dies etwa 18V.

Da die Höhe der Spannung als Informationsträger für die Slotcargeschwindigkeit wegfällt, muss den Fahrzeugen ihre Sollgeschwindigkeit anders mitgeteilt werden.

Dies geschieht über Datenpakete, die an die Fahrzeuge geschickt werden.

Um die Datenpakete zu übertragen, wird die 18V Leitung in einem bestimmten Rhytmus an und ausgeschalet, vergleichbar einem Morsecode. Das Ganze sieht etwa so aus:

Man erkennt 9 Signalgruppen. Jede Signalgruppe bildet ein Datenwort.

Ein Datenpaket besteht also aus 9 Datenworten. Der Abstand zwischen den Datenworten ist unterschiedlich, die Übertragung aller Datenworte benötigt etwa 1.57ms .

Bei den Datenworten handelt es sich um serielle Datenwörter die im NRZ (Non return to zero) Verfahren, das auch bei der seriellen Schnittstelle des PCs verwendung findet, übertragen werden. Die Baudrate beträgt nominal 115200 Baud. D.h. die Bits wechseln alle 8,68µs.

Bei der seriellen Schnittstelle des PCs ist die Datenleitung in der Ruhephase auf 1. Damit der Empfänger weiss, dass ein Datenwort beginnt, wird bei der asynchronen Datenübertragung am Anfang eines jeden Datenwortes ein Startbits gesendet. dies eine 0-Phase von der Dauer eines Bits. Bei SCX Digital sind es allerdings eineinhalb 0-Phasen gefolgt von einer halben 1 Phase. Also sind es eigentlich 2 Starbits.

Diese Art von Doppelstartbit hat den Vorteil, dass man die Baudrate aus jedem beliebigen Datenbyte bestimmen kann und dass man das Startbit eindeutig identifizieren kann, denn es gibt sonst kein 0 Phasen von eineinhalb Bit Länge.

Bei Eigenentwicklungen sollte man ebachten, dass gerade beim B(ogengassen)-Terminal das Startbit aus dem 115200 Baud Raster fallen kann, so dass es notwendig sein kann das Startbit nicht mit einem starren Zeitraster zu analysieren. Ich habe auch Messungen bei denen das Startbit aus eineinhalb 0 Phasen und fast einer ganzen 1 Phase besteht.

Den Startbits folgen 8 Datenbits. Diese sollten alle gleich lang sein. Da aber die Treiber im Terminal nicht hundertprozentig symetrisch arbeiten, sind in der Praxis die 0-Phasen etwas länger als die 1-Phasen. Diese kleine Abweichung stellt allerdings kein Problem dar.

Im Rahmen dieses Textes verwende ich Hexadezimalzeichen. Diese haben den Vorteil, dass sich ein Byte mit zwei Zeichen darstellen lässt und die Umwandlung von und zu einem Bitmuster sehr einfach ist. Die, die nicht mit Hexzahlen vertraut sind, verweise ich and Wikipedia oder einfach nach Hexadezimal googeln. Ich kennzeichne Hexzahlen mit einem vorgestellten $.

Das erste Datenbit ist das LSB (least significant bit). Man muss die Bits also in umgekehrter Reihenfolge anordnen. Im obigen Beispiel ergibt sich binär 10101010 oder hexadezimal $AA oder dezimal 170 oder im folgenden Beispiel:

1110000 oder in Hex(adezimal) $F0

Nach den 8 Datenbit folgt ein Stopbit. Es dient dazu, sicher zu gehen, dass die Leitung eine 1 anzeigt bevor das nächste Startbit kommt. Wäre die Leitung nämlich 0, so würde man das nächste Startbit nicht erkennen. Ausserdem gibt es dem Empfänger die Möglichkeit das gerade gelesene Byte zu speichern oder zu verarbeiten bevor die nächsten Daten kommen.

 

Physikalische Ebene - Autos

Bei einer Zieldurchfahrt oder bei der Einfahrt in die Boxengasse teilt das Auto dem Terminal seine Nummer mit.

Das Auto überträgt ein Datenpaket aus 4 Bytes.

Es handelt sich wieder um eine NRZ Übertragung, diesmal mit 57600 Baud. das Startbit besteht aus eineinhalb 0-Phasen und einer 1-Phase.

Semantische Ebene: Datenpakete - Terminal

Wie wir festgestellt haben, werden vom Terminal nur Datenpakete übertragen, die aus 9 Datenworten zu je 8 Bit bestehen.

Jedes Datenpaket besteht also aus 9 Byte. Von den 9 Byte haben 3 Byte eine feste Funktion, während die anderen 6 Byte unterschiedliche Bedeutungen haben.

Das erste Byte ist immer $55 und kennzeichnet den Beginn eines Datenpaketes.

Das zweite Byte gibt immer die Art der Information, die übertragen wird, an.

Die nachfolgenden sechs Bytes enthalten die eigentliche Information.

Das letzte Byte gibt eine Prüfsumme an, an Hand derer man feststellen kann, ob die vorangegangen Bytes fehlerfrei übertragen wurden. Bei der Prüfsumme handelt es sich um eine Variante des Standard 8-Bit CRC allerdings mit anderen Startwerten.

Für Controlleranwendungen bietet sich die Tabellen Version des Konvertierungsalgorithmuses an. Die Tabelle wird wie üblich erstellt und basiert auf dem Wert $31. Die Prüfsumme wird über alle Bytes eines Datenpakets gebildet (mit Ausnahme der Prüfsumme). Am Ende muss die Prüfsumme noch mit $BB geexored werden.

Es gibt verschiedene Datenpakete, das wohl wichtigste ist das

Reglerpaket: $55 $FF R0 R1 R2 R3 R4 R5 PS
etwa alle 102ms und immer wenn eine Änderung eines Reglers (Spurwechsel oder Geschwindigkeitsänderung) festgestellt wird. (Siehe auch Regler Internas)

Das Datenpaket teilt den Autos mit mit welcher Geschwindigkeit sie fahren sollen und ob der Spurwechseltaster am Regler gedrückt ist oder nicht. Das Paket überträgt immer Informationen für 6 Autos unabhängig davon wieviele Regler angeschlossen sind.

 

$55 Start des Datenpakets
$FF Kennung für ein Reglerpaket
R0 bis R5

Je ein Byte pro Regler. Die Terminals zählen die Regler durch, wobei sie mit der 0 beginnen.
Ist ein Regler nicht angeschlossen, so hat das entsprechende Byte den Wert $AA.
Ist ein Regler angeschlossen so hat sein Byte das folgende Format:

Bit 7 Immer 1
Bit 6 Immer 1
Bit 5 = 0 Licht an; = 1 Licht aus
Bit 4 = 0 Taste am Regler gedrückt; = 1 nicht gedrückt
Bits 3 bis 0 Fahrzeuggeschwindigkeit 0 bis 15

 

PS Prüfsumme

 

Zuweisungspaket: $55 $CC RG $FE $FF $FF $FF $FF PS
sobald beim Zuordnen eines Autos zu einem Regler (Program-Taste am Terminal) die Taste des Reglers gedrückt wird, wird dieses Paket zweimal gesendet.

Dieses Datenpaket teilt dem Auto mit welche Fahrzeugnummer es erhalten soll.

 

$55 Start des Datenpakets
$CC Kennung für ein Zuweisungspaket
RG

Enthält u.a. die Nummer des Reglers. Die Regler werden von 0 an durchnummeriert.

Bit 7 Immer 1
Bits 6 bis 3 Immer 0
Bits 2 bis 0 Die Nummer des Reglers.
$FE $FF $FF $FF $FF

Immer gleich.

PS Prüfsumme

 

Busfreigabepaket: $55 $AA ZÄ NN $F0 $F0 $F0 $F0 PS
sobald mindestens ein Auto einen Reedkontakt des Anschlusstückes auslöst, wird diese Paket zweimal im Abstand von 1,7 ms gesendet. Dabei ändert sich der ZÄ Wert.
Nach 100ms werden die beiden Pakete noch einmal gesandt, unabhängig davon ob ein Auto seine Kennung schickte oder nicht.

Diese Pakete zeigen den Autos an, dass das Terminal in Kürze aufhören wird die Leiter zu versorgen und dass das Auto, das das Ziel durchfahren hat, nun seine Kennung schicken kann.

Wie der genaue Ablauf einer Zieldurchfahrt ist, wird an anderer Stelle beschrieben.

 

$55 Start des Datenpakets
$AA Kennng für ein Busfreigabepaket
ZÄ NN

Die zwei Byte bilden einen Quotienten der Form ZÄ / NN und geben vermutlich an wielange es noch dauert bis der Bus frei ist. Die Werte beim S-Terminal sind $06/$06 = 1 und $12/$06 = 3 beim B-Terminal $18/$06 = 4 und $0C/$06 = 2

$F0 $F0 $F0 $F0

Immer gleich.

PS Prüfsumme

 

 

 

Zieldurchfahrtpaket: $55 $EE R0 R1 R2 R3 R4 R5 PS
sobald mindestens ein Auto seine Kennung nach einem Busfreigabe Paket gesendet hat, wird dieses Paket zweimal gesendet.

Diese Pakete identifizieren die Fahrzeuge, die gerade das Ziel durchfahren haben.

 

$55 Start des Datenpakets
$EE Kennng für ein Zieldurchfahrtpaket
R0 bis R5

Ein Byte für jeden Regler. Ist das Byte $E7 so hat dieses Fahrzeug das Ziel durchfahren. Alle anderen Werte bedeuten, dass das Fahrzeug nicht das Ziel durchfahren hat

PS Prüfsumme

 

 


Platzierungspaket: $55 $D3 P0 P1 P2 P3 P4 P5 PS
nach einer Zieldurchfahrt und dann alle 300ms.

Diese Pakete enthalten die Fahrzeugnummern in der Reihenfolge ihrer gegenwärtigen Platzierung.

 

$55 Start des Datenpakets
$D3 Kennng für ein Platzierungspaket
P0 bis P5

Ein Byte für jeden Position beginnend mit dem Führenden. Hat das Byte den Wert $FF dann gibt es kein Fahrzeug auf dieser Position, weil z.B. weniger Fahrzeuge am Rennen teilnehmen oder noch nicht alle Fahrzeuge gestartet sind.

Bit 7 1 ausser wenn das Fahrzeug mehr als 15 Runden hinter dem Führenden zurück liegt.
Bits 6 bis 3 Die Anzahl der Runden (0 - 15), die das Auto hinter dem führenden liegt. 0 Falls das Auto mehr als 15 Runden hinter dem Führenden zurück liegt.
Bits 2 bis 0 Die Fahrzeugnummer (0-5)
PS Prüfsumme

 

 

 

Rundenzeitpaket: $55 $D4 FN RU1 RU0 VS Z1 Z0 PS
nach einer Zieldurchfahrt und dann alle 300ms.

Dieses Paket enthält die aktuelle Anzahl Zieldurchfahrten und Rundenzeit des angegebenen Fahrzeugs. Es werden immer nur die Daten des/der Fahrzeug/e übertragen, die als letzte das Ziel durchfahren haben.

 

$55 Start des Datenpakets
$D4 Kennung für ein Rundenzeitpaket
FN Fahrzeugnummer (0-5)
RU1 RU0

Diese beiden Bytes geben zusammen mit Bit 0 von VS die aktuelle Runde an.
Runde = 256 * RU1 + RU0 + Bit 0 von VS

VS

Verschiedenes

Bits 7 bis 4 Immer 0
Bit 3 Ist das Bit gesetzt werden 256 zum Zeitwert hinzugezählt.
Bit 2 ?
Bit 1 ?
Bit 0 Gerade (0) oder ungerade (1) Rundenzahl
Z1 Z0

Diese beiden Werte zusammen mit Bit 3 von VS bilden den Grundwert für die Rundenzeit.
Grundwert= 256 * Z1 + Z0
Sollte Bit 3 von VS gesetzt sein, so wird der Grundwert um 256 erhöht.

Die Rundenzeit ergibt sich wenn man den Grundwert mit 0,01024 multipliziert.

Ich bin mir dieses Wertes nicht ganz sicher, kann ihn aber mangels eines Chronometers nicht verifizieren. Sollte sich jemand finden , der mir einen Chronometer leiht, so werde ich das gerne nachholen.

Bei der ersten Zieldurchfahrt wird die Rundenzeit mit 0 angegeben.

PS Prüfsumme

 

 


Rundenzählerpaket:
$55 $D5 RI RU2 RU1 RU0 $FF $FF PS
sobald die Starttaste lange genug gedrückt wurde wird dieses Paket zweimal gesendet.

Dieses Datenpaket teilt den Geräten die Startrundenzahl und die Zählrichtung mit.

 

$55 Start des Datenpakets
$D5 Kennung für ein Rundenzählerpaket.
RI

Zählrichtung einer der folgenden Werte

00 hoch zählend
FF herunter zählend.
RU2 RU1 RU0

Startrundenzahl = 256 * RU2 + 16 * RU1 + RU0

Diese Formel ist richtig. Es werden nur die unteren 4 Bit eines jeden Bytes verwendet.

$FF $FF

Immer gleich.

PS Prüfsumme

 

 

 

Qualifyingpaket: $55 $DB RU2 RU1 RU0 FZ $FF $FF PS
ird an die Fahrzeuge nach dem Einstellen des Qualifying Modus gesendet.

 

$55 Start des Datenpakets
$DB Kennung für ein Qualifyingpaket.
RU2 RU1 RU0

Startrundenzahl = 256 * RU2 + 16 * RU1 + RU0

Diese Formel ist richtig. Es werden nur die unteren 4 Bit eines jeden Bytes verwendet.

FZ Die Anzahl der Fahrzeuge, die am Qualifying teilnehmen.
$FF $FF

Immer gleich.

PS Prüfsumme

 

 

 

Resetpaket: $55 $D0 §FF ZÄ NN $AA $AA $AA PS
sobald die Starttaste lange genug gedrückt wurde wird dieses Paket zweimal gesendet.

Dieses Datenpaket teilt mit, dass die Starttaste gedrückt wurde und die Rundenzahl, Rundenzeiten und Platzierungen zurückgesetzt wurden.

$55 Start des Datenpakets
$D0 Kennung für ein Resetpaket.
$FF Immer $FF
ZÄ NN

Die zwei Byte bilden einen Quotienten der Form ZÄ / NN

$AA $AA $AA

Immer gleich.

PS Prüfsumme
 

 

Startpaket: $55 $DD $00 $AA $AA $AA $AA $AA PS
sobald die Starttaste lange genug gedrückt wurde wird dieses Paket zweimal gesendet nachdem das Resetpaket zweimal gesendet wurde.

Das Paket kennzeichnet den Rennbeginn.

$55 Start des Datenpakets
$DD Kennung für ein Startpaket.
$00 $AA $AA $AA $AA $AA

Immer gleich.

PS Prüfsumme
 


Endpaket:
$55 $DC $FF $FF $FF $FF $FF $FF PS
sobald das letzte Fahrzeug die Ziellinie überquert oder das Rennen abgebrochen wird, wird dieses Paket zweimal gesendet.

 

$55 Start des Datenpakets
$DC Kennung für ein Endpaket
$FF $FF $FF $FF $FF $FF

Immer gleich.

PS Prüfsumme

 

 

 

Benzinstandpaket: $55 $D6 S0S1 S2S3 S4S5 $14 $50 $AA PS
Etwa alle 500ms (sehr unregelmässig) wird der aktuelle Benzinstand gesendet.

 

$55 Start des Datenpakets
$D6 Kennung für ein Benzinstandpaket
S0S1
S2S3
S4S5

Drei Bytes, deren 6 Nibble die Füllstände der Fahrzeuge repräsentieren. Das höhere Nibble eines Bytes gibt den Füllstand des Fahrzeuges mit der niedrigeren Id an.
Der Füllstand beginnt bei 8 und zählt dann herunter. Er entspricht der Anzahl grüner Leds auf der Boxengassenanzeige.

 
$14 $50 oder $00 $50

Vermutlich wieder ein Quotient.

$14 $50 Falls Benzin Verbrauch aktiv entspricht dezimal 0,25.
$00 $50 Falls Benzin Verbrauch nicht aktiv entspricht dezimal 0.
$AA oder $FF

Selten $FF aber ich weiss nicht wann.

PS Prüfsumme

 

 


AnzeigeWechselPaket: $55 $DE WE $FF $FF $FF $FF $FF PS
wird an das Chronometer gesendet um ihm mitzuteilen, dass ein Wechsel der angezeigten Werte zu erfolgen hat. Es gibt keine Funktionszuordnung. Es sagt nur Wechseln nicht wohin oder wovon.

Die Boxengasse erzeugt diese Pakete wenn man den rES wählt.

Beim ersten Drücken der Select Taste wird kein Paket gesendet.
Beim zweiten Drücken der Select Taste wird ein Paket mir WE gleich 0 gesendet.
Beim nächsten Drücken der Select Taste wird ein Paket mir WE gleich 0 und eins mit WE gleich 1 gesendet.
Beim nächsten Drücken der Select Taste wird ein Paket mir WE gleich 1 und eins mit WE gleich 0 gesendet.

Danach wiederholen sich die letzten beiden Pakete.

Verlässt man den rES Modus beginnt die Sqeuenz beim nächsten Aufruf von vorne.

 

$55 Start des Datenpakets
$DE Kennung für ein AnzeigeWechselPaket.
WE

Wechsel Entweder 0 oder 1.

 
$FF $FF $FF $FF $FF

Immer gleich.

PS Prüfsumme

 


Bremsenpaket:
$55 $D7 RG BR $83 $93 $DB $FF PS
wird an das Fahrzeug in der Boxengasse gesendet um die Bremswirkung ein zu stellen.

Das Paket erscheint nur in der Boxengasse.

 

$55 Start des Datenpakets
$D7 Kennung für ein Bremsenpaket
RG

Die Nummer des Reglers der gedrückt wurde (0-5)

 
BR

Einer der folgenden 3 Werte

$00 Keine Bremse
$02 Halbe Bremswirkung
$04 Volle Bremswirkung
$83 $93 $DB $FF

Keine Ahnung

PS Prüfsumme
 

 

 

Semantische Ebene: Datenpakete - Auto

Nicht nur die Terminals senden Daten auch die Autos sind dazu in der Lage. Allerdings verwenden sie eine andere Baudrate und die Datenpakete sind nur 4 Byte lang.

Autopaket: $55 FZ XX PS
Das Auto sendet ein Datenpaket, beim Überfahren der Ziellinie oder bei der Einfahrt in die Boxengasse, es dient vornehmlich der Identifizierung des Fahrzeugs.

$55 Start des Datenpakets
FZ Das Byte hat den Wert $40 + Fahrzeugnummer.
XX Keine Ahnung
PS Prüfsumme