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.
Ich habe alle möglichen Varianten gesehen. Direkt mit GND verbinden, mal mit Ferrit, mal meine Kombi.
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 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
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.
:
Bearbeitet durch User
Ja, der STM32F412VG soll alle nötigen Pullups oder Downs intern zuschaltbar haben, laut Datenblatt.
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.
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
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^^
:
Bearbeitet durch User
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.