STM32F407 DFU Bootloader geht nicht

Gast #5873367
Lesenswert?

Hallo,

ich habe ein Problem mit dem integrierten Bootloader im STM32F407VET6 
(100-Pin LQFP).
Über UART funktioniert dieser einwandfrei, aber über USB bekomme ich ihn 
nicht zum laufen.
In Windows erhalte ich immer folgenden Fehler:
"Dieses Gerät wurde angehalten, weil es Fehler gemeldet hat. (Code 43)
Fehler bei einer Anforderung zum Zurücksetzen des USB-Ports."

Im Anhang ist ein Bild von der Beschaltung. Laut Datenblatt vom F407 
wird bei DP kein Pullup benötigt.

Testweise habe ich es auch mit Pullup probiert, da erscheint allerdings 
der selbe Fehler.

Ebenso habe ich mal die Diodenschaltung sowie die Spule weggelassen, 
also nur die Widerstände zwischen Buchse und Mikrocontroller, hat aber 
auch nicht funktioniert (ich habe dafür die Spule sowie Diodenschaltung 
ausgelötet und stattdessen Lackdrähte eingesetzt um die Kontakte zu 
verbinden). Die Schaltung nur mit Widerständen wird ja so auch von ST im 
STLink verwendet.

Das ganze befindet sich auf einer selbst erstellten (4-Lagen mit 
Sig-GND-VCC-Sig) Platine. An den Mikrocontroller ist ein ext. 25 Mhz 
Quarz angeschlossen. Ich habe mir den HSE Takt mal auf den MCO Pin 
gelegt und nachgemssen. Es sind saubere 25 Mhz.

Im Eratasheet habe ich nichts bzgl USB bzw DFU beim F407 gefunden.

Irgendwelche Ideen? Ich weiß nicht mehr weiter :(
Angehängte Dateien:
#5873396
Lesenswert?

Tom schrieb:
> Im Anhang ist ein Bild von der Beschaltung. Laut Datenblatt vom F407
> wird bei DP kein Pullup benötigt.

Wenn Code 43 kommt, hat Windows ein eingesteckts USB Gerät erkannt - 
dafür ist der Pullup gedacht.

Tom schrieb:
> An den Mikrocontroller ist ein ext. 25 Mhz
> Quarz angeschlossen.

Mal ins Handbuch geschaut? An den STM32discovery und Nucleos sind IIRC 
8MHz Quarze verbaut, was anderes dürfte der Bootloader nicht 
out-of-the-box unterstützen.

Falscher Takt wäre eine mögliche Erklärung für Code 43.
Gast #5873400
Lesenswert?

Das ist es leider nicht, denn im AN2606 (Bootloader App Note) steht beim 
F4xxx folgendes:
"The system clock is derived from the embedded internal high-speed RC 
for USARTx bootloaders. This internal clock is also used for CAN and DFU 
(USB FS Device) but only for the selection phase. An external clock 
multiple of 1MHz (between 4 and 26MHz) is required for CAN and DFU 
bootloader execution after the selection phase."
Gast #5873420
Lesenswert?

DFU war unter win schon immer etwas problematisch. Es hat ja auch Gründe 
warum es von MS immer noch keinen Treiber dafür gibt und vermutlich auch 
nie geben wird. Falls du das an einem USB 3 Port betreibst schalte Mal 
einen USB 2 Hub dazwischen.

Thomas
Gast #5873444
Lesenswert?

Also, ich habe jetzt mehrere Kabel probiert -> kein Erfolg.
Andere USB Buchsen -> kein Erfolg.
USB Hubs (sowohl 2.0 als auch 3.0) -> kein Erfolg.

Dann hab ich es noch an zwei weiteren PCs probiert, auch ohne Erfolg.
Gast #5873461
Lesenswert?

Stecke es an einem Linux PC an und schaue dir die Kernel Meldungen an. 
Die geben manchmal hilfreiche Hinweise darauf was da nicht funktioniert.

Nehme auch mal ein USB Beispiel Programm, flashe es auf den Controller 
(per JTAG/SWD) und schaue ob das geht, bzw. prüfe per Debugger warum 
nicht.
Gast #5873957
Lesenswert?

Dr. Sommer schrieb:
> Stecke es an einem Linux PC an und schaue dir die Kernel Meldungen an.
> Die geben manchmal hilfreiche Hinweise darauf was da nicht funktioniert.

Gute Idee, das werd ich jetzt dann probieren.

Dr. Sommer schrieb:
> Nehme auch mal ein USB Beispiel Programm, flashe es auf den Controller
> (per JTAG/SWD) und schaue ob das geht, bzw. prüfe per Debugger warum
> nicht.

Das ist interessant. Habe ein Beispiel eingerichtet, bei dem sich der 
Controller als virtueller COM Port ausgibt. Windows erkennt den sofort 
und kann mittels Terminal sogar ohne Probleme kommunizieren.
Gast #5873970
Lesenswert?

Tom schrieb:
> Windows erkennt den sofort
> und kann mittels Terminal sogar ohne Probleme kommunizieren.

Na sowas... Mal den Bootloader unter Windows 10 probiert? Sicher dass 
der USB-Bootloader überhaupt startet? Boot-Pins und Option Bytes korrekt 
konfiguriert?
Gast #5873974
Lesenswert?

Dr. Sommer schrieb:
> Mal den Bootloader unter Windows 10 probiert?

Hab bisher nur Windows 10 probiert.

Dr. Sommer schrieb:
> Sicher dass
> der USB-Bootloader überhaupt startet?

Ja. Denn den Bootloader startet man immer gleich, indem man den Boot0 
Pin auf 3,3V zieht. Einen Boot1 Pin hat der Controller nicht. Jedenfalls 
(laut AN2606) wählt der Bootloader dann selber die passende 
Schnittstelle aus, da wo er etwas bestimmtes empfängt. Und wie ich 
bereits schrieb, über UART funktionierts. Kann den Controller über UART 
mit dem Tool von ST ohne Probleme flashen.
Gast #5874541
Lesenswert?

Hab doch noch einen 8 Mhz Quarz gefunden und provisorisch angelötet. Und 
es funktionierte sofort. Windows erkennt den Controller als Bootloader. 
Lässt sich einwandfrei programmieren mit dem Tool von ST.

Danke an alle für die Ideen.
Gast #5946671
Lesenswert?

Habe zufälligerweise ein ähnliches Problem bei einem STM32F405 mit einem 
16 MHz Quarz. Eine normale USB-Applikation war funktionsfähig, aber 
DFU-Mode nicht. Es stellte sich heraus, dass mit dieser Platine Versuche 
zur Stabilität der Quarzschaltung unternommen wurden und der 
Reihenwiderstand zum Quarz relativ groß war. Nach entsprechender 
Anpassung war DFU-Mode auch mit 16 MHz problemlos erreichbar. (siehe 
auch AN2867 Oscillator design)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren