Forum: Mikrocontroller und Digitale Elektronik USB-Sticks an STM32


von Michael (Gast)


Lesenswert?

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

von Jim M. (turboj)


Lesenswert?

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.

von Michael (Gast)


Lesenswert?

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

von Potter (Gast)


Lesenswert?

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