Forum: Mikrocontroller und Digitale Elektronik USB Anbindung an STM32


von Max (Gast)


Lesenswert?

Hi,

ich möchte ein USB-B mit Shield, GND, D+, D-, VBUS mit meinen 
STM32F413VG verbinden.

Ich habe bisher noch keine USB Programmierung gemacht, möchte dieses 
aber schonmal einplanen.

Ich habe D+ und D- jeweils in Serie mit einem USBLC6 und 22Ohm mit dem 
µC verbunden.

GND habe ich mit einen 1M Widerstand parallel zu einem 4,5nF Kondensator 
mit dem Shield verbunden.

Die Frage die sich mirjetzt stellt, was ich mit den übrigen Pins machen, 
als da wären: USB_FS_SOF, USB_FS_VBUS und USB_FS_ID.

ID und SOF hat die USB-B Buchse nicht. Auf Seite 204 des Datenblatts 
finden sich Beschaltungsbeispiele.
http://www.st.com/resource/en/datasheet/stm32f413vg.pdf

Die scheinen mir aber sehr abstrakt. Ich möchte den USB Anschluss nur 
als USB Device benutzen, z.B. Bootloader, Gerätekonfiguration (COM).

Ich möchte die 5V vom USB eigentlich nicht benutzen. Beim Atxmega konnte 
ich die Leitung einfach floaten lassen.

Danke euch für Ratschläge.

von Stefan F. (Gast)


Lesenswert?

> GND habe ich mit einen 1M Widerstand parallel zu einem
> 4,5nF Kondensator mit dem Shield verbunden.

Meinst du nicht, dass die Abschirmung direkt mit GND verbunden werden 
soll? So ist das jedenfalls bei all meinen Geräten.

von Max (Gast)


Lesenswert?

Ich habe alle möglichen Varianten gesehen. Direkt mit GND verbinden, mal 
mit Ferrit, mal meine Kombi.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Angehängte Dateien:

Lesenswert?

Es schadet sicher nicht, sich mal anzuschauen, wie die Jungs von ST das 
auf den Discovery Boards lösen.
Bild 1 zeigt den Anschluss des Boardcontrollers mit der Mini-USB Buchse. 
Bild2 den Micro USB-OTG, auf den STM32F407.

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Max schrieb:
> Die Frage die sich mirjetzt stellt, was ich mit den übrigen Pins machen,
> als da wären: USB_FS_SOF, USB_FS_VBUS und USB_FS_ID.

Da schau doch mal die Schaltpläne auf den Seiten 1115ff. im Reference 
Manual an. SOF ist ein optionaler Output zur Synchronisierung, braucht 
man bei einfachen Geräten nicht.

Die USB-Peripherie ("OTG"-Modul) der STM32F4 ist recht kompliziert, wenn 
du klein anfangen möchtest könntest du z.B. einen STM32F103 mit dem 
einfacheren nur "USB" genannten Peripheriemodul nehmen. Für den ist auch 
mein ausführliches Tutorial: USB-Tutorial mit STM32

Matthias S. schrieb:
> Bild 1 zeigt den Anschluss des Boardcontrollers mit der Mini-USB Buchse.
Auch das ist ein STM32F103 - komplett anders als der F4!

Max schrieb:
> Ich möchte die 5V vom USB eigentlich nicht benutzen. Beim Atxmega konnte
> ich die Leitung einfach floaten lassen.
Kannst du. Es reicht, GND, DM und DP zu verbinden. Dazu musst du das 
FDMOD bzw. FHMOD Bit im OTG_GUSBCFG-Register setzen, sodass der 
Host/Device-Mode fix gesetzt wird, anstatt dass er via ID-Pin über das 
angesteckte Kabel vorgegeben wird. Außerdem muss das VBDEN Bit im 
OTG_GCCFG Register auf 0 bleiben, damit der VBus Eingang ignoriert wird.

: Bearbeitet durch User
von Max (Gast)


Lesenswert?

Niklas G. schrieb:
> Die USB-Peripherie ("OTG"-Modul) der STM32F4 ist recht kompliziert, wenn
> du klein anfangen möchtest könntest du z.B. einen STM32F103 mit dem
> einfacheren nur "USB" genannten Peripheriemodul nehmen. Für den ist auch
> mein ausführliches Tutorial: USB-Tutorial mit STM32

Bis auf USB ist der STM32F4 kein Problem und ich hab den gewählt, weil 
ich die 320kbyte Ram benötige.

Dann werde ich lediglich D-, D+ und GND verbinden. Sowie GND mit Shield 
über 1M und 4,5nF (Filter für Antennenwirkung).

Muss ich dann VBUS trotzdem mit meinem USBLC6 verbinden?

von Mampf F. (mampf) Benutzerseite


Angehängte Dateien:

Lesenswert?

Beim STM32F429 hatte ich die Schaltung im Anhang verwendet.

Bei mir sind +5V von USB zwar verwendet, aber eigentlich nur für den 
Pull-Up, der nach D+ geschaltet wird.

Den schaltbaren Pullup sollte man schon nutzen, sonst bekommt man blöde 
Fehler, wenn man zB den Controller zurücksetzt bei Debuggen und dann die 
erneute Enumerierung nicht funktioniert, weil es der Host nicht 
mitbekommen hat.

Ansonsten hab ich nur OTG D+ und D- und einen Pin zum Disconneten des 
Pullups verwendet.

Kann sein, dass die STM32F4 einen internen Pullup haben - glaube mal was 
darüber gelesen zu haben - der ist aber vom Widerstandswert ziemlich vom 
erforderlichen Wert weg, weshalb man den nicht benutzen sollte.

: Bearbeitet durch User
von Max (Gast)


Lesenswert?

Ja, der STM32F412VG soll alle nötigen Pullups oder Downs intern 
zuschaltbar haben, laut Datenblatt.

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Max schrieb:
> Bis auf USB ist der STM32F4 kein Problem und ich hab den gewählt, weil
> ich die 320kbyte Ram benötige.
Ok... Einige STM32L4 haben auch den einfachen "USB" Core aber 160 kB 
RAM, falls das in Frage kommt.

Mampf F. schrieb:
> Den schaltbaren Pullup sollte man schon nutzen, sonst bekommt man blöde
> Fehler, wenn man zB den Controller zurücksetzt bei Debuggen und dann die
> erneute Enumerierung nicht funktioniert, weil es der Host nicht
> mitbekommen hat.
Das geht auch ohne externen Pullup wunderbar...

Mampf F. schrieb:
> er ist aber vom Widerstandswert ziemlich vom
> erforderlichen Wert weg, weshalb man den nicht benutzen sollte.
Den GPIO-Pullup sollte man auch nicht verwenden...

Max schrieb:
> Ja, der STM32F412VG soll alle nötigen Pullups oder Downs intern
> zuschaltbar haben, laut Datenblatt.
Korrekt. Der wird automatisch eingeschaltet, kann man per SDIS bit im 
OTG_DCTL Register aus schalten. Laut S. 139 Datasheet ist der 1.5-2.1 
kΩ. Sollte also passen (1.5kΩ laut USB Spec) und kein externer Pullup 
ist nötig.

von Max (Gast)


Lesenswert?

Also dann probiere ich es folgendermaßen:

GND -> GND
Shield -> (4.5NF || 1M) -> GND
D+ -> USBLC6 -> 22 ohm -> STM32
D- -> USBLC6 -> 22 ohm -> STM32
VBUS -> USBLC6

von Mampf F. (mampf) Benutzerseite


Lesenswert?

Niklas G. schrieb:
> Mampf F. schrieb:
>> Den schaltbaren Pullup sollte man schon nutzen, sonst bekommt man blöde
>> Fehler, wenn man zB den Controller zurücksetzt bei Debuggen und dann die
>> erneute Enumerierung nicht funktioniert, weil es der Host nicht
>> mitbekommen hat.
> Das geht auch ohne externen Pullup wunderbar...

Ok, hatte nur gelesen, dass der interne USB-Pullup etwas weit vom 
erfoderlichen Wert weg ist, aber ich hab es nicht getestet.

Ich vermute, es würde sonst auch in den Erratas auftauchen.

Ganz ohne schaltbaren Pullup würde ich das nicht mehr machen ... Hatte 
Anfangs einfach fest einen Pullup dran und damit nur Probleme xD

> Mampf F. schrieb:
>> er ist aber vom Widerstandswert ziemlich vom
>> erforderlichen Wert weg, weshalb man den nicht benutzen sollte.
> Den GPIO-Pullup sollte man auch nicht verwenden...

Den meinte ich auch nicht ... Schon den dedizierten USB-Pullup

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Mampf F. schrieb:
> Ganz ohne schaltbaren Pullup würde ich das nicht mehr machen

Ja, das ist schon praktisch. Wenn man den Controller via Debugger 
resettet, wird der Pull-Up abgeschaltet und das Gerät getrennt, und beim 
nächsten Start (ggf. in Debug-Session) wird es direkt wieder erkannt. 
Das machts schön einfach.

Mampf F. schrieb:
> Den meinte ich auch nicht ... Schon den dedizierten USB-Pullup
Achso. Auf dem STM32F4-Discovery wird auch "nur" der interne dedizierte 
USB-Pullup genutzt, und das klappt supi. Der existiert ja gerade 
deswegen, um den externen zu sparen - wäre ziemlich sinnlos, wenn der 
nicht reichen würde! Und deine 2,2kΩ sind noch weiter von den 1.5kΩ weg 
als die integrierten max 2.1kΩ ;-)

von Mampf F. (mampf) Benutzerseite


Angehängte Dateien:

Lesenswert?

Niklas G. schrieb:
> Und deine 2,2kΩ sind noch weiter von den 1.5kΩ weg
> als die integrierten max 2.1kΩ ;-)

Ich hab mich in der Tat schonmal gefragt, ob die Schaltung falsch ist 
... Irgendwoher hatte ich sie übernommen :)

Normal 2,2k bei 5V oder 1,5k bei 3,3V.

Aber der Kollektor des NPNs hängt an 5V - ist aber als Emitterfolger 
verwenden - d.h. am Emitter dürften nie mehr als 3,3V anliegen und dafür 
ist der 2k2 dann tatsächlich zu groß.

Werd ich mir mal genau anschauen müssen ?

*edit*: Ah gefunden ... Ups, Spannung vertauscht :)

Muss ich mir merken^^

: Bearbeitet durch User
von Max (Gast)


Lesenswert?

Was mach ich denn nun mit dem Vbus? Lediglich an den USBLC6?

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.