Zum Inhalt springen →

Great Scott Gadgets Cynthion: Einrichtung und erster Test als USB Analyzer.

Das Cynthion USB Tool ist ein vielseitiges Instrument zur Entwicklung, Prüfung, Überwachung und Simulation von USB-Geräten. Es basiert auf einer FPGA-Architektur, die es ermöglicht, das Cynthion USB Tool vollständig an die jeweilige Anwendung anzupassen. Es arbeitet mit der Open-Source-Analyse-Software Packetry sowie den LUNA-Gateware- und Facedancer-Bibliotheken zusammen. Cynthion ist ein praktisches Werkzeug für alle, die USB-Geräte entwickeln oder Analysieren.

Cynthion Installation

Voraussetzung für die Installation von Cynthion ist Python v3.8 oder besser. Ist diese Voraussetzung erfüllt, kann man mit dem folgenden Befehl die nötigen Python Pakete installieren.

pip install --user cynthion

Nach der erfolgten Installation kann man mit dem folgenden Befehl prüfen, ob Cynthion installiert wurde.

> pip show cynthion
Name: cynthion
Version: 0.1.6
Summary: Python package and utilities for the Great Scott Gadgets Cynthion USB Test Instrument
Home-page:
Author:
Author-email: Great Scott Gadgets <dev@greatscottgadgets.com>
License: BSD
Location: C:\Python312\site-packages
Requires: amaranth, apollo-fpga, future, libusb1, luna-soc, luna-usb, prompt-toolkit, pyfwup, pygreat, pyserial, pyusb, tabulate, tomli, tqdm
Required-by:

Um zu prüfen, ob die Installation auch funktioniert, verbindet man den Cynthion über den Control Port wie in dem Bild zu sehen (Target A und Target C sind dafür noch nicht nötig) und gibt den Befehl „cynthion info –force-offline“ im Terminal/Powershel ein.

cynthion info --force-offline
Cynthion version: 0.1.6
Apollo version: 1.1.0
Python version: 3.12.4 (tags/v3.12.4:8e8a4ba, Jun 6 2024, 19:30:16) [MSC v.1940 64 bit (AMD64)]

Found Apollo stub interface!
Bitstream: USB Analyzer (Cynthion Project)
Vendor ID: 1d50
Product ID: 615b
bcdDevice: 0104
Bitstream serial number: 275d2ddf30c460de

Forcing offline.

Found Cynthion device!
Hardware: Cynthion r1.4
Manufacturer: Great Scott Gadgets
Product: Apollo Debugger
Serial number: TAVJXTCMGJJVCIBAEA3EGRAP74
Vendor ID: 1d50
Product ID: 615c
bcdDevice: 0104
Firmware version: v1.0.3
USB API version: 1.1
Flash UID: 275d2ddf30c460de

Die Ausgabe zeigt, dass alles so weit installiert und korrekt verbunden ist. Als erstes lohnt es sich auf jeden Fall ein Update der Firmware zu machen. Dazu kann man den Befehl „cynthion update“ verwenden.

cynthion update

Updating FPGA configuration flash with 247181 bytes...
Operation complete!
Updating device firmware with 13876 bytes...
Operation complete!
Cynthion Update Firmware

Nach der Installation der Firmware und der FPGA Konfiguration kann man noch mal die Version checken. In meinem Fall ist die Firmware Version nun v1.1.0 (vorher v1.0.3).

cynthion info --force-offline

Cynthion version: 0.1.6
Apollo version: 1.1.0
Python version: 3.12.4 (tags/v3.12.4:8e8a4ba, Jun 6 2024, 19:30:16) [MSC v.1940 64 bit (AMD64)]

Found Apollo stub interface!
Bitstream: USB Analyzer (Cynthion Project)
Vendor ID: 1d50
Product ID: 615b
bcdDevice: 0104
Bitstream serial number: 275d2ddf30c460de

Forcing offline.

Found Cynthion device!
Hardware: Cynthion r1.4
Manufacturer: Great Scott Gadgets
Product: Cynthion Apollo Debugger
Serial number: TAVJXTCMGJJVCIBAEA3EGRAP74
Vendor ID: 1d50
Product ID: 615c
bcdDevice: 0104
Firmware version: v1.1.0
USB API version: 1.2
Flash UID: 275d2ddf30c460de

Gehäuse für Cynthion drucken

Ich habe mich für die Version ohne Gehäuse entschieden, da man so etwas immer recht einfach selber drucken kann, wenn man über einen 3D Drucker verfügt :-). Es gibt mittlerweile mehrere Modelle für ein Cynthion 3D-Druck Gehäuse im Netz. Ich entscheide mich für das Gehäuse von Sander es macht einen guten Eindruck und scheint leicht druckbar zu sein.

Download der STL Datei: https://makerworld.com/de/models/527977?from=search#profileId-445070

Wie erwartet sieht das Gehäuse gut aus und passt auf anhieb, obwohl ich es im Fast Mode mit 0.24mm gedruckt habe. 🙂

Cynthion als USB-Protokollanalysator

Cynthion kann den USB-Datenverkehr zwischen einem Host und jedem Low-, Full- oder High-Speed-USB-Gerät (USB 2.0) erfassen und analysieren. Dazu muss der korrekte Bitstream auf den FPGA geladen und Packetry installiert werden.

Installation Packetry

Unter https://github.com/greatscottgadgets/packetry/releases kann man die Packetry-Installer-for-Windows.zip Datei herunterladen, entpacken und dann die Datei packetry-0.2.2-x86_64.msi mit Doppelklick installieren.

USB Analyzer als Bitstream auf dem FPGA laden

Mit dem Befehl „cynthion run analyzer“ kann man den Cynthion USB Debugger in den USB Analyzer Bitstream Modus versetzen. Details dazu kann man in Kap. 3.2 unter https://cynthion.readthedocs.io/_/downloads/en/latest/pdf/ nachlesen.

> cynthion run analyzer
Uploading target bitstream to FPGA with 247181 bytes...
Operation complete!

Nun kann man Packetry starten, den Cynthion USB Debugger mit dem Controller verbinden, das Cynthion Device auswählen und das „Recordung“ starten. Erst nach dem Start von „Recoring“ sollte man alles andere verbinden, um die ersten Pakete nicht zu verpassen.

Eine Doku zu Packetry findet man unter https://packetry.readthedocs.io/en/latest/quick_start.html

Nun ist alles so weit vorbereitet, dass der Datenaustausch zwischen 2 Geräten die über USB Verbunden sind mit Cynthion und Packetry loggen kann. Sobald man die Verbindung hergestellt hat, fängt Packetry an, die Pakete zu loggen.

Hier eine Verbindung zwischen meinem PC und meinem Pixel 6 Pro Handy.

Alles ist installiert und funktioniert wie erwartet.

DJI Mini 2-SE Debuggen

Als erstes versuche ich mal meine DJI Mini 2-SE zu debuggen. Dazu verbinde ich die Fernbedienung nicht direkt mit dem Handy sondern über den Cynthion wie hier zu sehen.

OK, auf dem Bild ist etwas zu viel Kabel-Chaos. Das nächste Bild zeigt besser, wie alles verkabelt ist.

Nachdem alles verkabelt ist starte ich Packetry und danach erst die Fernbedienung.

Der Test läuft wie folgt:

  1. Drohne einschalten
  2. Fernbedienung einschalten
  3. DJI App wird automatisch gestartet, wenn die Fernbedienung der DJI eingeschaltet wird
  4. Drohne starten (Steuerknüppel Unten/Mitte)
  5. Drohne fliegen (nur kurz hoch – ca. 50 cm.)
  6. Drohne landen
  7. Fernbedienung ausschalten

So weit so gut. Der Test funktioniert und Packetry logt innerhalb von weniger als einer Minute ca. 109.000.000 Datenpakete über Cynthion . OK, das ist etwas viel, aber das liegt vermutlich auch an dem Video-Stream und der auch über USB auf das Handy gelangt.

Als Gerät wird ein „Android Open Accessory (AOA)“ Gerät erkannt. Auch bei einem mehrmaligen Wiederholen des Tests schaffe ich es nicht, die Datenmenge unter 42 Millionen Pakete zu reduzieren und viel interessantes habe ich auch nicht erfahren – schade. Aber die Datenmenge ist einfach zu groß. Evtl. sollte ich es erst mal mit einem einfacheren Gerät wie einer Computermaus, einer Tastatur oder einem USB-Stick versuchen.

Fazit

Cynthion ist ein vielseitiges und leistungsfähiges Werkzeug für die Entwicklung und Analyse von USB-Geräten. Es bietet eine vollständig anpassbare FPGA-Architektur und arbeitet nahtlos mit Open-Source-Software wie Packetry, LUNA und Facedancer zusammen. Die Installation und Konfiguration sind relativ einfach, und das Tool bietet gute Möglichkeiten zur Erfassung von USB-Datenströmen. Allerdings kann die Analyse großer Datenmengen, wie im Test mit der DJI Mini 2-SE, eine Herausforderung darstellen.

Falls sich jemand mit den Daten befassen möchte. Hier kann man die Daten von meinem Test herunterladen um sie später in Packetry zu analysieren.

Download (ca. 150MB zip)

Veröffentlicht in Allgemein