Forum: Mikrocontroller und Digitale Elektronik Keil USB RTE OTG HS Device /Window Fehler beim anfordern einer Gerätebeschreibung


von Jens (Gast)


Angehängte Dateien:

Lesenswert?

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

von Thomas Z. (usbman)


Lesenswert?

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

von Jim M. (turboj)


Lesenswert?

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?

von Jens (Gast)


Lesenswert?

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

von Jens (Gast)


Lesenswert?

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

von Thomas Z. (usbman)


Lesenswert?

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

von Jens (Gast)


Lesenswert?

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

von Thomas Z. (usbman)


Lesenswert?

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

von Jens (Gast)


Lesenswert?

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