STM32 USB Device wird nicht immer erkannt

OP #5788311
Hallo,

Ich habe ein Board (Schaltplan mit relevantem Teil im Anhang) bei dem 
das USB Device (USB CDC) nur richtig erkannt wird (am Windows PC, 
verschiedene probiert) wenn ich das USB Kabel vor der externen 
Stromversorgung anstecke. Dann wird der virtuelle serielle Port richtig 
erkannt.

Lege ich allerdings erst die externe Spannung an und stecke dann das USB 
Kabel ein bekomme ich die Meldung, dass das USB Gerät nicht erkannt wird 
(failed getting device descriptor).

Den Code habe ich mittels CubeMX erzeugt.

Woran kann das liegen?

Danke,
Stefan
Angehängte Dateien:
Gast
Ist auch richtig so.... Wenn zuerst die Versorgungsspannung da ist, 
läuft der Controller unter Umständen schon durch einen Teil der 
Initalisierung, der aber zu Erkennung notrwendig wäre.

Mein Tipp: Versuche die Verbindung mit dem USB-Kabel zu erkennen (durch 
abfrage der dort vorhandenen Bertiebsspannung), dann ist gewärhleistet, 
daß die Initalisierung erst beginnt, wenn das Kabel sicher steckt.
OP
Gerade gesehen, habe vergessen zu schreiben, dass es sich um einen 
STM32F072 handelt. Der hat keine VBUS Detection und hat den D+ Pullup 
integriert.

Ich habe mir gedacht, dass der USB Controller im STM32 schlau genug 
dafür ist, oder zumindest die HAL Library den USB Controller dann zu 
initialisieren wenn irgendwas auf den USB Datenleitungen erkannt wird.

Gibt es auf Software-Ebene einen workaround?
T. F. schrieb:
> Gibt es auf Software-Ebene einen workaround?

Ja, unter Ausnutzung des USB Reset.
Man initialisiert den USB als Reaktion auf eine fallende Flanke auf der 
D+ Leitung.

Falls das mehr als 100ms dauern könnte, legt man in der Zwischenzeit 
dieses Signal auf GND (Pin als GPIO out programmieren).
Gast
T. F. schrieb:
> Ich habe mir gedacht, dass der USB Controller im STM32 schlau genug
> dafür ist, oder zumindest die HAL Library den USB Controller dann zu
> initialisieren wenn irgendwas auf den USB Datenleitungen erkannt wird.

Zumindest ist das der Fall beim STM32L073. Da kann ich das Board zuerst 
in betrieb nehmen und das USB Kabel irgendwann später anstecken (auch 
mehrmals).
Gast
STM32 schrieb im Beitrag #5788337:
> Ist auch richtig so.... Wenn zuerst die Versorgungsspannung da ist,
> läuft der Controller unter Umständen schon durch einen Teil der
> Initalisierung, der aber zu Erkennung notrwendig wäre.

Das ist Unsinn - es sei denn, man hat die ganze Firmware eher 
eigenwillig geschrieben.

Also: Die Initialisierung soll die Peripherie anwerfen, was für den 
USB-Core heißt, daß dieser seinen Takt kriegen muß und ggf. 
eingeschaltet werden muß, daß weiters die Pins wenn nötig auf 
USB-Funktion gestellt werden müssen, daß je nach verbautem USB-Core die 
Zeiger auf die Speicherbereiche eingestellt werden müssen und daß das 
Interruptsystem eingeschaltet wird, so daß die SIE den nötigen Handler 
aktivieren kann.

Das war's.

Alles Weitere wird vom Host veranlaßt und geht über den 
Interrupthandler, der auf Geheiß des Hosts dann auch die eigentlichen 
Interface-Funktionen initialisiert. Deshalb kann die 
Lowlevel-Initialisierung schon Ewigkeiten vor dem Anstecken des Kabels 
passiert sein.

Und der Trick, bei eingebautem 1k5 das D+ Bein mit Gewalt erstmal auf 
low zu ziehen, gilt nur, wenn man sich beim Einstecken des Kabels und 
Betrieb des µC aus VBUS nach dem Reset erstmal eine Ewigkeit an 
anderweitigem Krempel aufhält, bevor man den USB anwirft.


W.S.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 7 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.