Hallo, ich möchte eine Schaltung entwickeln die zwischen einem PC und einem USB positioniert ist. PC-USB - USB-Sniffer - USB-Gerät Der Begriff Sniffer ist vielleicht nicht richtig, ich möchte die USB Daten nicht speichern oder auswerten, sondern lediglich feststellen ob gerade Daten über den USB Kabel gesendet werden. Das soll erstmal bis USB 2.0 möglich sein. Dafür greife ich mir von den vier Kabelsträngen eines USB-Kabels (VBUS, Ground, D+, D-) die beiden Datenleitungen D+ und D- ab. Ich lasse die Daten unverändert zwischen PC und USB-Gerät fließen, aber leite es zusätzlich in meine Schaltung um. Nach dem einlesen in die USB-Spezifikationen, komme ich zu dem Schluss das es nicht ausreicht beispielsweise die D- Leitung auf eine vorhandene Spannung zu überprüfen. Ach wenn das bei meinem Test mit meiner Webcam so funktioniert hat. Dort schwankte die Spannung während einer Datenübertragung zwischen praktisch 0 und 200mV. 200mV ist die erforderliche Mindestdifferenz die zwischen D+ und D- liegen muss. Wenn ich mich nicht irre, dann könnte es laut USB Spezifikation aber theoretisch auch zwischen 500mV und 700mV schwanken? Wie kann ich am einfachsten zuverlässig feststellen ob Daten im USB Kabel übertragen werden? (über OS/Software ausgeschlossen) Mit möglichst einfach meine ich, wenn möglich ohne den Einsatz von USB-Controllern.
Hättest Du die USB Spec wirklich gelesen, wüsstest Du dass das 1ms Start-of-Frame Paket immer gesendet werden muss. Dessen Ausbleiben für mehr als 3 ms signalisiert ja grade den Suspend Zustand. Damit wird eine passive Schaltung leider unpraktisch. Eventuell wirst Du bei USB Hubs (bzw. deren Chips) fündig, die könnten so ein Feature eventuell haben.
:
Bearbeitet durch User
Elektron2000 schrieb: > Ich lasse die Daten unverändert zwischen PC und USB-Gerät fließen, aber > leite es zusätzlich in meine Schaltung um. Schon Mist, jedenfalls wenn du willst, daß das USB-Gerät dann auch noch problemlos funktioniert. Das wird bei LowSpeed (1,5MHz) moglicherweise klappen, bei FullSpeed (12MHz) höchstwahrscheinlich schon nicht mehr und bei HighSpeed (480MHz) ganz sicher nicht mehr. > Nach dem einlesen in die USB-Spezifikationen, komme ich zu dem Schluss > das es nicht ausreicht beispielsweise die D- Leitung auf eine vorhandene > Spannung zu überprüfen. So ist es. > 200mV ist die erforderliche Mindestdifferenz die zwischen D+ und D- > liegen muss. So ausgedrückt ist das Quatsch. > Wenn ich mich nicht irre, dann könnte es laut USB Spezifikation aber > theoretisch auch zwischen 500mV und 700mV schwanken? Quatsch. Lies' sie noch einmal (die USB-Specs). > Wie kann ich am einfachsten zuverlässig feststellen ob Daten im USB > Kabel übertragen werden? (über OS/Software ausgeschlossen) > > Mit möglichst einfach meine ich, wenn möglich ohne den Einsatz von > USB-Controllern. Das Hauptproblem ist, die Signale erstmal so sauber abzugreifen, daß das USB-Gerät weiterhin funktioniert. USB ist HF-technisch ziemlich auf Kante genäht, da bleiben kaum Reserven. Weiterhin werden die Signale beide bidirektional benutzt und das auch noch bei drei (USB2.0) unterschiedlichen Geschwindigkeiten, wobei die höchste schon mit Frequenzen fast im GHz-Bereich hantiert. Diese Eigenschaften machen schon die Konstruktion eines funktionierenden Repeaters zum Abgreifen des Signals ziemlich komplex. De facto muß er alles können, was auch ein USB-Hub können muß. Das ist ohne schnelle programmierbare Logik nicht hinzubekommen. Einfacher und auch mit Klapperlogik beherrschbar wird es erst, wenn du dich auf USB1.1 und damit 12MHz beschränkst. Aber selbst dann ist es mit Klapperlogik noch ein ziemlich umfangreiches Projekt. Und was die Auswertung betrifft: bei USB herrscht ständig bidirektionaler Datenverkehr (solange das Gerät nicht im Suspend ist), auch wenn gar keine Nutzdaten übertragen werden, das liegt daran, das USB als Polling-System konzipiert ist, bei dem alle Aktivitäten vom Host ausgehen. Zur (näherungsweisen) Erkennung, ob Nutzdaten transportiert werden, kann deswegen höchstens die Paketgröße dienen. Aber z.B. beim Anmelden des Gerätes werden auch "große" Pakete über den Bus gehen. Die kannst du ohne Decodierung des Protokolls nicht von den Nutzdaten des Gerätes unterscheiden. Kurzfassung: Vergiß' es.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.