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
>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
Folgende Tools sind sehr nützlich zum Debuggen von USB: SourceQuest SourceUSB, und USBTrace.
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
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.