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?
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.
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
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?
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).
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.
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
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.
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.
Wireshark kann zumindest unter Linux auch USB dekodieren, was steht denn in den ersten vier oder fünf diskriptoren die ausgetauscht werden drin?
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.