mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik STM32F407 DFU Bootloader geht nicht


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Tom (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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 :(

Autor: Rupert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich denke mal, dass die 25MHz das Problem sind. USB verlangt m.W. 8 bzw. 
16 MHz

VG S.

Autor: Jim M. (turboj)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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."

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry, das gilt für den F40x und F41x, nicht allg. für F4xx.

Autor: rµ (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Anderes Kabel probiert? Anderen USB Port? Ich hab da ein paar NXP LPC 
11u35 Dinger herumliegen die sind echt pingelig was das USB Kabel 
anbelangt.

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Dr. Sommer (Gast)
Datum:

Bewertung
1 lesenswert
nicht 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.

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Dr. Sommer (Gast)
Datum:

Bewertung
1 lesenswert
nicht 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?

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Bernd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Für Windows gibt es von Microsoft das Tool USBVIEW. Dies zeigt dir den 
Status und eventuelle Fehler der USB-Schnittstelle an.

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab jetzt hier noch was gefunden: 
https://community.st.com/s/article/FAQ-DFU-mode-with-system-bootloader-is-not-working-while-USB-does

Habe grad leider keinen 8 Mhz Quarz im passender Größe da. Werde mal 
einige besorgen und dann erneut probieren und hier berichten.

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Tom2 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.