Forum: Mikrocontroller und Digitale Elektronik ISP Bootloader über USART bei STM32 funktioniert nicht


von Thomas W. (mikrobe)


Lesenswert?

Hallo,

ich habe mir nach längeren Recherchen ein STM32 Evaluation Board 
zugelegt. Einer der Gründe für diesen Controller war, dass man ihn ohne 
zusätzliche Hardware über die serielle Schnittstelle programmieren kann.

Es handelt sich um einen STM32F103VE bei dem die serielle Schnittstelle 
USART1 über einen MAX3232CSE mit einem herkömmlichen DB9 Stecker 
verbunden ist. Dabei ist PIN2 des Steckers (über den MAX3232) mit PA10 
(RX) und Pin3 mit PA9 (TX) verbunden.

Nach meinem Verständnis des Handbuchs sollten also damit die 
Vorraussetzungen gegeben sein, den Bootloader über USART1 anzusprechen. 
Aus der o.g. Pinbelegung habe ich geschlossen, dass ich den PC und das 
Board mit einem Nullmodemkabel verbinden muss, oder liege ich da falsch?

Zum beschreiben des internen Flash-Speichers des STM32 wollte ich den 
Flash Loader Demonstrator von der ST-Seite verwenden (Version 2.0). 
Allerdings bekomme ich als Meldung immer „Unrecognized Device.. Please 
reset your device and Try again”.

Alternativ habe ich dann versucht, mit einem Terminalprogramm 0x7F an 
den Bootloader zu senden. Normalerweise sollte dann 0x79 (ACK) als 
Antwort kommen. Das Ergebnis ist auf zwei PCs unterschiedlich. Auf 
meinem Laptop (WinXP 32 Bit) erhalte ich als Antwort ebenfalls 0x7F. Auf 
einem anderen PC (WinXP 64 Bit) kommt gar nichts zurück.


Folgendes habe ich als Fehlerquellen bereits ausgeschlossen:

Bootkonfiguration (BOOT1=0 und BOOT0=1 sind gesetzt)
COM Ports (an verschiedenen Rechnern getestet, Verbindungen 
untereinander sind möglich)
Kabel (Nullmodemkabel zum Test der Kommunikation zwischen zwei PCs 
funktioniert)
COM Settings (8Bits, 1 Stopbit, Even Parity mit verschiedenen Baudraten 
getestet)
Der STM32 selbst funktioniert auch, zumindest läuft ein vorinstalliertes 
Demo)

Jetzt bin leider etwas ratlos, und bin für jeden Tipp dankbar.

Danke,Gruß


Thomas

von Sumpfeule (Gast)


Lesenswert?

Nullmodemkabel klingt aber schon ziemlich nach Quatsch... überprüf das 
doch noch einmal.

Grüße, Axel

von Thomas W. (mikrobe)


Lesenswert?

Hallo,

danke für den Tip. Ich muss mir ertmal ein anderes Kabel besorgen.

Kann es sein, dass der MAX3232 defekt ist? Kann man das mit relativ 
bescheidenem Equipmemt prüfen (Multimeter)?

MFG

Thomas

von Thomas W. (mikrobe)


Angehängte Dateien:

Lesenswert?

Hallo,


Da ich den Verdacht hatte, dass evtl. der MAX3232 auf meinem Board 
defekt sein könnte, habe ich mir noch mal das Datenblatt hergenommen. 
Wenn ich das richtig verstehe, dann müsste man bei Vcc=3V an V+=5.5V und 
an V-=-5.5V messen können.

In meinem Fall ist Vcc ca. 3.3V. Ich messe V+=6V und V-=-6V. ich denke 
das sollte soweit ok sein.

Ich habe gelesen, dass es auf der TX-Leitung einen sog. Ruhepegel gibt, 
solange nichts gesendet wird. Dieser sollte zwischen -3V und -15V 
liegen. Das konnte ich auch an einigen PCs verifizieren, mein STM32 
Board hat allerdings nur -2.7V (gemessen am Stecker bei offenem 
Ausgang). Sollten da nicht auch -6V anliegen, -2.7V wären ja außerhalb 
der Spezifikation?


Sonst bin ich leider noch keinen Schritt weiter. Müssen ausser dem 
setzen von BOOT0 und BOOT1 sonst noch irgendwelche Voraussetzungen 
geschaffen werden um den seriellen Bootloader anzusprechen? Mit dem 
Nullmodemkabel bin ich mir eigentlich sicher, das Board hat ja auch den 
üblichen männlichen Steckverbinder. Pinbelegung des MAX3232 ist wohl 
auch dementsprechend (siehe Anhang).


Danke und Gruß

Thomas

von Stm32User (Gast)


Lesenswert?

Hallo Thomas,

ich hatte vor einiger Zeit auch massive Probleme mit dem Download
über den Flashloader.

Zunächst noch der Hinweis. den du sicher beachtet hast, das der
Bootloadermode erst nach Poweron/Reset mit der Boot 0/1-Belegung
eingenommen wird.

Nun zum Flashloader, bei mir war wohl ein Installationsproblem die
Ursache. Es gab im Laufe der Zeit verschiedene Flashloader-Versionen,
die ich dann immer fleißig updatete.

Erst eine Neuinstallation mit vorheriger Deinstallation  und Beseitigung
aller Leichen inklusive Registry brachte ein positives Ergebnis zur 
Folge.

Noch eine Frage, benutzt dein Demoprogramm zufällig die serielle 
Schnittstelle ? Dann kannst du vom Board + Kabel + PC alles durchtesten.

Ansonsten gibt es hier:

http://code.google.com/p/stm32flash/

noch ein alternatives Konsolenprogramm, habe ich selbst aber nicht 
getestet.

Gruß

von Thomas W. (mikrobe)


Lesenswert?

Hallo,


danke für die Hinweise.

BOOT0 und BOOT1 habe ich im ausgeschalteten Zustand gesetzt und dann das 
Datenkabel verbunden. Danach erst habe ich die Spannungsversorgung 
eingeschaltet. Ich denke die Reihenfolge sollte in Ordnung sein. Das 
einschalten der Spannungsversorung sollte ja auch als RESET gelten, oder 
nicht? Die PC-Software habe ich als letztes gestartet.

Um den Flashloader zu umgehen habe ich ein simples PC-Terminalprogramm 
für die COM-Schnittstelle verwendet. Damit sende ich nur ein Byte 
(0x7F). Das selbe macht auch der Flashloader (getestet mit einem zweiten 
PC). Daher denke ich nicht, dass es daran liegt. Es kommt einfach keine 
bzw. nicht die erwartete Antwort. Das komische ist, dass sich das Board 
an verschiedenen PCs unterschiedlich verhält.

Eventuell kann ja mal jemand mit ähnlicher Hardware (MAX3232 an 
Vcc=3.3V) die Spannung auf der TX Leitung im unbelasteten Zustand 
messen. Dann hätte ich mal einen Vergleichswert. Die -2.7V kommen mir 
spanisch vor. Die Norm sieht ja einen Bereich von -3 bis 15V vor.

Das Demo verwendet scheinbar keine serielle Schnittstelle. Ich kann im 
Quellcode jedenfalls nichts finden. Es gibt zwar die Initialisierung und 
auch eine Sendefunktion, die werden jedoch nirgends benutzt.

Gruß

Thomas

von Sumpfeule (Gast)


Lesenswert?

Thomas, was zum Geier misst Du? Tx vom PC oder Tx des Boards? Dass Rx 
und Tx gekreuzt werden, also Tx-PC auf Rx-Board und umgekehrt, ist Dir 
bekannt?

von Sumpfeule (Gast)


Lesenswert?

Mit dem Kabel hast Du recht. Ich hatte Deine Schaltung nicht gesehen, 
entschuldige. Wo ich sie aber schon gesehen habe... was passiert denn am 
RS232, wenn Du den zweiten Tx-Kanal auf High legst? Das wäre doch der 
unmittelbare Vergleichswert...

von Thomas W. (mikrobe)


Lesenswert?

Hallo,


nachdem ich mich länger nicht gemeldet habe, möchte ich wenigstens 
nochmal den letzten Stand mitteilen.

In der Zwischenzeit hatten wir die Gelgenheit mit einem geliehen Oszi 
die Signale der seriellen Schnittstelle mal genauer unter die Lupe zu 
nehmen. Es sieht so aus, als ob vom STM32 keine Antwort mehr kommt. Ich 
denke da liegt irgendein Defekt vor. Ob eine serielle Kommunikation im 
normalen Betrieb möglich ist, werde ich noch testen.

Inzwischen habe ich mir einen ST-Link Adapter besorgt. Damit 
funktionierte alles sofort reibungslos.


Nochmal vielen Dank für die nützlichen Hinweise und Tipps.


Gruß

Thomas

von Hpman (Gast)


Lesenswert?

Hallo,

sorry fuers "hochholen" habe das selbe Problem, das ich via UART keine 
Verbindung zum Bootloader bekomme. Habe es sowohl mit dem Flash Loader 
als auch direkt mittels eines Terminalprogramms probiert. Uart ist via 
USB zu seriell Wandler (PL 2303) angeschlossen, eventuell ist dieser IC 
auch defekt, zumindest ist an der TX/RX  Leitung des stm32 nichts an 
Kommunikation zu sehen trotz das der Treiber im Windows dafuer sauber 
installiert ist.

Es handelt sich um ein billiges China EVAL Board mit einer installierten 
Demo Applikation. Mir ist nicht klar inwieweit der BL eventuell 
loeschbar ist? Mit der Boot0/Reset Sequenz startet die Applikation nicht 
jedoch scheinbar auch nicht der BL :(. Werde das ganze nochmal mit einer 
"richtigen" seriellen Schnittstelle testen sonst wird es wahrscheinlich 
auch ein JTAG Kabel werden ...

Gruss Hpman

von Matthias K. (matthiask)


Lesenswert?

Bist Du an der richtigen UART? Der Bootloader geht nicht an jeder.

von Günter R. (muntablues)


Lesenswert?

Habe auch so ein "günstiges" China Teil und bei mir ging die USART auch 
nicht. Nach kurzer Suche war es eigentlich klar was da schuld ist.

Im Schaltplan ist ein Max3232 drin, aber verbaut ist ein Max232. Der 232 
ist für 5V und somit kann das nicht klappen. Ein Austausch gegen den 
3232 hat bei mir geholfen gg

Schaut einfach mal genau was verbaut ist.

von Hpman (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

der uC ist ein stm32F103 mit 64 Beinchen, laut den Applikation Notes 
liegt der serielle BL an USART1, und die sind laut Schaltplan und 
hoffentlich auch im Layout am PL 2303. TX -> RX und RX -> TX soweit 
passt das also.

Der USB Seriell Wandler scheint USB seitig in Ordnung zu sein, leider 
lässt sich das auf der seriellen Seite schlecht prüfen da es eine 
direkte Verbindung zwischen den beiden ICs gibt, man müsste die Leitung 
auftrennen fuer weitere Untersuchungen ob der stm32 oder der PL 2303.

Tja die billigen China Teile haben Ihre Tuecken aber nichts ist 
langweiliger als wenn alles auf Anhieb funktioniert :).

Gruesse Hpman

von Matthias K. (matthiask)


Lesenswert?

In dem Schaltplan liegt Boot0 und Boot1 auf GND. Da kann der Bootloader 
nicht starten. Leg mal Boot0 (nach R9) an 3.3V. Boot1 bleibt auf GND.

von Matthias K. (matthiask)


Lesenswert?

Update: sehe gerade das dies auch über S3 geht, aber die 2k dort sind 
unüblich...

von Hpman (Gast)


Lesenswert?

kleines Update, mittels eines exterenen FTDI USB zu seriell Wandlers 
habe ich mich parallel auf die USART1 geklemmt und damit ging es 
problemlos. Eine neu kompilierte Software neu aufgespielt tut was sie 
soll. Schuld scheint der PL 2303 zu sein. Ob HW Defekt, falsch 
beschalten oder schlecht gelötet kann ich nicht sagen, der Charme eines 
integrierten USB Programmers kann das EVAL Board leider momentan nicht 
bieten :)

von Willem Bleymüller (Gast)


Lesenswert?

Hallo

Ich weiß ja nicht ob es sich bei dem hier behandelten Board um ein 
ähnliches handelt, wie ich mir aus China bestellt habe, aber bei mir 
funktioniert folgender Trick.

Ich rufe stm32flash mit diesem loop auf
while true; do stm32flash -b9600 -[anderes Kommando] /dev/ttyUSB0; sleep 
2; done

Erst dann (wenn der loop läuft) schließe ich das Board an die USB 
Schnitstelle an.

BOOT0 ist natürlich in dem Moment des anschaltens überbrückt.
Ich benutze dafür meistens einen Schraubendreher.

Mein Board ist auch mit einem stm32F103 (stm32F103RBT6) Chip. Es handelt 
sich auch um den PL2303 USB Serial Konverter.

Viele Grüße Willem Bleymüller

von Mape (Gast)


Lesenswert?

Hallo,

ich bin ganz begeistert von dem STM32 seriellen Bootloading. Ich habe 
hier mal beschrieben, wie man mit ganz wenigen Bauteilen das serielle 
Bootloading für den STM32 super komfortabel automatisieren kann:

http://www.firefly-power.de/ARM/sloadhost.html

Es benutzt 2 überflüssige RS232-Leitungen, um automatisch Reset und 
BOOT0 zu betätigen. Das Tool gibt es für Linux und Windows und sogar 
eins mit Click-Oberfläche.

Viele Güße von Marten Petschke

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.