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.
> 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.
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.
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 STM32Matthias 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.
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?
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.
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.
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
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Ω ;-)
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^^