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 mit 1B FE 01 bis 1B 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.