USB: Enumeration failure ( AT91SAM7S256)

OP #1014693
Lesenswert?

Ich habe ein Problem mit meiner USBDevice Klasse:

Die Klasse möchte ich dafür verwenden, um per virtual COM port Daten an 
den Host zu senden. Dazu möchte ich nicht andauernd ein usb->update() 
oder so ausführen müssen, sondern alles soll Interruptgesteuert "von 
alleine" funktionieren.

Jetzt mein Problem:
Meine Firmware empfängt folgende Pakete:
1. GetDeviceDescriptor [0x80,0x06,0x00,0x01,0x00,0x00,0x40,0x00]
2. SetAddress [0x00,0x05,0x06,0x00,0x00,0x00,0x00,0x00]
3. GetDeviceDescriptor [0x80,0x06,0x00,0x01,0x00,0x00,0x40,0x00]

Danach passiert Nichts mehr. Configuration und Interfaces werden nicht 
abgefragt. Kann mir jemand Tipps geben, was ich verkehrt mache?
Wenn die Antwort auf 1. verkehrt wäre, würden dann noch 2. und 3. 
kommen?

Gibt es ein Tool, mit dem man den Traffic von neuen Devices mitloggen 
kann, um zu sehen, wo das Problem liegt? Ich habe kein vernünftiges Tool 
gefunden.

Der Quellcode zu meinen Treiber liegt hier:
http://www.xplod.de/index.php?option=com_content&view=category&layout=blog&id=5&Itemid=19

Gruß
Dirk
Gast #1014708
Lesenswert?

>Jetzt mein Problem:
>Meine Firmware empfängt folgende Pakete:
>1. GetDeviceDescriptor [0x80,0x06,0x00,0x01,0x00,0x00,0x40,0x00]
>2. SetAddress [0x00,0x05,0x06,0x00,0x00,0x00,0x00,0x00]
>3. GetDeviceDescriptor [0x80,0x06,0x00,0x01,0x00,0x00,0x40,0x00]
die Frage ist eher was sendest du bei diesen Reqquests zurück
zumindest wlength = 0x40 ist schon etwas komisch
Wie sieht dein Devicedexriptor aus ?
Da du nicht mal den GetConfigDescriptor siest wird dein Device wohl
nur Müll senden.

Thomas
OP #1032447
Lesenswert?

Thomas wrote:
>>Jetzt mein Problem:
>>Meine Firmware empfängt folgende Pakete:
>>1. GetDeviceDescriptor [0x80,0x06,0x00,0x01,0x00,0x00,0x40,0x00]
>>2. SetAddress [0x00,0x05,0x06,0x00,0x00,0x00,0x00,0x00]
>>3. GetDeviceDescriptor [0x80,0x06,0x00,0x01,0x00,0x00,0x40,0x00]
> die Frage ist eher was sendest du bei diesen Reqquests zurück
> zumindest wlength = 0x40 ist schon etwas komisch
> Wie sieht dein Devicedexriptor aus ?
> Da du nicht mal den GetConfigDescriptor siest wird dein Device wohl
> nur Müll senden.

Ich bin schon etwas weiter: Das Problem lag daran, dass sizeof() mir 
mehr zurückgeliefert hat, als die Struktur eigentlich gebraucht hätte. 
Seitdem ich die Größe händisch in den Descriptor eingetragen habe kommt 
ich bis zum GetConfigurationDescriptorabfrage ( den bekomme ich sogar 
zwei Mal. Einmal mit wLength=9 und einmal mit wLength=0xff).

Ich habe mir den ConfigurationDescriptor leider nur von einem USB 
Beispielprojekt "ausgeliehen". Ich hätte gerne, dass mein Device einen 
generischen "Virtuel COM Port" erzeugt, der an jedem Windows ab XP 
direkt ohne einen separaten Treiber erkannt wird. Jetzt durchforste ich 
die Communication Device Class (CDC) Spec nach einer passenden 
Implementierung, finde sie aber nicht. Ich habe leider noch nicht 
gefunden, wo die sagenumwobene "Serial communication emulation" class 
definiert sein soll...
Kennt jemand von euch einen solchen "allegemeinen" Descriptor, oder muss 
ich mir meinen Windows Treiber selber schreiben?

Vorteil von dem virtual COM Port wäre, dass man mit einfachsten Mitteln 
den Datenverkehr auslesen und manipulieren kann (z.B. in Matlab oder 
Labview). Oder kennzt jemand von euch eine bessere Variante?

Gruß
Dirk

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren