RS232 Sniffing am Cassy Sensor 1
Hard- und Software
In diesem Beitrag kommt folgendes zum Einsatz
- Cassy Lab und Cassy Sensor 1 von LD Didactic
- Digital Discovery und Waveforms von Digilent
- ein unter Aufbau gezeigtes Breadboard
- cassyspoof zum abfangen und verändern der Kommunikation zwischen Cassy Sensor und Cassy Lab
Aufbau
Hier ist der Aufbau zum Sniffen an der seriellen Schnittstelle des Cassy Sensor 1:
Verwendet wird der Logikanalysator “Digital Discovery” von Digilent, der hinter einem MAX232 (setzt die Pegel auf TTL um) an RX und TX der seriellen Schnittstelle hängt. Das Ergebnis sieht so aus:
Bitrate
Sucht man sich das kürzeste Signal raus und ermittelt die Zeitdifferenz kann man daraus die Baudrate bestimmen. Im Startzustand scheint das Cassy Sensor 1 mit 38,4 kbps. Aufmerksame Leser der Cassy Lab Dokumentation wissen, dass das für die höheren verfügbaren Abtastraten der Sensoren nicht ausreichen kann. Daher kann per Befehl eine höhere Bitrate verhandelt werden. Dazu später mehr.
Initialisierung
Wählt man den COM-Port an, sendet Cassy Lab
1B FF 01
was das Sensor Cassy mit 01 01 06
beantwortet. Die Bedeutung ist noch unklar (ggf. sicherstellen, dass es nicht “irgendein” serielles Gerät ist).
Anschließend sendet Cassy Lab eine Reihe von Nachrichten, die vom Gerät mit 01
quittiert werden. Vermutlich handelt es sich dabei um Konfigurationen / Setzen von Registern. Mindestens eine davon wird nur durch die unregistrierte Version von Cassy Lab gesendet, um den internen Zähler des Cassy Sensor hochzuzählen (und ein dauerhaftes Benutzen ohne Aktivierung zu verhindern).
1B FF 1C
1B FF 22 00 00 00 00 00
1B FF 23 00 00 00 00 00
1B 00 2F 00 64
1B FF 2B 00
1B FF 2C 64
Sensorerkennung
Anschließend sendet Cassy Lab einige Nachrichten, die mit 01 FF
quittiert werden:
1B FF 10
1B FF 11
Diese werden gehäuft beim Benutzen der Sensoreingänge abgefragt und scheinen das Cassy Sensor zu fragen, ob es Sensoren an den DB-12 Schnittstellen hat.
Diese Vermutung wird dadurch bestätigt, dass ein Antworten etwa mit 01 22
zum Erkennen eines Drucksensors führt. Ein Blick in die hilfreiche Tabelle auf uranmaschine.de zeigt, dass Sensor 34 (also hexadezimal 22) in der Tat ein Drucksensor ist.
Demo-Zähler
Danach fragt (das unregistrierte) Cassy Lab nach unserem internen Zähler:
1B FF 0E 00
der mit zwei Bytes beantwortet wird - 01
und der Anzahl der bereits erfolgten Zählimpulse (bis maximal hexadezimal 20, also 32). An dieser Stelle kann z.B. cassyspoof genutzt werden um das zweite Byte 20
abzufangen und durch 01
auszutauschen.
Firmware-Version
Schließlich fragt Cassy Lab noch nach unserer Firmware-Version mit
1B FF 02
Cassy Sensor antwortet mit 01 01
und der Firmware-Version (bspw. wird 1.37, gelesen als 137 zu 01 01 89
).
Unbeantwortete Nachrichten
Bemerkenswert ist, dass alle (bis auf eine) beantworteten Nachricht mit 1B FF
beginnen. Denn Cassy Lab sendet weitere, unbeantwortet Nachrichten regelmäßig:
1B FE 01
1B FF 01
FE
als zweites Byte ist sonst nirgendwo zu sehen - gegebenfalls handelt es sich hier um Abfragen über den Cassy Bus (s.u.), um etwaige andere Geräte zu entdecken?
Einfache Sensorabfragen und Cassy-Bus
Klickt man in Cassy Lab einen der Sensoreingänge an (hier: UA), so sendet der PC folgende Anfrage
1B FF 12 C8
die standardmäßig (keine Beschaltung an UA) wie folgt beantwortet wird:
03 00 01
Ändert man diese Antwort probeweise mit cassyspoof in eine zeitegsteuerte Sinuswelle, so zeigt Cassy Lab entsprechend Spannungen zwischen -12 V und 12 V an. Allerdings ist hier Vorsicht geboten - die Cassy Sensoren abreiten mit einer Messtiefe von 12bit und nicht 16bit. Ein Setzen des zweiten Bytes auf FF
liefert also immer Werte, die außerhalb des eingestellten Messbereichs liegen.
Eine Änderung in Cassy Lab auf Spannung UB führt zu der geänderten Abfrage
1B FF 13 48
sodass das dritte Byte anscheinend der Messkanal und das vierte (ggf.) das konkrete Gerät am Kanal spezifiziert. Im Fall des fiktiven Drucksensors von oben ändert sich das letzte Byte etwa in 08
.
Weitergehende Bemerkungen
- Die hier gezeigte Form der Messwertsimulierung liefert Werte, die vom eingestellten Messbereich abhängen. Das Cassy Sensor scheint also relative Angaben zu liefern. Um die vollen 12bit Messtiefe auzuschöpfen wäre das auch nur sinnvoll.
- Alle tatsächlich vom Cassy Sensor beantworteten Anfragen beginnen mit
1B FF
. Da das direkt folgende Byte die Sensoradresse ist und Cassy Lab zusätzlich Anfragen mit1B FE 01
bis1B FF 01
sendet, die unbeantwortet bleiben, ist davon auszugehen, dass es sich hierbei um die Adressierung etwaiger weiterer Geräte auf dem (von mir hier so genannten) Cassy Bus (grauer 20 pol. Anschluss) handelt. Das legt nahe, dass die RS232 (und in Konsequenz die USB Schnittstelle an Cassy Sensor USB bzw. Cassy Sensor 2) eher als Router zu diesem Cassy Bus und nicht so sehr als direkte Anbindung des konkreten Geräts zu verstehen ist. Das bleibt aber zu überprüfen.