Forum: Mikrocontroller und Digitale Elektronik USB Datenübertragung erkennen


von Elektron2000 (Gast)


Lesenswert?

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.

von Jim M. (turboj)


Lesenswert?

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
von c-hater (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.