Der Teensy 4.1 als Eingabegerät für DMA
Der komplette Teensy-4.1-Aufbau: die Host-Pads löten, mit dem Teensy Loader flashen, die Reihenfolge der Kabel, Steuerung seriell oder übers Netzwerk, Reportraten, Arbeit am Deskriptor und die üblichen Fehler.
Kurze Antwort
Löte eine 5-polige Stiftleiste auf die Host-Pads des 600 MHz schnellen Teensy 4.1 und flash dann mit dem Teensy Loader eine Durchleitungs-Firmware. Die Maus kommt in den Host-Port, der Device-Port an den Gaming-PC, und gesteuert wird die Platine seriell.
Auf dieser Seite12
- Was der Teensy 4.1 ist
- Warum ein Teensy statt eines Fertiggeräts?
- So lötest du den USB-Host-Port
- Welche Software du brauchst und wo die Dateien liegen
- So flashst du die Firmware und testest den Host-Port
- In welcher Reihenfolge du die Kabel steckst
- Die Steuerverbindung wählen und den Cheat einrichten
- Bringt eine höhere Reportrate etwas?
- So änderst du den USB-Deskriptor
- Häufige Teensy-Probleme und ihre Lösungen
- Häufige Fragen zum Teensy
- Quellen
Was der Teensy 4.1 ist
Der Teensy 4.1 ist eine universelle Mikrocontroller-Platine von PJRC, die für diese Aufgabe nie gedacht war. Deshalb ist sie günstig, und deshalb wird sie das fähigste dieser Eingabegeräte, sobald du die Arbeit erledigt hast.
- Mikrocontroller
- NXP i.MX RT1062, ARM Cortex-M7 mit Gleitkommaeinheit in Hardware
- Takt
- 600 MHz ab Werk, in der IDE wählbar. Übertakte ihn für diese Aufgabe nicht
- Flash
- Rund 8 MB (7936 K), weit mehr, als eine Durchleitungs-Firmware je braucht
- RAM
- 1024 K gesamt, davon 512 K eng an den Kern gekoppelt
- Device-Port
- Die Micro-USB-Buchse. USB 2.0 High Speed, 480 Mbit/s. Dieses Ende zeigt zum Gaming-PC
- Host-Port
- Fünf durchkontaktierte Pads auf der Platine, ab Werk unbestückt. Läuft je nach angeschlossenem Gerät mit 480, 12 oder 1,5 Mbit/s. In dieses Ende kommt deine Maus
- Host-5V
- Vom Chip über einen strombegrenzten Schalter geschaltet. Die Pads führen keine Spannung, bis die Firmware die Startfunktion der Host-Bibliothek aufruft
- Serielle Schnittstellen
- Acht UARTs, falls du eine serielle Verbindung willst, die nicht über den USB-Device-Port läuft
- Ethernet
- 10/100-fähig, aber der Magjack ist ein separater Bausatz zum Auflöten. Für einen seriellen Aufbau nicht nötig
- Programmierung
- Teensy Loader, von der Arduino IDE automatisch angesteuert, sobald Teensyduino installiert ist. Ein physischer Program-Taster erzwingt den Bootloader
Warum ein Teensy statt eines Fertiggeräts?
Es gibt drei Gründe, sortiert danach, wie oft jeder davon der wahre Grund ist. Erstens kompilierst du die Firmware selbst und entscheidest damit, welchen USB-Deskriptor der Gaming-PC sieht und wie oft Reports rausgehen, was dir kein Fertiggerät erlaubt. Zweitens sind Host- und Device-Controller vollständig unabhängig, die Durchleitung konkurriert also nicht mit der Einmischung um Bandbreite. Drittens ist die Platine günstig. Der Preis dafür: Du wirst zum Hersteller. Wenn etwas schiefläuft, gibt es keinen Support-Kanal, sondern nur deine eigene Verdrahtung und deinen eigenen Code.
Achtung
So lötest du den USB-Host-Port
Das ist die einzige Lötarbeit, die sein muss, und sie entscheidet, ob der Rest des Aufbaus funktioniert. Die Host-Pads sind fünf durchkontaktierte Löcher, ab Werk unbestückt, und sie führen Host-5V, das Paar D-minus und D-plus sowie Masse. Halte dich für die Reihenfolge an den Bestückungsdruck und an die offizielle Pinbelegungskarte, und rate nicht und vertrau keiner Zeichnung aus einem Forenbeitrag.
- Finde die fünf Host-Pads auf deiner Platine und gleich ihre Reihenfolge mit der Pinbelegungskarte von PJRC für den Teensy 4.1 ab
- Setz eine 5-polige Stiftleiste in die Löcher, oder leg dir das passende USB-Host-Kabel zurecht, das PJRC für Teensy 3.6 und 4.1 verkauft
- Löte mit feiner Spitze und einem Lot mit niedriger Schmelztemperatur, denn das sind kleine Pads auf einer dicht bestückten Platine, und eine dicke Spitze brückt sie
- Prüf jede Lötstelle bei gutem Licht. Eine matte, körnige oder kugelige Stelle ist eine kalte Lötstelle und der häufigste Grund dafür, dass ein Host-Port gar nichts erkennt
- Bevor du irgendetwas mit Strom versorgst: Prüf mit dem Durchgangsprüfer, ob zwischen D-minus und D-plus eine Brücke steht
- Wenn du blanke Drähte statt des Kabels nimmst, halte das Paar D-minus und D-plus kurz und gleich lang, denn es ist ein differentielles Paar mit bis zu 480 Mbit/s
- Verbinde Host-5V nicht leichtfertig mit einem externen Netzteil, denn die Platine schaltet diese Leitung selbst, und der Schalter ist aus gutem Grund strombegrenzt
Welche Software du brauchst und wo die Dateien liegen
Du brauchst die Arduino IDE und Teensyduino, die Erweiterung von PJRC. In Teensyduino stecken die Host-Bibliothek und der Teensy Loader bereits drin, sonst muss also nichts installiert werden.
# After installing Teensyduino, set these three in the Arduino IDE:
Tools > Board > Teensy 4.1
Tools > USB Type > Serial + Keyboard + Mouse + Joystick
Tools > CPU Speed > 600 MHz
# The host-side library ships with Teensyduino. Prove the hardware with its own example:
File > Examples > USBHost_t36 > Mouse
# USB identity is defined in the core, not in your sketch:
<arduino>/hardware/teensy/avr/cores/teensy4/usb_desc.h
<arduino>/hardware/teensy/avr/cores/teensy4/usb_names.hAchtung
So flashst du die Firmware und testest den Host-Port
Flash zuerst das mitgelieferte Mouse-Beispiel aus USBHost_t36. Es schreibt jede Bewegung und jeden Klick der angeschlossenen Maus in den seriellen Monitor und beweist deine Lötarbeit damit in etwa dreißig Sekunden. Denk vor dem Test daran, dass die 5-V-Leitung an den Host-Pads vom Chip geschaltet wird und nicht fest verdrahtet ist. Läuft auf der Platine eine Firmware, die die Host-Bibliothek nie startet, leuchtet eine Maus im Host-Port nicht einmal auf. Ein Host-Port, der auf so einer Platine tot aussieht, sagt dir nichts. Erst flashen, dann testen, und erst danach die Firmware flashen, die dein Cheat erwartet.
- Verbinde den Micro-USB-Device-Port des Teensy mit dem PC, auf dem du kompilierst
- Öffne das Mouse-Beispiel aus USBHost_t36, setz Board und USB Type wie in den Einstellungen der Toolchain und klick auf Upload
- Teensyduino übergibt das kompilierte Image an den Teensy Loader, der die Platine neu startet und das Image schreibt. Auf einer Platine ab Werk passiert das automatisch
- Hängt der Upload, drück einmal den Program-Taster am Teensy. Das erzwingt den Bootloader, und der Loader findet die Platine danach
- Steck eine Kabelmaus in den frisch gelöteten Host-Port und öffne den seriellen Monitor
- Beweg die Maus. Erscheinen Bewegung und Tastenereignisse, funktioniert der Host-Port und der Hardware-Teil des Aufbaus ist fertig
- Jetzt kompilierst und flashst du die Durchleitungs-Firmware, die dein Cheat dokumentiert, mit denselben Einstellungen für Board und USB Type
- Trenn die Platine nach dem letzten Flashen einmal vom Strom, statt dich auf einen weichen Neustart zu verlassen
In welcher Reihenfolge du die Kabel steckst
Wenn du diese Reihenfolge verdrehst, verbringst du leicht eine Stunde damit, ein Kabel zu debuggen. Der Device-Port zeigt zum Gaming-PC, weil das das Ende ist, das behauptet, eine Maus zu sein, und der Host-Port zeigt zu deiner Hand.
- Steck die physische Maus, oder den Dongle deiner Funkmaus, in den angelöteten USB-Host-Port des Teensy
- Verbinde den Micro-USB-Device-Port des Teensy direkt mit einem USB-Port hinten am GAMING-PC, ohne Hub und ohne Frontpanel-Anschluss
- Ergänze die Steuerverbindung vom ZWEIT-PC. Sie kann sich den Device-Port nicht teilen, denn die serielle USB-Schnittstelle dieses Ports meldet sich am Gaming-PC an, wo das Kabel steckt
- Nimm für die Steuerverbindung stattdessen einen der acht Hardware-UARTs. Setz am Ende des Zweit-PCs einen USB-Seriell-Adapter, damit die beiden Maschinen sich nie ein Kabel teilen
- Fahr den Gaming-PC hoch und prüf, dass Windows ein Mausgerät zeigt und dass deine Hand den Cursor bewegt
- Erst danach startest du die Software auf dem Zweit-PC und öffnest die Verbindung
Tipp
Die Steuerverbindung wählen und den Cheat einrichten
Ein zusammengesetzter USB-Typ gibt dir eine Maus-Schnittstelle und eine serielle Schnittstelle auf demselben Kabel. Diese serielle Schnittstelle erscheint am Gaming-PC, wo der Device-Port steckt, der Zweit-PC kann sie also nicht öffnen. Es bedeutet außerdem, dass auf der Maschine, auf der du cheatest, ein serielles Gerät aus demselben zusammengesetzten Gadget hängt wie deine Maus, beide Schnittstellen unter einem Deskriptor. Nimm die Steuerverbindung deshalb von einem Hardware-UART und setz am Ende des Zweit-PCs einen schlichten USB-Seriell-Adapter. Der Gaming-PC sieht dann ein Gerät, das nur eine Maus ist, und du bekommst für ein Kabel und ein Bauteil mehr einen saubereren Aufbau. Welche Verbindung du auch nimmst: Die Firmware legt das Protokoll fest, und der Cheat muss dazu passen. Im Eingabe-Menü des Cheats stellst du drei Dinge ein: den Gerätetyp, den COM-Port und die Baudrate. Der Gerätetyp steht oft als Teensy oder als allgemeines serielles Gerät da. Der COM-Port ist der, den der Zweit-PC vergeben hat, und die Baudrate die, mit der die Firmware kompiliert wurde. Alle drei müssen übereinstimmen. Eine falsche Baudrate erzeugt keine klare Fehlermeldung, denn die Verbindung geht auf und tut dann nichts, was genau wie ein totes Gerät aussieht. Schau also im Geräte-Manager nach der Portnummer und erzwing sie unter 10, wenn der Cheat nur einstellige Nummern liest, und schreib die Baudrate beim Flashen auf, statt später zu raten.
Bringt eine höhere Reportrate etwas?
Der Device-Port läuft mit USB High Speed, der Deskriptor kann also Intervalle unterhalb der 1-ms-Grenze anfordern, die eine Full-Speed-Maus begrenzt. In der Praxis heißt das Berichte im Sub-Millisekunden-Bereich, und genau dafür mögen die Leute diese Platine, aber genau hier eilt die Begeisterung dem Nutzen davon. Eine Reportrate weit über dem, was die Eingabeschleife des Spiels selbst verarbeitet, bringt dir keinen messbaren Vorteil. Ein Report-Strom, der bei einer ungewöhnlichen Rate perfekt gleichmäßig läuft, ist außerdem ein Muster, und nach Mustern sucht die Verhaltensanalyse. Setz eine Rate, die eine echte Maus dieser Klasse plausibel nutzen würde. Es gibt keinen ehrlichen Vergleichstest, der zeigt, dass eine höhere Zahl sicherer ist, und wer dir einen in Millisekunden zitiert, denkt ihn sich aus.
Tipp
So änderst du den USB-Deskriptor
Weil du die Firmware selbst kompilierst, bestimmst du Vendor ID, Product ID, die Textstrings für Hersteller und Produkt, die Seriennummer und den HID Report Descriptor. Unangetastet zeigt ein Teensy die Identität von PJRC vor, also die Identität einer Entwicklungsplatine auf einer Maschine, die sonst keinen Grund hat, eine zu haben. Die Strings und IDs liegen im Core in usb_desc.h und usb_names.h und nicht in deinem Sketch. Der 4.x-Core bietet einen saubereren Weg: Definiere die String-Deskriptoren in einer kleinen separaten C-Datei im Ordner deines Sketches. Sobald du Vendor und Product ID änderst, findet Teensyduino die Platine nicht mehr automatisch und kann sie nicht mehr neu starten, jeder Upload danach braucht also einen Druck auf den Program-Taster. Das ist erwartetes Verhalten und kein Defekt. Lies die Anleitung zu Deskriptoren, bevor du etwas änderst, denn die Identität einer echten Maus schlecht zu kopieren ist schlimmer, als sie ab Werk zu lassen.
Häufige Teensy-Probleme und ihre Lösungen
Arbeite von oben nach unten. Die ersten vier Zeilen decken das meiste ab, was bei einem ersten Aufbau schiefgeht, und drei von diesen vier liegen am Löten.
| Symptom | Mögliche Ursache | Lösung |
|---|---|---|
| Die Maus im Host-Port tut nichts, an der Maus leuchtet keine LED | Entweder eine kalte Lötstelle an den Host-Pads, oder eine Firmware, die die Host-Bibliothek nie startet, sodass die 5-V-Leitung aus bleibt | Flash zuerst das Mouse-Beispiel aus USBHost_t36. Zeigt die Maus danach immer noch kein Lebenszeichen, löte alle fünf Pads nach und prüf den Durchgang |
| Der Host-Port erkennt Geräte nur sporadisch, oder nur langsame Geräte laufen | Das Paar D-minus und D-plus ist zu lang oder ungleich lang, oder zwischen den Pads sitzt Lötrückstand | Kürze das Paar und gleich die Längen an, oder steig auf das richtige USB-Host-Kabel um. Reinige die Pads mit Isopropanol und prüf sie bei gutem Licht |
| Der Gaming-PC zeigt überhaupt kein Mausgerät | USB Type in der IDE enthält kein Mouse, der Device-Port zeigt also nie eine HID-Maus-Schnittstelle | Setz Tools > USB Type auf eine Option mit Mouse, kompiliere neu, flash neu und trenn die Platine danach vom Strom |
| Der Upload schlägt fehl oder hängt bei Waiting for Teensy device | Die laufende Firmware reagiert nicht auf die Neustart-Anforderung, oder du hast Vendor und Product ID geändert | Drück einmal den Program-Taster auf der Platine. Nach einer Änderung an VID oder PID brauchst du das bei jedem Upload |
| Der Cursor bewegt sich durch den Cheat, deine eigene Maus tut nichts | Die Durchleitung läuft nicht: Die Host-Seite ist tot, während die Device-Seite arbeitet | Test den Host-Port mit dem Mouse-Beispiel, denn die Ursache ist fast immer die Lötarbeit |
| Deine Maus läuft, aber der Cheat bekommt die Verbindung nicht auf | Falscher COM-Port, oder eine Baudrate, die nicht zur kompilierten Firmware passt | Such den Port im Geräte-Manager, setz ihn unter 10 und stell die Baudrate auf den Wert, mit dem die Firmware gebaut wurde |
| Die Bewegung ist grob oder stufig statt weich | Der Report Descriptor nutzt 8-Bit-Felder für Bewegung, große Deltas werden also abgeschnitten und in mehreren Stufen gesendet | Nimm eine Firmware, deren Deskriptor relative Achsen mit 16 Bit deklariert, und lass große Bewegungen vom Cheat aufteilen statt vom Deskriptor |
| Die Platine wird warm und das Host-Gerät fällt unter Last aus | Das angeschlossene Gerät zieht mehr Strom, als die Grenze der Host-Leitung zulässt | Nimm eine schlichte Kabelmaus statt einer mit viel RGB oder eines aktiven Hubs, und häng nie einen vollen Hub an den Host-Port |
Häufige Fragen zum Teensy
Kann ich einen Teensy 4.0 statt eines 4.1 nehmen?
Nicht bequem. Der 4.0 führt die Host-Signale als zwei Pads auf der Oberfläche heraus statt als fünf durchkontaktierte Löcher mit Strommanagement, du musst D-minus und D-plus also von Hand verdrahten und die 5 V selbst liefern. Machbar ist es, aber jede Anleitung und jede Firmware geht vom 4.1 aus.
Brauche ich das offizielle USB-Host-Kabel von PJRC?
Nein, aber es ist die einfachste richtige Lösung, weil es auf die 5-polige Stiftleiste passt und das differentielle Paar ohne Zusatzaufwand sauber führt. Von Hand verdrahtet geht auch, solange das Paar kurz und gleich lang ist.
Ist ein Teensy schwerer zu erkennen als eine KMBox?
Nicht von allein. Ein Teensy gibt dir Kontrolle: Du entscheidest über Deskriptor, Strings und Reportrate und kannst so eine plausible Identität vorzeigen statt einer ab Werk. Auf Werkseinstellungen zeigt er die Identität einer Entwicklungsplatine vor, was schlechter ist als ein Gerät, das für diese Aufgabe gebaut wurde, die Kontrolle ist also nur dann ein Vorteil, wenn du sie nutzt.
Kann der Teensy den Cheat selbst ausführen?
Nein, denn er hat keine Möglichkeit, den Speicher des Gaming-PCs zu lesen. Er bewegt den Cursor, wenn man es ihm sagt, und wohin, entscheiden die DMA-Karte und der Zweit-PC.
Funktioniert der Dongle einer Funkmaus im Host-Port?
Meistens ja, denn der Host behandelt den Dongle als USB-HID-Gerät. Manche Dongles zeigen zusätzliche Schnittstellen oder ein herstellereigenes Konfigurationsprotokoll vor, das eine Durchleitungs-Firmware ignoriert, Tastenbelegungen im Gerät und manche Softwarefunktionen können dann ausfallen.
Muss ich den Ethernet-Magjack-Bausatz löten?
Nur, wenn du eine Steuerverbindung über IP statt seriell willst. Steht der Zweit-PC neben dem Gaming-PC, ist seriell einfacher und spart dir eine Lötarbeit.
Was passiert, wenn ich die falsche Firmware flashe?
Nichts Bleibendes. Der Bootloader sitzt auf einem eigenen Chip, und der Program-Taster bringt die Platine immer in einen Zustand zurück, in dem der Teensy Loader ein neues Image schreiben kann. Damit ist ein Teensy durch Flashen sehr schwer kaputtzukriegen.
Quellen
In unserer geprüften Quellenliste steht nichts zum Teensy selbst, die Daten der Platine, das Löten, das Flashen und die Fehlertabelle stammen also aus eigenen Tests.
- 01Microsoft Learn, USB device descriptors
die Felder vendor id, product id, Textstring und Seriennummer, die du setzt, wenn du deinen eigenen Deskriptor kompilierst
learn.microsoft.com
Weiterlesen
- KMBox Net, KMBox B+, MAKCU, Teensy oder Arduino: welches Eingabegerät kaufen
- USB-Deskriptoren, VID/PID und was Deskriptor-Klonen bedeutet
- Die komplette Signalkette, von deiner Hand bis ins Spiel
- Der Cursor bewegt sich nicht: so reparierst du die Eingabeschicht
- MAKCU und MAKCM einrichten, von Anfang bis Ende
Kommst du nicht weiter? Ticket auf Discord öffnen
Alle Anleitungen