Single-Wire-USB

Ich wollte ein USB-Differenzsignal in ein Signal umwandeln und es dann über ein Kabel senden und dann am anderen Ende wieder in Differenzsignale zurückversetzen. Ich wollte dies für eine USB 1.1-Tastatur tun, die mit niedriger Geschwindigkeit läuft und auf 1,5 Mbit / s spezifiziert ist (auf meinem Oszilloskop sieht es eher nach 150 kbit / s aus).

Natürlich möchte ich, dass dies in beide Richtungen geht, aber wie USB, nicht gleichzeitig. Laut Wikipedia sind die USB-Differenzsignale normalerweise entgegengesetzt wie 3,3 V / 0 V oder 0 V / 3,3 V oder 0 V / 0 V, aber niemals 3,3 V / 3,3 V. Ich dachte an einen Instrumentenverstärker zum Senden und einen ADC zum Empfangen. Ist das vernünftig oder gehe ich falsch vor?

Woher wissen Sie, wann Sie zwischen Senden und Empfangen wechseln müssen? Ich habe ein Set verwendet, das USB über 100 m transportiert (unter Verwendung von RS485), aber ich denke, es interpretiert USB an beiden Enden, sodass es auf OSI-Level 2/3/4 (Nachrichten) arbeitet, nicht auf 1 (elektrisch).
Die kurze Antwort ist nein – was wollen Sie damit erreichen?
" oder 0V/0V" ist kein Gegenteil.
Wie wäre es mit einem ambitionierteren Projekt? Ich könnte einen USB-zu-ULPI-Konverter verwenden (habe diese) und einen Serdes in einem FPGA verwenden (ich habe 2 Adafruit-Mojo-Boards). Die Tastatur ist ein Startprojekt, um zu sehen, ob dies möglich ist.

Antworten (3)

USB überträgt Daten als Differenzsignal, aber die Differenzregeln werden gebrochen, um Rahmensignale zu erzeugen. Ein Teil des Protokolls legt fest, was mit diesen Ebenenkombinationen zu tun ist.

  • 3,3 V/3,3 V - signalisiert, dass das Gerät entfernt wurde.
  • 0 V/3,3 V - Niedriggeschwindigkeitsgerät
  • 3,3 V/0 V – Gerät mit voller Geschwindigkeit
  • 0V/0V – Einseitige Null, markiert das Ende des Frames oder, wenn es lange genug gehalten wird, einen Geräte-Reset.
  • 3,3 V/0 V und 0 V/3,3 V stellen auch „J“ und „K“ dar, während tatsächliche Daten übertragen werden.

Ihr Plan müsste also irgendwie dem anderen Ende signalisieren, wenn diese Bedingungen eintreten. Verwenden Sie möglicherweise mehr als zwei Spannungspegel in Ihrem analogen Segment.

Machen Sie das alles richtig, und die Zeitbeschränkungen von USB werden es wahrscheinlich für Sie ruinieren.

Der Versuch, dies für USB im Allgemeinen zu tun, ist wahrscheinlich unklug - ziemlich schwierig und weitaus komplizierter als nötig, um Ihr erklärtes Ziel zu erreichen.

Sie sollten besser ein benutzerdefiniertes Schema zum Übertragen von Tastaturdaten entwickeln und es dann in einem Dongle, der mit dem PC verbunden ist, wieder in USB umwandeln. (Sie könnten natürlich eine handelsübliche drahtlose Tastatur kaufen, es sei denn, dies ist aus Gründen der Zuverlässigkeit, Interferenz oder Sicherheit nicht möglich).

Es wäre am einfachsten, das Projekt zu erstellen, wenn Sie eine ältere PS/2-Schnittstellentastatur erhalten, da diese synchrone Schnittstelle von nahezu jedem Mikrocontroller verwaltet werden kann. Sie können jedoch auch eine USB-Tastatur von einer MCU aus hosten - ich hatte etwas Glück mit der KL25Z-Serie auf benutzerdefinierten PCBs sowie dieser Version des Kinetis "Freedom Board" und auch mit STM32F4 auf benutzerdefinierten und Nucleo-Boards. Obwohl ich keinen MCU-Host der K20-Serie für mein spezielles Nicht-Tastatur-Peripheriegerät bekommen konnte, denke ich, dass der vorläufige Host-Modus-Code dafür auf den Teenys3.x-Boards Tastaturen unterstützen könnte.

Für die Zwischenverbindung möchten Sie wahrscheinlich ein asynchrones serielles Schema. Wenn Sie eine echte bidirektionale Kommunikation benötigen (möchten Sie diese Tastatur-LEDs aktivieren?), Können Sie so etwas wie typische RS845-Halbduplex-Protokolle in Betracht ziehen, nur mit Single-Ended-Signalisierung.

Auf der Seite des PC-Dongles können Sie jedes handliche Mikro mit einer USB-Geräteschnittstelle auswählen. Persönlich wähle ich vielleicht den gleichen, den ich auf der Sendeseite verwendet habe, da die meisten eingebetteten USB-Hosts auch ein Gerät sein können. Ich habe eine KL25Z-Platine erstellt, die beide Rollen haben kann - installieren Sie eine USB-Buchse oben auf der Platine und programmieren Sie sie als Host, oder drehen Sie sie um und installieren Sie den Stecker auf dieser Seite mit der Gerätemodus-Firmware.

Es wäre wahrscheinlich viel einfacher, die Tastatur zu zerlegen und das Controller-Modul durch einen Multiplexer/Demultiplexer zu ersetzen, der alle Leitungen kombiniert, die mit der Schaltung des Tastaturschalters verbunden sind (normalerweise fließen etwa 10-12 Leitungen aus dem Controller in die Schalter und a ähnliche Nummer kommt zurück) und kehren Sie dann den Prozess um, um sich an anderer Stelle wieder mit dem Controller-Modul zu verbinden.