Guten Tag Ich bin neu in der USB Thematik und habe seit einigen Tagen Probleme mit dem USB auf unserem STM32F407 (USB Device IDE von Keil). Ein Kollege hat eine Python Applikation geschrieben um Daten vom Chip auf den PC zu senden und zu empfangen, es hat mit USB FS auch so funktioniert. Auf der Hardware wurden die Pins von USB FS auf USB HS angepasst. Das Problem: Der PC erkennt den Chip, aber sobald ich die python app verbinde kommt folgende Window Fehlermeldung: Dieses Gerät wurde angehalten, weil es Fehler gemeldet hat. (Code 43) Fehler bei einer Anforderung des USB-Gerätedeskriptors. Wir nutzen den default descriptor. Wenn jemand vielleicht eine Idee hätte wo ich genauer schauen soll wäre ich euch sehr verbunden :) Liefere gerne weitere Infos Vielen Dank
Wir kennen deinen Defaultdeskriptor nicht. Wenn ich das richtig interpretiere baut ihr ein HS HID Device. Stell mal die Ausgabe von Usbview hier ein. Zwei Dinge könnte ich mir vorstellen. - Die Umschaltung für FS/HS funktioniert nicht korrekt. - Der Phyton Code kann nicht mit HS umgehen. Thomas
Jens schrieb: > Dieses Gerät wurde angehalten, weil es Fehler gemeldet hat. (Code 43) > Fehler bei einer Anforderung des USB-Gerätedeskriptors. Das Gerät hat die Kommunikation mit dem Host eingestellt. Je nachdem welche Lib für die Kommunikation verwendet wurde, werden nochmal die Standard Deskriptoren beim Enumerieren/Öffnen gelesen - und das ging schief. Hier sollte man immer die Basics (Spannung, Takt, Pinkonfiguration) prüfen. Eventuell konfiguriert der Python Zugriff intern Pins oder Clock um. Wenn ich den Screenshot richtig interpretiere, hat der Chip intern nur Full Speed und braucht für High Speed externen Phy. Ist der korrekt angeschlossen?
Hab leider keine Admin Rechte.. aber ich liefer den USB output nach und vielen Dank ich kannte dieses Tool nicht Thomas Z. schrieb: > - Die Umschaltung für FS/HS funktioniert nicht korrekt Was meinst du mit Umschaltung? Thomas Z. schrieb: > - Der Phyton Code kann nicht mit HS umgehen. Ich habe den Highspeed hacken im angehängten File USBD_CONFIG_0 auch schonmal rausgenommen, leider das gleich Ergebnis
Hier mal der Output
[Port2] FailedEnumeration : Unbekanntes USB-Gerät (Fehler beim
Anfordern einer Gerätebeschreibung.)
Is Port User Connectable: yes
Is Port Debug Capable: no
Companion Port Number: 2
Companion Hub Symbolic Link Name:
USB#VID_2109&PID_8110#5&3418820d&0&14#{f18a0e88-c30c-11d0-8815-00a0c906b
ed8}
Protocols Supported:
USB 1.1: yes
USB 2.0: yes
USB 3.0: no
---===>Device Information<===---
ConnectionStatus: FailedEnumeration
Current Config Value: 0x00 -> Device Bus Speed: Full (is
not SuperSpeed or higher capable)
Device Address: 0x00
Open Pipes: 0
*!*ERROR: No open pipes!
===>Device Descriptor<===
*!*ERROR: bLength of 0 incorrect, should be 18
bLength: 0x00
bDescriptorType: 0x00
bcdUSB: 0x0000
bDeviceClass: 0x00
*!*ERROR: Device enumeration failure
Jens schrieb: > Thomas Z. schrieb: >> - Die Umschaltung für FS/HS funktioniert nicht korrekt > > Was meinst du mit Umschaltung? Nun ja die Firmware kann ja so gebaut sein dass Sie an einem FS Host oder einem HS Host funktioniert. Dann braucht es einen OtherSpeed Deskriptor. Ich hab gerade noch Mal nachgelesen: Die Erkennung des HS Device passiert während des Usb Resets. Das Gerät signalisiert da Chirp. (D- geht nach spätestens 4ms auf 1 und bleibt max 3ms 1) Fehlt das Chirp ist es ein FS Device. Es gibt also im Prinzip 2 Deskriptorsätze. Einen für FS und einen für HS. Wenn deine FW also aus irgend einem Grund den falschen Satz schickt wird das System wohl blockieren. Dem Output nach sendet dein Device gar nichts. Die Aussage wird erkannt ist also falsch. Die 1k5 sind zugeschaltet da eine FS Connection erkannt wird. Ansonsten ist dein HS Port mausetot. Jim hat vermutlich Recht ev fehlt die HS PHY Thomas
Wir haben keinen externen PHY. Zur Info im angehängten RTE_device ist
der Hacken on chip phy ausgewählt, ich hatte gelesen das es nur einen
externen phy braucht wenn ich auf 480Mbs kommen will oder brauchen wir
einen externen?
Hier der Output wenn ich nur verbinde ohne die python app zu verbinden,
wenn ich usb verbinde klappt es noch, aber sobald ich die python app
verbinde kommt Output den ich als letztes gepostet habe:
[Port2] : USB-Eingabegerät
Is Port User Connectable: yes
Is Port Debug Capable: no
Companion Port Number: 2
Companion Hub Symbolic Link Name:
USB#VID_2109&PID_8110#5&3418820d&0&14#{f18a0e88-c30c-11d0-8815-00a0c906b
ed8}
Protocols Supported:
USB 1.1: yes
USB 2.0: yes
USB 3.0: no
Device Power State: PowerDeviceD0
---===>Device Information<===---
English product name: "Keil USB Device 0"
ConnectionStatus:
Current Config Value: 0x01 -> Device Bus Speed: Full (is
not SuperSpeed or higher capable)
Device Address: 0x29
Open Pipes: 2
===>Device Descriptor<===
bLength: 0x12
bDescriptorType: 0x01
bcdUSB: 0x0110
bDeviceClass: 0x00 -> This is an Interface Class
Defined Device
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x08 = (8) Bytes
idVendor: 0xC251 = Vendor ID not listed with
USB.org
idProduct: 0x0000
bcdDevice: 0x0100
iManufacturer: 0x01
English (United States) "Keil Software"
iProduct: 0x02
English (United States) "Keil USB Device 0"
iSerialNumber: 0x03
English (United States) "0001A0000000"
bNumConfigurations: 0x01
---===>Open Pipes<===---
===>Endpoint Descriptor<===
bLength: 0x07
bDescriptorType: 0x05
bEndpointAddress: 0x81 -> Direction: IN - EndpointID:
1
bmAttributes: 0x03 -> Interrupt Transfer Type
wMaxPacketSize: 0x0009 = 0x09 bytes
bInterval: 0x01
===>Endpoint Descriptor<===
bLength: 0x07
bDescriptorType: 0x05
bEndpointAddress: 0x01 -> Direction: OUT - EndpointID:
1
bmAttributes: 0x03 -> Interrupt Transfer Type
wMaxPacketSize: 0x0009 = 0x09 bytes
bInterval: 0x10
---===>Full Configuration Descriptor<===---
===>Configuration Descriptor<===
bLength: 0x09
bDescriptorType: 0x02
wTotalLength: 0x0029 -> Validated
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0x80 -> Bus Powered
MaxPower: 0xFA = 500 mA
===>Interface Descriptor<===
bLength: 0x09
bDescriptorType: 0x04
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x03 -> HID Interface Class
bInterfaceSubClass: 0x00
bInterfaceProtocol: 0x00
iInterface: 0x04
English (United States) "USB_HID0"
===>HID Descriptor<===
bLength: 0x09
bDescriptorType: 0x21
bcdHID: 0x0111
bCountryCode: 0x00
bNumDescriptors: 0x01
bDescriptorType: 0x22 (Report Descriptor)
wDescriptorLength: 0x0021
===>Endpoint Descriptor<===
bLength: 0x07
bDescriptorType: 0x05
bEndpointAddress: 0x81 -> Direction: IN - EndpointID:
1
bmAttributes: 0x03 -> Interrupt Transfer Type
wMaxPacketSize: 0x0009 = 0x09 bytes
bInterval: 0x01
===>Endpoint Descriptor<===
bLength: 0x07
bDescriptorType: 0x05
bEndpointAddress: 0x01 -> Direction: OUT - EndpointID:
1
bmAttributes: 0x03 -> Interrupt Transfer Type
wMaxPacketSize: 0x0009 = 0x09 bytes
bInterval: 0x10
Jens schrieb: > Wir haben keinen externen PHY. Zur Info im angehängten RTE_device ist > der Hacken on chip phy ausgewählt, ich hatte gelesen das es nur einen > externen phy braucht wenn ich auf 480Mbs kommen will oder brauchen wir > einen externen? OK du willst doch aber ein HiSpeed Device oder? HS ist immer 480Mbit. Was dein Gerät abliefert ist eine ganz normale FS Verbindung(12MBit). Ich kenne deinen Chip jetzt nicht im Detail, aber zumindest kommt deine Verbindung ja erst mal durch die Enum. Die Deskriptoren sehen auch passend aus. Es gibt auf USB.org einige HID Testtools. Die sind zwar teilweise schon alt, aber zumindest kannst du damit die Konformitätstests machen. Wie sieht dein HID Report aus? Passt die Länge von 0x21 Bytes? Das Problem kann durchaus auch vom Phyton Tool kommen. Ich gehe davon aus die Keil middleware in Ordnung ist. Ev reicht es ja schon die API in RTE auf fullspeed zu setzen da du ja HS nicht brauchst. Thomas
Auch wenn es etwas spät ist, das Problem war, dass das OS in den Sleep mode gegangen ist, wenn gerade kein thread aktiv war. Danke nochmal für die Bemühungen
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.




