STM32L4 USB-Gerät mit VBUS-Erkennung

Ich versuche, die von CubeMX generierte CDC-Beispielanwendung auf dem STM32l475VG-IoT-Board zum Laufen zu bringen .

Indem ich einem Dokument von ST Community folgte, konnte ich die Uhrkonfiguration richtig machen und die CDC-Anwendung ohne VBus-Erkennung funktioniert einwandfrei. Ich habe MSE verwendet, das von LSE getrimmt wurde, wie im Dokument vorgeschlagen.

Ich möchte jedoch dieselbe Anwendung mit derselben Taktkonfiguration auf derselben Entwicklungsplatine mit eingeschaltetem VBus Sensing ausführen , und es funktioniert überhaupt nicht. Diesmal wird das Gerät vom PC gar nicht gesehen.

Wenn VBus Sensing eingeschaltet ist, wird nicht einmal der HAL_PCD_IRQHandler beim Verbinden ausgelöst.

Ich brauche VBus Sensing, da wir in meiner realen Anwendung den uC in einem Gerät mit eigener Stromversorgung verwenden.

Ich probiere all diese Experimente unter der Annahme aus, dass HW auf dem Entwicklungsboard VBus Sensing ohne Weiteres unterstützt, da ich anhand der Datenblätter nicht lesen kann, dass HW-Änderungen erforderlich sind.

Kann man wirklich davon ausgehen, dass die Beispiel-USB-CDC-App mit aktivierter VBus-Erkennung funktionieren sollte, ohne die HW des Entwicklungsboards zu ändern?

Mit der im Dokument erwähnten Beschreibung habe ich das Gefühl, dass die VBus-Erkennung aus einem ganz bestimmten Grund absichtlich deaktiviert ist. Ist es, dass die Uhrkonfigurationen anders gemacht werden müssen, wenn es eingeschaltet ist?

Kann jemand bitte etwas Licht ins Dunkel bringen?

Hier fehlen Informationen: Was sind die genauen Unterschiede zwischen dem VBUS-Erkennungsdesign (das nicht funktioniert) und dem Nicht-VBus-Erkennungsdesign (das funktioniert, wie Sie es beschreiben)? Steht es in deinem Code? Liegt es an der Board-Jumper-Konfiguration? Liegt es an der Art und Weise, wie Sie Ihr Board mit Strom versorgen? Übrigens, wie wird das Board mit Strom versorgt und wie sind die Jumper-Konfigurationen?
Eigentlich versorge ich das Board in beiden Fällen, in denen VBus aktiviert und deaktiviert ist, über ST-Link mit Strom, aber ich werde versuchen, was Ali Chen vorschlägt.
Wie ich zu Ali Chens Antwort kommentierte, ist es im Grunde ein Problem mit BCDund nicht mit VBus Sensing. Das Problem ist, dass immer, wenn VBus Sensinges in CubeMX aktiviert ist, BCDautomatisch auch aktiviert wird. Ich konnte jedoch eine funktionierende Anwendung ausführen, bei der nur VBus Sensingaktiviert war.

Antworten (1)

Die VBUS-Erkennung ist ein Muss für eine Slave-USB-Schnittstelle mit eigener Stromversorgung, um eine Drive-Back-Spannung auf dem D+-Kabel zu verhindern, bis das uB-Kabel eingesteckt und VBUS vorhanden ist. Das hat nichts mit Uhren zu tun, Uhren sollten in beiden Fällen keinen Unterschied haben.

Das STM32L4 Discovery Kit ist ein ziemlich anspruchsvolles IoT/SoC-Gerät. Es hat viele Optionen, komplexe OTG-USB-Funktion, batteriebetrieben, selbstversorgt, ST-LINK-betrieben usw. Damit die VBUS-Erkennung funktioniert, sollten sich zumindest keine Jumper im JP4 2X5-Header befinden, und das USB_OTG_FS_VBUS-Erkennungssignal ist bereits verdrahtet in. Das einzige, was seltsam aussieht - VBUS hat +5 V und geht ohne Pegelübersetzung direkt zum GPIO der Niederspannungs-MCU. Könnte 5V-tolerant sein, aber seltsam.

Das Problem liegt also wahrscheinlich in der Softwarekonfiguration, die den USB_OTG_FS_VBUS-Pin verarbeitet und den USB-Stack aktiviert.

Tatsächlich habe ich mich tiefer mit diesem Thema beschäftigt. Es scheint, dass, wenn ich VBus Sensing in CubeMX aktiviere, es auch BCD (Battery Charger Detection) aktiviert. Ich habe BCD danach manuell deaktiviert und der generierte Code (wo nur VBus aktiviert und BCD deaktiviert ist) scheint gut zu funktionieren. Ich konnte das bestätigen USBD_LL_DevConnectedund USBD_LL_DevDisconnectedRückrufe werden beim Verbinden/Trennen des Geräts ordnungsgemäß aufgerufen. Mit diesen Ergebnissen scheint es wirklich ein Problem mit BCD zu sein.
Ich habe versucht, den J4-Jumper zu entfernen, wie Sie erwähnt haben, aber es macht keinen Unterschied.