mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik USB: Enumeration failure ( AT91SAM7S256)


Autor: Dirk H. (xplod)
Datum:

Bewertung
0 lesenswert
nicht 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&v...

Gruß
Dirk

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Michael Wolf (mictronics) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Folgende Tools sind sehr nützlich zum Debuggen von USB: SourceQuest 
SourceUSB, und USBTrace.

Autor: Dirk H. (xplod)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.