Hallo,
ich möchte gerne in meinem Programm ein VCP integrieren. Da ich noch
recht unwissend bin hoffe ich auf eine schnelle Lösung und etwas
Verständnis falls ich etwas unbeholfen bin.
Und zwar geht es um den STM32F105, sowie STM32F205 stehen beide zur
Verfügung. Die Platine ist selbst entwickelt (mit 8MHz Quarz). Zurzeit
ist es so, dass ich das Programm mittels CubeMX generiert habe und
einfach nur möchte, dass der PC die USB Schnittstelle als VCP erkennt.
Im Gerätemanager wird leider nur ein "Unbekanntes USB-Gerät angezeigt.
(Fehler beim Anfordern der Gerätebeschreibung - Code 43 - VID / PID sind
verkehrt).
Ich vermute keinen Hardware Fehler auf der Platine, da diese mit einem
STM32F072 ohne Probleme funktioniert. Der Unterschied zwischen den
Mikrocontrollern STM32F072 und STM32F105/205 liegt in Bezug auf die USB
Schnittstelle darin das der STM32F072 nur "USB" und der STM32F105/205
"USB OTG (on the Go)" hat.
Im Cube MX habe ich die USB Schnittstelle wie folgt eingestellt:
Connectivity --> USB_OTG_FS --> Mode --> Device_Only
Middleware --> USB_Device --> Class For FS IP --> Communication Device
Class (VCP)
Weitere Einstellungen im Cube MX
System Core
-->GPIOs entsprechend konfiguriert
-->RCC --> HSE --> Crystal/Ceramic Resonator
-->SYS --> Debug --> JTAG 5 Pins
In der Clock Configuration habe ich den 8MHz Quarz eingetragen und den
Rest automatisch einstellen lassen.
Hat jemand eine Idee wo das Problem liegen könnte?
Mike schrieb:> (Fehler beim Anfordern der Gerätebeschreibung - Code 43
Dann sollte man di Basiscs (Spannung, Takt, Pinbelegung) prüfen.
Code 43 sagt erstmal nur das er überhaupt keine Daten von dem USB Gerät
erhalten konne (deshalb auch die flaschen VID/PID).
Falls an D+ ein Pullup angeschlossen ist, funktioniert das USB
Peripherial vermutlich noch gar nicht.
Mike schrieb:> In der Clock Configuration habe ich den 8MHz Quarz eingetragen
Hast du auch einen 8Mhz Quarz angeschlossen? Kontrolliere in der
Diagramm-Ansicht für die Takt-Konfiguration, ob irgend etwas rot ist.
Manchmal versagt die Automatik, die Fehler werden dann farblich
hervorgehoben.
Mike schrieb:> ich möchte gerne in meinem Programm ein VCP integrieren. Da ich noch> recht unwissend bin hoffe ich auf eine schnelle Lösung
Die schnelle Lösung gibt es nicht - es sei denn, jemand hat das alles
bereits vor dir getan und läßt dich an seinen Ergebnissen teilhaben. Ich
nicht, denn mit den TM32F105 oder 205 habe ich mich bislang nicht
befaßt.
Aber du kannst ja mal das Referenzmanual zu deinen Chips zu Rate ziehen
und die betreffenden Kapitel über den USB mit dem entsprechenden Kapitel
im Manual zum STM32F103 vergleichen - und dann deine eigenen Schlüsse
draus ziehen.
So etwa würde ich an deiner Stelle vorgehen.
W.S.
W.S. schrieb:> Aber du kannst ja mal das Referenzmanual zu deinen Chips zu Rate ziehen> und die betreffenden Kapitel über den USB mit dem entsprechenden Kapitel> im Manual zum STM32F103 vergleichen
Die sind komplett unterschiedlich. Die "OTG" Peripherie ist sehr viel
komplexer als die einfache "USB" Peripherie.
Niklas G. schrieb:> Die sind komplett unterschiedlich.
Nun, OTG und simples Device sind oftmals zwei völlig verschiedene
Peripherie-Cores.
Aber wenn das so ist bei diesem µC, dann ist für den TO ne richtige
Eigenentwicklung angesagt. Muß er sich eben in die Thematik einarbeiten.
W.S.
Egal ob normal USB oder OTG, der code der von Cube MX erzeugt wird
stellt zumindest in so weit funktionalität her, dass das Gerät als VCP
erkannt wird.
Sicher das auf der Hardware Siete alles passt? Kein kurzschluss beim
löten des steckers o.ä.?
W.S. schrieb:> Das zuständige RefManual ist das RM0008 und das gilt lt. ST dafür:> STM32F101xx, STM32F102xx, STM32F103xx, STM32F105xx, STM32F107xx> Also, es sollte ja wohl doch gehen!!!
Du hast übersehen, dass es zwei separate Kapitel für die beiden
grundsätzlich unterschiedlichen USB Cores hat.
W.S. schrieb:> Hehe, hab grad bei ST geschaut:>> Das zuständige RefManual ist das RM0008> und das gilt lt. ST dafür:> STM32F101xx,> STM32F102xx,> STM32F103xx,> STM32F105xx,> STM32F107xx>> Siehe:> https://www.st.com/en/microcontrollers-microprocessors/stm32f105-107.html#>> Also, es sollte ja wohl doch gehen!!!
Nö, du hast einfach mal wieder garkeine Ahnung von garnichts!
Es ist immer dasselbe mit dir.
Du weist ja nichtmal wie ST "Datasheet" und "Referencemanual" aufbaut
und trennt.
Aber du willst mal wieder mitreden!
Im RefMan steht alles was die angegebenen STM32 haben KÖNNTEN!
Was diese dann wirklich haben steht im Datenblatt.
Und was steht da beim F105? -> "USB OTG FS"
Ein "Universal serial bus full-speed device interface (USB)" hat der
F105 nicht, sondern nur der F103.
Beim F105 sind sogar USB und CAN gleichzeitig nutzbar.
Mike schrieb:> Ich vermute keinen Hardware Fehler auf der Platine, da diese mit einem> STM32F072 ohne Probleme funktioniert. Der Unterschied zwischen den> Mikrocontrollern STM32F072 und STM32F105/205 liegt in Bezug auf die USB> Schnittstelle darin das der STM32F072 nur "USB" und der STM32F105/205> "USB OTG (on the Go)" hat.
Das sind eben 2 komplett unterschiedliche Blöcke ;)
Aber zeig doch mal bitte trotzdem einen Schaltplan, das Layout und ein
Foto des Aufbaus.
Vor allem vermischt du hier F105 und F205.
Welchen von den beiden hast du denn?
Beim F105 hat der USB OTG noch 1,25kb exklusiven SRAM, aber der USB OTG
des F205 hat das nicht.
Daher vermute ich da einen Unterschied, aber dazu müsste ich nochmal
genauer in die Registerbeschreibung gucken.
Danke erst einmal für die vielen Rückmeldungen.
Ich habe euch nochmal ein Auszug des Schaltplans der Platine angehängt,
sowie die aktuelle clock configurtation.
Soweit ich das erkennen kann habe ich den Quarz angeschlossen und in der
clock configuration alles richtig eingestellt, es werden keine Fehler
angezeigt. Auch die Hardware habe ich nochmals gecheckt, soweit alles in
Ordnung, kein Kurzschluss o.ä..
Fällt euch auf den Anhängen etwas auf?
Mach mal zur Probe die Kondensatoren an den USB Leitungen weg.
Du könntest den HSE Takt mal auf MCO1 oder MCXO2 ausgeben um zu
kontrollieren, ob die Frequenz stabil ist und stimmt.
Oder ganz banal: lasse eine LED blinken und kontrolliere, ob sie
regelmäßig und mit der richtigen Frequenz blinkt.
Der externe Pull-Up Widerstand ist nicht nötig, ich vermute sogar, dass
er weg muss. Zitat aus dem Referenzhandbuch:
"DP/DM integrated pull-up and pull-down resistors controlled by the
OTG_FS core depending on the current role of the device."
Mit den 22pF Kondis hat das mit einem F072 funktioniert?
Durchaus interessant, laut ST brauchts diese nicht.
Wenn du angst hast dir den STM32 durch ESD aus dem USB Kabel zu grillen,
dann nimm TVS Dioden für USB.
Die gibts im SOT23-6/TSOP6, Datenpaar rein, Datenpaar raus sowie
VCC/GND.
Beispiel:
https://www.mouser.de/ProductDetail/Nexperia/IP4234CZ6125?qs=sSXnapcmqSskfgXn%2F9aKzA==
Diese verbau ich immer.
Die 22R können mit dieser TVS auch weg, die sind integriert.
Dein Gerät ist USB powered nehm ich mal an?
Ansonsten wärs noch empfehlenswert die 5V USB an den VUSB Pin des STM32
zu legen. Wenn er 5V tolerant ist, dann direkt sonst per
Spannungsteiler.
Der Widerstand an DP ist im STM32 integriert, also lass den weg.
Das USB Device muss inenrhalb eines kurzen Zeitfensters antowrten wen
der Pull vom Host erkannt wurde und wenn deine Software dann noch nicht
so weit ist dann is essig.
Das Quarz braucht durchaus etwas Zeit zum anschwingen und die PLL zum
Einrasten.
Ansonsten fliegen die Boot0/Boot1 Pins ind er Luft rum, das ist auch
nicht gut.
Belege die bitte mit GND oder 3,3V.
Boot0/1 -> GND für den Start aus dem Flash.