Forum: PC-Programmierung USB Slave unter Win XP einrichten


von Alex (Gast)


Lesenswert?

Hallo zusammen,

ich habe vor unter Windows XP ein USB Massenspeicher- Gerät zu 
Simulieren.

Da USB 2.0 auf eine Master/ Slave Arhitektur Basiert, muß ich den 
Rechner, der das Gerät simulieren soll dazu bringen sich auf dem USB-Bus 
als Slave zu verbinden.

Problem:
1. USB On The Go- Funktionalität unterstützt mein Rechner nicht.
2. Host-Bridge-Controller stellen die Gegenstelle für gewöhnich als 
Netzwerkrechner, nicht als Client dar.
3. 2 USB zu RS232 Konverter und ein zwischengeschaltetes 0-Modem- Kabel 
bietet in meinem Fall keine Lösung.

Die einzige Lösung, die mir aus meiner Sicht noch bleibt um das 
Kommunikationsproblem zu lösen, ist es selbst Treiber zu schreiben.
Da es zumeist als Anwendungsprogrammierer ausreichend ist auf API- 
Funktionen zuzugreifen, die die gesamte Treiberschichten als transparent 
erscheienen lassen, ist die Treiberprogrammierung für mich Neuland.

Hat da jemand Tipps oder hilfreiche Links, die mir weiterhelfen?

a) herauszufinden in welcher Treiberschicht ich einen WDM Treiber werde 
programmieren müssen (abhängig von den bereits angebotenen 
Treiberfunktionen der USB-Hub-, Host-Controller- und 
USB-EHCI-Controller-Treiber).


b) Beispiele und Hinweise für die Treiberprogrammierung bieten... im 
Idealfall im Bezug auf USB- Treiber unter Windows.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Du hast da ein ganz entscheidendes Hardwareproblem. Ohne einen 
USB-Device-Controller kann Dein PC kein USB-Device sein.

Von Philips gab es mal eine Entwicklungsplatine für den PDIUSBD11, mit 
dem der PC (unter DOS!) zu einem USB-Device werden konnte.

Du wirst einen der verbreiteten USB-Device-Controller an Deinen PC 
anschließen müssen, fragt sich nur, auf welche Art und Weise das am 
günstigsten zu bewerkstelligen ist.

Der erwähnte Philips-Controller wurde per I²C angesteuert, die 
Entwicklungsplatine konnte an den Parallelport geklemmt werden. Rein 
theoretisch ließe sich dieser Ansatz auch mit moderneren 
Betriebssystemen als DOS durchführen, giveio und Konsorten machens 
möglich, solange man auf "Vista" verzichtet.

Erfolgversprechender ist sicherlich der Gebrauch einer moderneren 
Schnittstelle - wenn Du einen µC dazwischenschaltest, könntest Du diesen 
wiederum per USB an den PC anschließen.
Der µC hat dann zwei USB-Device-Interfaces, das eine dient zur 
Kommunikation mit dem PC und kann auch mit einem FT232 realisiert 
werden. Das andere Deviceinterface ist das, mit dem Du arbeiten willst; 
Du musst Dir dann "nur" noch eine geeignete Kommunikationsstruktur für 
die USB-Daten ausdenken.
Was der USB-Device-Controller des µC diesem mitteilt, müsstest Du über 
die zweite USB/FT232-Verbindung in den PC übertragen und die geeigneten 
Antworten vom PC auf diese Art & Weise rückübertragen.

Statt des zweiten USB/FT232-Kanales ließe sich das ganze natürlich auch 
mit Ethernet realisieren, die Hardware ähnelt dann ziemlich einer 
USB-Netzwerkkarte, nur daß die Firmware eine ganz andere sein dürfte ...

Möglicherweise gibt es auch spezielle OTG-Entwicklungssysteme, die einen 
USB-OTG-Controller auf einer PCI-Karte unterbringen, aber danach 
müsstest Du selber recherchieren.

Was ist die eigentliche Anwendung?

von Christian R. (supachris)


Lesenswert?

Alex wrote:

> Die einzige Lösung, die mir aus meiner Sicht noch bleibt um das
> Kommunikationsproblem zu lösen, ist es selbst Treiber zu schreiben.
> Da es zumeist als Anwendungsprogrammierer ausreichend ist auf API-
> Funktionen zuzugreifen, die die gesamte Treiberschichten als transparent
> erscheienen lassen, ist die Treiberprogrammierung für mich Neuland.

Das bringt nix, wie oben schon gesagt. Die Hardware des USB Controllers 
unterstützt kein Device, also kannste so viele Treiber schreiben, wie du 
willst.

von Alex (Gast)


Lesenswert?

Ich habe mich in den letzten Wochen der Suche nach einem geeignetem 
Board gewidmet. Dabei bin ich auf ein Experimentierboard von 
Cypress(EZ-USB FX2LP) gestoßen, dass   über den CYC68013-Controller 
verschiedene Einstellungsmöglichkeiten für die USB- Device- Entwicklung, 
bietet.
(http://www.cypress.com/portal/server.pt?space=CommunityPage&control=SetCommunity&CommunityID=285&PageID=552&drid=80953&shortlink=&r_folder=&r_title=)

Man kann bis zu 4 USB-Pypes (Interrupt, Bulk oder Isochor) einrichten. 
Der Standard USB-Control-Endpunkt(IN/OUT) ist im System integriert. Die 
USB Busdaten werden in einstellbaren FIFO- Buffer (maximal 4 kByte) 
geladen, die auch von externen Systemen ausgelesen bzw. beschrieben 
werden können. Als mögliches Interface um auf die FIFO Buffer 
zuzugreifen werden zum Beispiel Standards wie ATAPI/UltraDMA66,PCMCIA, 
EPP, ... angegeben.

Im moment bin ich noch dabei zu untersuchen ob ich auf PC- Seite die 
Möglichkeit habe die FIFO Buffer zu steuern um meinen Simulator auf dem 
Rechner zu realisieren. Wenn sich hier Probleme ergeben habe ich noch 
die Option das Device komplett im Entwicklungsboard zu integrieren.

@Rufus
Anwendung soll sein Embedded USB Hubs zu testen. Es sollen gezielt 
Fehlkommunikationen ausgelöst werden, um die Reaktionen des Hosts 
auszuwerten. Das ganze ist ein teil meines Diplomprojektes.

Ich bin für jeden Hinweis Dankbar...

Vielen Dank für die bisherigen Anregungen!

Alex

von Christian R. (supachris)


Lesenswert?

Mit dem FX2 wirst du aber nur sehr schwer ein USB Massenspeichergerät 
simulieren können, das Fehler produziert. Da müsstest du das 
Massenspeicher-Demo Design anpassen, aber soweit ich das in erinnerung 
habe, ist da viel in Libs ausgegliedert. Oder hab ich jetzt was falsch 
verstanden?
Fehlerhafte USB Übertragung wird auch schwierig, das macht der FX2 in 
Hardware.

von Reimer (Gast)


Lesenswert?

Hi,

ich habe ein ähnliches Problem und zwar muß ich auch ein Gerät 
simulieren. Bei mir geht es aber nicht um "Fehler" sondern um echte 
Daten, die ich übertragen werde. Die echte Hardware bekomm ich erst in 
ein paar Monaten.

Da ich noch sehr unerfahren bin, was USB und C++ betrifft, würde ich 
gerne mi Alex in Kontakt treten, um mir ein paar Tips einzuholen.

Wäre ein Moderator, der dessen Email einsehen kann, so nett, ihn per 
Email über meinen Wunsch zur Kontaktaufnahme zu benachrichtigen?

Danke.

von Reimer (Gast)


Lesenswert?

Ok, sorry, hab's übersehen. Die Angabe der Email ist freiwillig. Also 0 
Chance ihn zu erreichen... :'(

von Christian R. (supachris)


Lesenswert?

@Reimer: Das geht nur mit einem USB on the Go Controller, und dann auch 
wahrscheinlich mit sehr viel Arbeit. Ein normaler USB-Host, wie er im PC 
verbaut ist, kann meines Wissens kein USB Device simulieren.

von Reimer (Gast)


Lesenswert?

Mir ist das schon klar, aber im Rahmen meiner Projektarbeit muß ich das 
Gerät erstmal simulieren. Da muß ich natürlich einen Umweg gehen, damit 
das überhaupt funktioniert.

Aber mal ne dumme Frage. Gibt es USB-Controller-Karten mit Device 
Controller? Wenn ja, brauch ich kein Bridge-Kabel zu besorgen.

von Εrnst B. (ernst)


Lesenswert?

Musst du das Gerät simulieren, oder willst du?

Für mich hört sich das so an, als hättest du die Vorstellung das 
Simulieren wäre einfacher als das Gerät zu bauen. IST ES NICHT.

In der Zeit bis du einen USB-Device Simulator designed, gebaut, 
redesigned, neu gebaut, und mit Treibern und Software für Windows 
versehen hast, kannst du sicher drei verschiedene zu dem Originalgerät 
kompatible Hardware-Versionen bauen, auch wenn du dich dafür erst in 
8051 (EzUSB), PIC (18F4550) und AVRs (AT90USB) einarbeiten musst.

von Εrnst B. (ernst)


Lesenswert?

Was für Arten von Fehlern willst du eigentlich simulieren?

Einfache "verlorene Bits" auf der untersten Ebene gehen noch mit FETs in 
den Datenleitungen, aber Fehler auf höheren Ebenen sind nicht mehr so 
einfach zu erzeugen, wenn du einen fertigen USB-Device Controller 
nimmst.
Dafür haben die leider schon zuviel Eigenintelligenz on board, Sachen 
wie vergessene ACKS, Nichteinhaltung von Timeouts etc. kriegen die schon 
hardwaremäßig nicht hin.

Am ehesten gehts noch mit einer Software-Only implementation a'la 
obdev.at, dann allerdings nur Low-Speed.
Für Full/High Speed am ehesten mit einer eigenen 
USB-Device-Implementation in einem FPGA, dem kannst du auch beliebig 
Fehler unterschieben.

von Reimer (Gast)


Lesenswert?

Könntest du den Empfänger deiner Nachricht genauer spezifizieren? Ich 
denke, dein letzte Beitrag richtet sich an Alex.

von Andre (Gast)


Lesenswert?

Du könntest dir mal folgende PCI-Karte anschauen: net2880

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Damit hier nicht unnötig gesucht wird: Die von "Andre" erwähnte Karte 
verwendet einen der hier http://www.plxtech.com/products/net2000/ 
beschriebenen Bausteine.

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.