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
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.
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 ?
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.