Hallo zusammen, wir haben hier ein Design mit dem STM32 entwickelt, welches die USB-Host-Lib v2.1 von STM verwendet. Compiler ist der GCC. Leider funktionieren ca. 1/3 der hier rumliegenden USB-Sticks damit nicht. Es scheint laut Debugger schon bei der grundsätzlichen Initialisierung, also weit vor dem Auslesen des Dateisystems einen Timeout zu geben. Vom Routing her haben wir ca. 3 cm vom Controller zur USB-Buchse. Die beiden Leitungen werden durchgehend parallel geführt, direkt darunter ist eine durchgänge GND-Plane auf der Innenlage, rechts und links sind die Signale auch von Masse eingeschlossen, keine weiteren Signale/Leiterbahnen laufen parallel dazu. Auf Impedanzanpassung aufgrund der kurzen Leitung haben wir erstmal nicht geachtet. Mit dem Oszi angeschaut sehen die Signale sauber aus, ohne Überschwinger und irgendwelche Anzeichen von Reflexionen. In Serie zu den Datenleitungen sind 2x 33R. Aber auch Ersatz mit 0R ändert das Verhalten nicht. Die 5V sind während der Initialisierung stabil. Auch zusätzliche Kapazität (220µF) direkt an der Buchse ändert nichts. Bei allen Sticks (funktionierende und nichtfunktionierende) wird die Verbindung laut Debugger mit Fullspeed aufgebaut. Ein Zurückschalten auf Lowspeed habe ich auch bei den funktionierenden Sticks erstmal nicht hinbekommen, dann geht gar nichts mehr. Sonstige Ideen? Michael
Michael schrieb: > Es scheint laut Debugger schon bei der grundsätzlichen Initialisierung, > also weit vor dem Auslesen des Dateisystems einen Timeout zu geben. Viel zu ungenaue Fehlerbeschreibung. Mit dem Debugger müsste man rausbekommen, was genau nicht klappt. Eventuell lohnt es sich die Deskriptoren der Sticks genauer unter die Lupe zu nehmen. Michael schrieb: > Ein Zurückschalten auf > Lowspeed habe ich auch bei den funktionierenden Sticks erstmal nicht > hinbekommen Mal die USB Specs gelesen? Das Device entscheidet ob Full- oder Lowspeed, nicht der Host.
Hallo, ist etwas schwierig zu debuggen, weil das Debuggen selbst scheinbar timeouts auslöst. Kennst Du Dich mit der USB-Lib von ST aus? Der interne Fehler ist USBH_BUSY, nachdem die Statemachine einige Male hin- und her kommuniziert hat. Ich habe den Verlauf mal in einem Array aufgezeichnet:
1 | "phost->gState" HOST_CLASS |
2 | "phost->Control.state" CTRL_IDLE |
3 | "phost->EnumState" ENUM_DEV_CONFIGURED |
4 | "StateCnt" 32 |
5 | "StateMem" 0x200064e4 |
6 | [0...99] |
7 | StateMem[0] CTRL_SETUP |
8 | StateMem[1] CTRL_SETUP_WAIT |
9 | StateMem[2] CTRL_DATA_IN |
10 | StateMem[3] CTRL_DATA_IN_WAIT |
11 | StateMem[4] CTRL_STATUS_OUT |
12 | StateMem[5] CTRL_STATUS_OUT_WAIT |
13 | StateMem[6] CTRL_SETUP |
14 | StateMem[7] CTRL_SETUP_WAIT |
15 | StateMem[8] CTRL_DATA_IN |
16 | StateMem[9] CTRL_DATA_IN_WAIT |
17 | StateMem[10] CTRL_STATUS_OUT |
18 | StateMem[11] CTRL_STATUS_OUT_WAIT |
19 | StateMem[12] CTRL_SETUP |
20 | StateMem[13] CTRL_SETUP_WAIT |
21 | StateMem[14] CTRL_STATUS_IN |
22 | StateMem[15] CTRL_STATUS_IN_WAIT |
23 | StateMem[16] CTRL_SETUP |
24 | StateMem[17] CTRL_SETUP_WAIT |
25 | StateMem[18] CTRL_DATA_IN |
26 | StateMem[19] CTRL_DATA_IN_WAIT |
27 | StateMem[20] CTRL_STATUS_OUT |
28 | StateMem[21] CTRL_STATUS_OUT_WAIT |
29 | StateMem[22] CTRL_SETUP |
30 | StateMem[23] CTRL_SETUP_WAIT |
31 | StateMem[24] CTRL_DATA_IN |
32 | StateMem[25] CTRL_DATA_IN_WAIT |
33 | StateMem[26] CTRL_STATUS_OUT |
34 | StateMem[27] CTRL_STATUS_OUT_WAIT |
35 | StateMem[28] CTRL_SETUP |
36 | StateMem[29] CTRL_SETUP_WAIT |
37 | StateMem[30] CTRL_STATUS_IN |
38 | StateMem[31] CTRL_STATUS_IN_WAIT |
Bei State 31 entsteht dann der Fehler USBH_BUSY. Michael
Michael schrieb: > Ein Zurückschalten auf > Lowspeed habe ich auch bei den funktionierenden Sticks erstmal nicht > hinbekommen, dann geht gar nichts mehr. Weil Dein MSD Bulk-Transfer verwendet - also >= Full-Speed.
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.