Forum: PC-Programmierung USB lesen + schreiben


von Philipp (Gast)


Lesenswert?

Hallo,
ich habe eine Frage zur Kommunikation über USB.

Bei dem Aufbau kommuniziert ein Device mit einem Host über USB. Mein 
Ziel ist es jetzt in gewisser Weise das Kabel "durchzuschneiden", die 
Signale an den Enden zu erfassen, um sie (anders codiert) über einen 
anderen Bus zu übertragen.
Ich will also eine unsichtbare Komponente in die Übertragung einfügen.

Jetzt stehe ich vor dem Problem die Signale zu "lesen" und zu 
"schreiben".

Wie kann ich dies machen ohne die Pakete zu verändern?

Es geht also nicht darum einen Treiber für die Geräte zu schreiben und 
mit ihnen zu kommunizieren, das auslesen und schreiben muss völlig 
losgelöst von den Geräten sein und darf keinen Einfluss auf die 
gesendeten Daten haben.

Ist so etwas mit einem USB-Development-Board / USB-Controllern möglich, 
oder lassen sich diese nur ansprechen, indem man eine Verbindung aufbaut 
und somit in das System eingreift?

Gruß
Philipp

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Philipp schrieb:
> .... die Signale an den Enden zu erfassen, um sie (anders codiert)
> über einen anderen Bus zu übertragen.

Was genau schwebt Dir da vor?

Aufgrund der bidirektionalen Natur des USB ist das elektrisch ziemlich 
kompliziert, was in den diversen Threads über eine einfache galvanische 
Trennung schon ausführlich diskutiert wurde.

von Uwe (Gast)


Lesenswert?

Nimm einen MC mit USB-OTG ( On the Go ) der hat nen Host und nen Client 
Port.
Dann mußt die Daten von Host zu Client kopieren und von Client zu Host, 
gleichzeitig die Daten interpretieren. Das Interpretieren der Daten ist 
dann wohl das schwerste. Ist so wie nen USB Treiber zu programmieren. Du 
mußt wissen auf welchem Endpoints welches Protokoll gesprochen wird. 
Also ohne Datenblätter mußt du Reverse Engeneering betreiben. Wenn du 
Glück hast Entspricht das Gerät einem Geräte Standart für dem die 
Endpoints und Interfaces und Befehle und Parameter usw. Festgelegt sind.
Nur Gerätespezifische Zusatzfeatures mußt du dann noch Sniffen.
Gibt übrigens auch USB-Sniffer zu kaufen, die sind sowas ähnliches.

von Philipp (Gast)


Lesenswert?

Schon mal danke für die Antworten.

@Rufus Τ. Firefly:
Also am besten wäre es natürlich, wenn man die Pakete einfach aus einem 
Register lesen und dahin schreiben könnte. Also wirklich nur auslesen 
der Signale, der Controller darf dabei keine wirkliche Intelligenz 
besitzen, er darf also nicht von sich aus die Signal verändern (sync, 
crc, ack, ...)

@ Uwe:
Dann müsste ich ja Treiber für die Geräte schreiben, die sich genau so 
verhalten wie die angeschlossene Hardware. Die Idee ist es aber völlig 
losgelöst von der Hardware arbeiten zu können. Es muss also egal sein 
welche Geräte ich jetzt per USB verbinden will.

Gibt es USB-Controller, die nichts an dem Signal verändern?

Gruß
Philipp

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Und wozu ist das ganze?

Bedenke, daß es bei USB auf das Timing ankommt, daß also Deine Umsetzung 
auf irgendein anderes Protokoll nur sehr wenig Zeit zur Verfügung 
stehen hat.

von Max (Gast)


Lesenswert?

Du wirst um nen FPGA nich rumkommen (ausser vlt. du beschränkst dich auf 
usb-lowspeed, was aber nich wirklich brauchbar is(1,5 Mb/s)....

von Christian R. (supachris)


Lesenswert?

Mal bei Icron geschaut? Eventuell haben die was passendes. Die machen 
sowas für USB über CAT5 oder Lichtleiter. Ist aber ein großer Aufwand. 
Das steckt ein FPGA und ein USB-Phy in der Kiste.

von Εrnst B. (ernst)


Lesenswert?

Philipp schrieb:
> Wie kann ich dies machen ohne die Pakete zu verändern?

Kauf dir einen fertigen USB-Verlängerer.

Aus Anwendersicht ist der einfach nur ein langes Kabel.
Aus PC-Sicht ist es ein USB-Hub mit nur einem Downstream-Port.


Wenn du es selber bauen willst, geh ähnlich vor: Durch das Vortäuschen 
eines HUBs kannst du die ganzen Timing-Einschränkungen umgehen.

Vielleicht findest du ja einen HUB-Chip mit Support für einen externen 
PHY, damit wird das ganze einfach.

von Philipp (Gast)


Lesenswert?

Also das ganze sollte dazu dienen TT-Ethernet (TrimeTriggered) zu testen 
und mit dem "normalen" Ethernet zu vergleichen. Doch anhand der 
angesprochenen Problematik wird es wohl so nicht umgesetzt werden...

Ich danke euch trotzdem für eure Antworten. (Da sie mich letztendlich 
nur bestätigt haben)

Gruß
Philipp

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.
Lade...