Forum: Mikrocontroller und Digitale Elektronik PDIUSBD11 und Deskriptorprobleme...


von Weinga-Unity (Gast)


Lesenswert?

Hi!
Hab jetzt die Software für den PDIUSBD11 fast fertig. Ich verwende LEDs 
zum Debuggen und merke, dass er zwar die Deskriptoren abfragen (Strings 
und Device), aber beim PC rührt sich nicht. Er Fragt die Deskriptoren 
ständig ab, was mich etwas verwundert.

Ich bin mir auch nicht sicher, ob die Deskriptoren korrekt übertragen 
werden. Kann man das vielleicht irgendwie überprüfen?

Hat jemand von euch vielleicht eine Idee, wo das Problem liegen könnte?

mfg Weinga-Unity

von Axel Barkow (Gast)


Lesenswert?

Hallo,

was meinst du mit, beim PC rührt sich nichts? Hat er gar kein USB Gerät 
erkannt? Dann sollte er auch keine Descriptoren abfragen. Hat er bei mir 
zumindest nicht gemacht (Windows 2000). Wenn ich mich recht entsinne, 
hat er bei mir erst den Device und dann den Interface Descriptor 
abgefragt. String kam erst viel später. Überprüfe mal, ob nicht 
regelmäßig ein Bus-Reset ausgeführt wird, war bei mir der Fall, als das 
Übertragungsprotokoll noch nicht ganz fehlerfrei wahr.

Gruß,

Axel

P.S.
Tut mir leid, habe im Moment wenig Zeit, sonst würde ich das nochmal an 
meiner eigenen Hardware testen.

von Thomas Zepf (Gast)


Lesenswert?

Hier mal eine Liste was bei der Enumerierung unter Win (alle Versionen) 
so passiert.

- GetDescriptor (Device) mit wLength 0x0040
- BusReset
- SetAdress()
- GetDescriptor (Device) mit wLength(0x0012)
- GetDescriptor (Config) je nach länge mehrmals

falls bis dahin alles korrekt läuft siehst du zumindest das Device
Achtung der Host leitet unabhängig von der Antwort
auf den ersten Request die Status Stage ein.

Ein vereinfachtes Beispiel für den DeviceDescirptor:
-  Host:  Setup Packet GetDescriptor
-  Device kopiert die ersten 8 Bytes
-  Host:  In
-  Device kopiert die nächsten 8 Bytes
-  Host:  In
-  Device: kopiert die letzen 2 Bytes
-  Host:  Out = Status Stage

Der Host kann jederzeit die Übertragung abbrechen
indem er einen Out Request für den Status schickt.
(das steht so in der Spec)

Thomas


Wie sehen denn deine Descriptoren aus ?

von Weinga-Unity (Gast)


Lesenswert?

Ich hab das Programm mal debugged:
Es kommt bis dort hin, wo er die Deskriptoren senden sollte (aufteilung 
in 8er Paketen). Ich hab aber so das gefühlt, dass nichts gesendet wird.

Vielleicht wisst ihr, wo in diesem Bereich die Standardfehler sind.


Meine Deskriptoren


DeviceDescriptor:
      DB  18    ;Größe des Deskriptors in Bytes
      DB  01H    ;die Konstante DEVICE (01H)
      DW  0110H    ;USB-Spezifikation
      DB  00H    ;Klassencode
      DB  00H    ;Unterklassencode
      DB  00H    ;Protokollcode
      DB  08H    ;Maximale Paketgröße für den Endpunkt 0
      DW  0FFFFH    ;Anbieter ID
      DW  000CH    ;Produkt ID
      DW  0110H    ;Release-Nummer des Geräts
      DB  01H    ;Index des String-Deskriptors für den Hersteller
      DB  02H    ;Index des String-Deskriptors für das Produkt
      DB  03H    ;Index des String-Deskriptors mit der Seriennummer
      DB  01H    ;Anzahl möglicher Konfigurationen

ConfigurationDescriptor:
      DB  09H    ;Größe des Deskriptors in Bytes
      DB  02H    ;Die Konstate KONFIGURATION (02H)
      DB  CONF_L    ;Größe aller für diese Konfiguration zurückgegebenen 
Daten in Bytes
      DB  00H    ;HighBit von Länge
      DB  01H    ;Anzahl der Schnittstellen, die die Konfiguration 
unterstützt
      DB  01H    ;Identifizierer für Set_Configuration- und 
Get_Configuration-Requests
      DB  00H    ;Index des String-Deskriptors für die Konfiguration
      DB  40H    ;Eigenstrom/Busstrom- und Remote-Wakeup-Einstellungen
      DB  50    ;Erforderlicher Busstrom (mA/2)

InterfaceDescriptor:
      DB  09H    ;Größe des Deskriptors in Bytes
      DB  04H    ;Die Konstante INTERFACE (04H)
      DB  00H    ;Eine Nummer zur Identifizierung dieser Schnittstelle
      DB  00H    ;Eine Nummer zur Auswahl einer alternativen Einstellung 
verwendeter Werte
      DB  01H    ;Die Anzahl der unterstützten Endpunkte mit Ausnahme 
des EP0
      DB  03H    ;Klassen-Code
      DB  01H    ;Unterklassen-Code
      DB  01H    ;Protokoll-Code
      DB  00H    ;Index des String-Deskriptors für die Schnittstelle

HIDDescriptor:    DB  09H    ;Deskriptorgröße in Byte
      DB  21H    ;21H zeigt die HID-Klasse an
      DW  0001H    ;Versionsnummer der HID-Spezifikation
      DB  21H    ;Numerischer Ausdruck, der für das Land der 
lokalisierten Hardware steht
      DB  01H    ;Anzahl der unterstützten untergeordneten 
Klassendeskriptoren
      DB  22H    ;Der Typ des Klassendeskriptors
      DB  50,0    ;Gesamtlänge des Berichtsdeskriptors

Endpoint1Descriptor:  DB  07H    ;Größe des Deskriptors in Bytes
      DB  05H    ;die Konstante ENDPOINT (05H)
      DB  81H    ;Endpunktnummer und -richtung
      DB  03H    ;unterstützter Transfer-Typ
      DW  0800H    ;maximal unterstützte Paketgröße
      DB  0AH    ;Abfrageintervall in Millisekunden
ConfigurationEnd:
CONF_L      EQU  ConfigurationEnd-ConfigurationDescriptor


ReportDescriptor:
      DB  005H,001H  ;USAGE_PAGE (Generic Desktop)
      DB  009H,002H  ;USAGE (Mouse)
      DB  0A1H,001H  ;COLLECTION (Application)
      DB  009H,001H  ;USAGE (Pointer)
      DB  0A1H,000H  ;COLLECTION (Physical)
      DB  005H,009H  ;USAGE_PAGE (Button)
      DB  019H,001H  ;USAGE_MINIMUM (Button 1)
      DB  029H,003H  ;USAGE_MAXIMUM (Button 3)
      DB  015H,000H  ;LOGICAL_MINIMUM (0)
      DB  025H,001H  ;LOGICAL_MAXIMUM (1)
      DB  095H,003H  ;REPORT_COUNT (3)
      DB  075H,001H  ;REPORT_SIZE (1)
      DB  081H,002H  ;INPUT (Data,Var,Abs)
      DB  095H,001H  ;REPORT_COUNT (1)
      DB  075H,005H  ;REPORT_SIZE (5)
      DB  081H,003H  ;INPUT (Cnst,Var,Abs)
      DB  005H,001H  ;USAGE_PAGE (Generic Desktop)
      DB  009H,030H  ;USAGE (X)
      DB  009H,031H  ;USAGE (Y)
      DB  015H,081H  ;LOGICAL_MINIMUM (-127)
      DB  025H,07FH  ;LOGICAL_MAXIMUM (127)
      DB  075H,008H  ;REPORT_SIZE (8)
      DB  095H,002H  ;REPORT_COUNT (2)
      DB  081H,006H  ;INPUT (Data,Var,Rel)
      DB  0C0H    ;END_COLLECTION
      DB  0C0H    ;END_COLLECTION


LangIDDescriptor:  DB  04H
      DB  03H
      DW  0009H

von Thomas Zepf (Gast)


Lesenswert?

Achtung mit den DW das wird nicht so funktionieren
wie du dir das denkst....
Ich würde das folgendermasen machen:
  DB LOW(DeviceId),HIGH(DeviceID)
BTW DeviceId 0xFFFF soltest du nicht nehmen genauso
wie 0x0000.

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.