Hallo Modellbahner,
Nach unserem kleinen Ausflug in die Grundlagen der Digitaltechnik haben wir jetzt das Handwerkszeug parat
um uns an die Betrachtung des SUSI-Protokolles und dessen Entschlüsselung zu begeben.
Mir geht es hauptsächlich darum dem geneigten Leser die Funktionsweise dieser recht einfachen, aber universellen Datenübertragung
näher zu bringen.Das beim SUSI-Bus verwendete Verfahren nennt man synchrone serielle Schnittstelle (engl. Synchronous Serial Interface SSI).
Diese Technik ist weit verbreitet und findet z.B. in der Antriebstechnik eine wichtige Verwendung. Besonders Wegmessysteme bzw.
Winkelgeber an Servomotoren arbeiten damit. Wen wundert es also, dass die meisten Microcontroller mit einer solchen Schnittstelle ausgestattet sind.
Wie funktioniert das jetzt:
Zuerst einmal brauchen wir mindestens zwei Leitungen um eine solche Schnittstelle aufzubauen. Eine Leitung die den Takt angibt und eine Leitung
die die Daten überträgt. Wer jetzt fragt wer den Takt angibt hat richtig erkannt, dass diese Schnittstelle eine sogenannte Master/Slave Schnittstelle ist.
Das heißt im gesamten Bus muss mindestens ein Master, oder Taktgeber, vorhanden sein. Die Anzahl der Slaves, also derjenigen die am Bus
lauschen, kann von System zu System unterschiedlich sein.
In der RCN-600, also der Vorschrift die die SUSI-Schnittstelle definiert, dürfen maximal 3 Slaves im System vorhanden sein.
Der Master ist dabei immer unser Lokdecoder und als Slaves kommen meistens Soundmodule oder z.B. unser Platinensatz in Frage
(Anm: Der Vollständigkeit halber sei gesagt, dass man rein Theoretisch beliebig viele Slaves am SUSI-Bus betreiben könnte aber
diese wären dann aber bis auf 3 nicht mehr über CV’s programmierbar. Das soll uns aber hier nicht verwirren und kann vorerst wieder vergessen werden.)
Master, Takt, Slave???…. Der Reihe nach.
Wie bereits oben gesagt ist der Lokdecoder unser Master im System. Seine Aufgabe ist es jetzt bei der Datenübertragung diese beiden Leitungen
entsprechend synchron mit den richtigen Signalpegeln zu versorgen.Für jedes zu übertragende Bit muss der Master einen Taktimpuls erzeugen.
Dazu legt der Master die Taktleitung auf 5Volt (high) und versorgt gleichzeitig die Datenleitung mit dem entsprechenden Datensignal. Ein einzelnes
SUSI Datenpaket besteht aus 16Bit’s. Das bedeutet, dass der Master 16 Taktimpulse erzeugen muss um diese 16Bit’s zu übertragen. Um einen
Datensatz vom nächsten zu unterscheiden werden per Definition Pausen in den Takt eingebaut.Also: 16 Takte, Pause, 16Takte, Pause usw.
Die Pause wird vom Slave überwacht und unter anderem zur Synchronisation des Datenstromes herangezogen.
Sehen wir uns dazu das folgende Bild eines Datensatzes aus einem ESU Loksound V4 an.
Wenn man beide Signale mit dem Oszilloskop betrachtet, dann kann man die 16Takte (Gelbe Linie) und die zugehörigen Daten (blaue Linie) sehen.
Davor und dahinter ist die Pause zu sehen. (Flache Linie)
Flankengesteuert?? Was ist das jetzt schon wieder?
Wenn wir uns die Gelbe Linie mit den 16 Takten genauer ansehen, dann besteht so ein Takt aus einer steigenden Flanke, also da wo die
Spannung von 0V nach 5V ansteigt, einem oberen flachen Teil bei dem die Spannung für eine gewisse Zeit 5V hat, einer fallenden
Flanke wo die Spannung von 5V nach 0V fällt und einem unteren flachen Teil bei dem die Spannung 0V hat. Diese Abfolge vom
Beginn der steigenden Flanke bis zum Beginn der nächsten steigenden Flanke nennt man Periodendauer. Diese ist genau doppelt
so lange wie der Taktimpuls selbst.
Wenn wir uns das Oszillogramm anschauen, dann sehen wir, dass so eine Periode etwa 260µs dauert. Die Frage ist, wann
sind die Daten denn nun gültig und wann können wir sicher sein, dass wir die richtigen Daten lesen? Dazu gibt uns die RCN-600
wieder eine Antwort. Bei der fallenden Flanke des Taktimpulses müssen die Daten gültig sein und dürfen vom Slave gelesen werden.
D.h. unser Decoder als Master muss dafür sorgen, dass während der fallenden Flanke die Daten gültig (stabil in ihrem Pegel) sind.
Beim nächsten Bild habe ich mal diese fallenden Flanken mit den zugehörigen Daten zusätzlich dargestellt. (Orange senkrechte Linien)
Die orangenen Linien mit den Zahlen 0 bis 15 zeigen eine fallende Flanke an. In der Verlängerung zu der in blau dargestellten
Datenleitung kann man ablesen, ob da eine 1 (5V) oder eine 0 (0V) empfangen wurde.
Anmerkung am Rande: Die Datenleitung ist im Gegensatz zur Taktleitung im Ruhemodus immer auf 5V. Dies hat mit
dem „Acknowledge“ bei der CV-Programmierung zu tun und soll uns hier nicht weiter interessieren.
Von links (Befehlsbyte) nach rechts (Datenbyte):
0 0 1 0 0 1 0 0____1 1 0 0 0 0 0 1
Die linken 8 Bit entsprechen dabei der Dezimalzahl 36 oder 0x24hex. (Jetzt kommt die hexadezimale Zahl ins Spiel, wenn
auch nur dem Vergleich mit der RCN-600 dienend.) Die rechten 8 Bit entsprechen der Dezimalzahl 193 oder 0xC1hex.
Und was hat der Decoder jetzt gesendet?
Das Befehlsbyte:
Um herauszufinden was der Inhalt des Datenpaketes ist nehmen wir uns die RCN-600 auf Seite 9 zur Hand und sehen uns zuerst
das linke Byte genauer an. In diesem Byte steht der Wert d36 oder 0x24hex. Auf der Seite 9 finden wir unter dem Befehlsbyte die
0x24 wieder und der Eintrag sagt uns, dass mit diesem Datenpaket die „Ist“ Lokfahrstufe mitgeteilt wird.
Auszug aus der RCN-600:
Das Datenbyte:
Ich habe die Beschreibung des Datenbytes oben mal rot umrandet. Dort haben wir die Werte G0 bis G6 und R. Die Beschreibung sagt
uns, dass in den Bits G0 – G6 die normierte linearisierte Istgeschwindigkeit übertragen wird. Das sind jetzt 7 statt 8 Bits. Wer noch
einmal im ersten Teil nachschaut, der wird feststellen, dass man mit 7 Bits alle Zahlen zwischen 0 und 127 darstellen kann. 7 Bits
reichen also für die Übertragung der Geschwindigkeit vollkommen aus. In unserem Beispiel oben ist das gerade die Fahrstufe 65.
Das mit R gekennzeichnete Bit zeigt uns an, in welcher Richtung die Lok fährt. In unserem Fall 1, also vorwärts.
Anmerkung: Wer jetzt fragt, wie man an ein einzelnes Bit innerhalb eines Bytes kommt, dem sei gesagt, dass man das über ein
Verfahren, welches sich „ausmaskieren“ nennt, schafft. Das ist allerdings Software und hier vorerst nicht wichtig.
Wie viele Datenpakete werden denn da jetzt so gesendet?
Der SUSI-Bus überträgt während dem Normalbetrieb kontinuierlich die in der RCN-600 genannten Datenpakete (außer CV-Pakete, die
nur bei der Programmierung). Es ist allerdings zulässig, das nicht alle möglichen Daten vom Decoderhersteller gesendet werden.
Dumm ist dabei nur, dass man das nicht in der Beschreibung nachlesen kann.Sicher ist z.B. dass weder ESU noch Uhlenbrock mit den
mir vorliegenden Decodern die Funktionstatsten größer 28 übertragen. Auch wenn z.B. Rocrail diesen Befehl gültig absetzen
kann und die RCN-600 bis F60 geht!
Interessant und auch zulässig, ist die Priorisierung der Datenpakete. So kann man feststellen, dass während der Beschleunigung
der Lok, fast ausschließlich die „IST“-Lokfahrstufe und die Laststufe gesendet werden, wohl um den Sound so dynamisch wie möglich zu gestalten.
Nur beim Einschalten werden alle unterstützten Befehle viermal auf den Bus gelegt. Das ist zumindest bei den von mir getesteten
ESU und Uhlenbrock Decodern der Fall.
Und woher weiß der Klugsch.. das?
Nun, mein Oszilloskop verfügt über ein paar Features, die es mir erlauben so ein Datensignal zu analysieren. Es hat für die verschiedensten seriellen
Protokolle einen eingebauten Decoder.
Außerdem kann ich dem Gerät noch sagen, in Abhängigkeit vom empfangenen Datenpaket, wann es triggern soll. (Also wann es ein Bild des
Signals aufnehmen soll) Kommt kein Bild, dann ist was falsch eingestellt oder der Befehl wird nicht gesendet. Der Rest ist Fleißarbeit mit Methode.
Bis hierhin ist wieder einmal alles gesagt und ich wünsche wieder viel Spaß beim Lesen.
Mit freundlichen Modellbahnergrüßen
Thomas