USB: Enumeration failure ( AT91SAM7S256)

OP #1014693
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
>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
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

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.