Forum: Mikrocontroller und Digitale Elektronik stm32cube und USB


von MeinerEiner (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich versuche vergeblich, eine USB Verbindung mit meinem stm32f205 
aufzubauen. Was mache ich falsch?

Mein Schaltplan (eigenes Board): siehe Anhang "HW_USB.png".
Meine Konfiguration in CubeMX: siehe Anhang "CubeMX_USB.png"

In dem von CubeMX erzeugten Projekt (ich benutze Keil) habe ich sonst 
nichts verändert. Ich habe einfach nur auf "Rebuild" geklickt (lief ohne 
Fehlermeldungen durch) und das Projekt anschließend geflasht (ebenfalls 
fehlerfrei). Natürlich macht das Projekt nichts (kein Inhalt), aber ich 
hatte erwartet, dass wenigstens eine Verbindung zum Host erfolgreich 
aufgebaut wird.

Stattdessen meldet der Host (Win 7, Treiber 
[STM32_USB-Host-Device-Lib_V2.2.0] von STM sind installiert):
"USB Gerät wurde nicht erkannt"

(VID und PID werden zu "0000" angegeben)


Warum funktioniert das nicht? Ich habe CubeMX so verstanden, dass es für 
"Doofe" ist. Also habe ich das Tool ganz "doof" bedient - aber nichts 
funktioniert. Jetzt bin ich seit mehreren Stunden auf Fehlersuche und 
grabe mich in die Details ein... wenn ich das machen muss, brauche ich 
dann aber irgendwann kein CubeMX mehr.

Oder liegt mein Fehler in der Hardware? Habt ihr eine Idee?

von Jim M. (turboj)


Lesenswert?

MeinerEiner schrieb:
> Stattdessen meldet der Host (Win 7, Treiber
> [STM32_USB-Host-Device-Lib_V2.2.0] von STM sind installiert):
> "USB Gerät wurde nicht erkannt"

Welcher Fehlercode kommt?

MeinerEiner schrieb:
> (VID und PID werden zu "0000" angegeben)

Was steht im Device Deskriptor drin? VID und PID muss man normalwerweise 
für eigene Projekte anpassen.

Übrigens sieht Dein USB Anschluss verdächtig aus, als ob VBUS und GND 
vertauscht sind. Mess da mal nach.

von Arc N. (arc)


Lesenswert?

Jim M. schrieb:
> Was steht im Device Deskriptor drin? VID und PID muss man normalwerweise
> für eigene Projekte anpassen.

Kommt drauf an welche Klasse in CubeMX ausgewählt wurde. Bei den 
Standardklassen (CDC, HID, DFU, etc) gibt CubeMX STs VID und 
entsprechende PIDs vor.

@TO:
Was ist in CubeMX unter Pinout ausgewählt und was unter Configuration 
(unter Middlewares, USB)? In der Default-Einstellung ist die USB-Klasse 
ausgeschaltet...
Was ist in Pinout, Peripherals, USB_OTG_FS für ein Modus ausgewählt? 
Device only, Host, OTG?

: Bearbeitet durch User
von MeinerEiner (Gast)


Lesenswert?

Jim M. schrieb:
> Welcher Fehlercode kommt?

Wie finde ich den heraus? Es kommt halt die oben beschriebene 
Fehlermeldung und mein STM32 Board wird unter den angeschlossenen 
Geräten als "unknown device" gelistet.



Jim M. schrieb:
> Was steht im Device Deskriptor drin?

Ich habe die Vorgabe von STM drin gelassen: VID = 1155 und PID = 22336.



Jim M. schrieb:
> Übrigens sieht Dein USB Anschluss verdächtig aus, als ob VBUS und GND
> vertauscht sind.

Laut Datenblatt des USBLC6-2 ist Pin 2 = GND und Pin 5 = VBus. So habe 
ich es auch beschaltet und es sollte daher passen. Oder wie meinst Du 
Deinen Hinweis?

von MeinerEiner (Gast)


Angehängte Dateien:

Lesenswert?

Arc N. schrieb:
> Was ist in CubeMX unter Pinout ausgewählt und was unter Configuration
> (unter Middlewares, USB)?

Die Einstellungen unter Pinout habe ich angehängt. Unter 
Middlewares->USB finde ich kein Pinning, aber falls Du das unter 
Connectivity->USB_FS meinst: das passt zu dem unter Pinout (siehe 
Eröffnungspost).



Arc N. schrieb:
> Was ist in Pinout, Peripherals, USB_OTG_FS für ein Modus ausgewählt?
> Device only, Host, OTG?

Device_only.


Sollte alles passen, oder? Hmm... Das Board selbst läuft übrigens 
natürlich auch ("Hello World" funktioniert).

von Christoph (gizmo)


Lesenswert?

Ein Schuss ins Blaue aber was hast du als Stack und Heapsize im Projekt?

Die alte USB-Lib der Standard Peripheral Library benötigte mindestends 
0x2000 Stack und 0x4000 Heap, wird bei CubeMX das selbe sein.

von Arc N. (arc)


Lesenswert?

MeinerEiner schrieb:
> Sollte alles passen, oder? Hmm... Das Board selbst läuft übrigens
> natürlich auch ("Hello World" funktioniert).

Sieht passend aus

Jim M. schrieb:
> Übrigens sieht Dein USB Anschluss verdächtig aus, als ob VBUS und GND
> vertauscht sind.

Könnte der Fehler sein...
PA12 = D+
PA11 = D-

Usb:
1 = VBUS, 2 = D-, 3 = D+, 4 = ID, 5 = GND
bzw.
1 = VBUS, 2 = D-, 3 = D+, 4 = GND

Andere Fehlerquelle: Passt der externe Takt bzw. falls Quarz, schwingt 
der an

: Bearbeitet durch User
von MeinerEiner (Gast)


Lesenswert?

Christoph S. schrieb:
> Die alte USB-Lib der Standard Peripheral Library benötigte mindestends
> 0x2000 Stack und 0x4000 Heap, wird bei CubeMX das selbe sein.

Ah ja, guter Hinweis, danke! Ich hab beides auf 0x4000 erhöht. Leider 
funktioniert es aber immer noch nicht.



Arc N. schrieb:
> 1 = VBUS, 2 = D-, 3 = D+, 4 = GND

Ach so. Das ist einfach eine Jumperleiste, an der ich mein USB-Kabel 
angelötet habe. Am USB-Steckverbinder, der in den Host gesteckt wird, 
stimmt die Verkabelung. Dennoch danke für den Hinweis.

von MeinerEiner (Gast)


Lesenswert?

Arc N. schrieb:
> Andere Fehlerquelle: Passt der externe Takt bzw. falls Quarz, schwingt
> der an

Ich habe über den System Timer eine LED blinken lassen -> die Frequenz 
passt.

von MeinerEiner (Gast)


Lesenswert?

Hat noch jemand eine Idee?

von Hmm... (Gast)


Lesenswert?

Wireshark kann zumindest unter Linux auch USB dekodieren, was steht denn 
in den ersten vier oder fünf diskriptoren die ausgetauscht werden drin?

von Mehmet K. (mkmk)


Lesenswert?

MeinerEiner schrieb:
> Device_only.

Mit dem USBLC6-2 hatte ich auch mal so meine Probleme.
Ich fand dann im Netz diese für mich nachvollziehbare Erklaerung:

USBLC6-4 and USBLC6-2 are wrong options for USB Device protection.
These parts are good for Host downstream port protection, but never use 
them for Device upstream port protection.

TVS diodes array which has "high-side" diodes, like PRTR5V0U2X, USBLC6-4 
and USBLC6-2 are good for USB host port.
But this array causes trouble described by the OP on USB device and OTG 
ports.

Edit: Soweit ich mich erinnere (liegt schon ein paar Jahre zurück),  war 
mein Problem aber nicht die USB-Anbindung an sich, sondern ich konnte 
wegen des USBLC6-2 das Aus- und wieder Einstecken nicht erkennen und 
musste in Software pollen.

: Bearbeitet durch User
von MeinerEiner (Gast)


Angehängte Dateien:

Lesenswert?

Okay, nach einer langen Odyssee hat sich herausgestellt, dass Cube den 
Takt falsch eingestellt hat.

Eigentlich war er gar nicht falsch, denn die 48 MHz Domain für USB wurde 
schon mit der richtigen Frequenz getaktet. Aber scheinbar mochte der 
Controller die PLL Kombination nicht. Möglicherweise steht das sogar 
irgendwo in den Tiefen des Datenblatts, nur habe ich das natürlich nicht 
gelesen, da Cube ja alles automatisch einstellt. Oder auch nicht. 
Jedenfalls frage ich mich, was Cube mir bringt, wenn ich am Ende ein 
Vielfaches ins Debugging investiere, als was ich fürs selbst 
programmieren gebraucht hätte.

So wie im Anhang gezeigt funktioniert es übrigens.

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.