Forum: Mikrocontroller und Digitale Elektronik STM3210C: Firmware-Übertragung per USART geht nicht


von Wolfgang (Gast)


Lesenswert?

Hallo beisammen!

Versuche mich gerade in der Programmierung eines STM3210C-EVAL und 
verzweifle schon fast. Da ist ein STM32F107VCT6 drauf. Ich verwende den 
"IAR Embedded Workbench for ARM, v. 6.10, 32K Kickstart Edition", habe 
die Platine über COM1 (115200 Baud, 8E1) an den PC angeschlossen 
(Seriellkabel hat 2<->3 gekreuzt) und schaffe es einfach nicht, den 
Baustein mit einer beliebigen Firmware zu brennen. Die selbst wird 
anstandslos kompiliert.

In Optionen->Debugger->Setup->Driver steht "Simulator", auf 
Optionen->Debugger->Download kann ich dann aber nichts auswählen. Die 
Debugger-Sitzung funktioniert ebenfalls, aber das Programm wird nicht 
auf den Mikrokontroller übertragen.

Stelle ich von "Simulator" auf z.B. "ST-Link" um, kann ich bei 
"Download" einstellen, die Firmware zu senden. Ich setze "Use flash 
loader(s)". Jetzt kommt beim Versuch, die Daten zu senden, immer eine 
Fehlermeldung "Failed to load flash loader: C:\Programme\IAR 
Systems\Embedded Workbench 6.0 
Kickstart\arm\config\flashloader\ST\FlashSTM32F105xC.flash" und dann 
"The Debugging session could not be started..." Kurios ist das schon, 
daß da ein 105er µC gebrannt werden soll, aber was solls. Diese 
angegebene .flash-Datei gibt es definitiv! Also wieder zurückgewechselt 
nach "Simulator" - die Einstellmöglichkeit in "Download" ist freilich 
wieder weg.

Sollte ich denn nicht vom IAR (oder einem seiner Module) nach den 
Verbindungsdaten gefragt werden? COM-/CAN-/USB-Anschluß, Baudrate usw.. 
Mit dem HyperTerminal kann ich ja auch ein 0x7f senden und bekomme ein 
anderes Byte zurück. Daraus schließe ich, daß die Hardware funktioniert.

Im Netz kursieren Berichte von einem "bekanntem Fehler" des IAR bis 
V5.5, der die Value-Line-µC nicht brennen kann. Ich habe hier aber einen 
107er-µC und IAR V6.1. Kennt jemand diesen Fehler? Vielleicht bin ich ja 
auch nur in die falsche Richtung gerannt... Danke schonmal für Eure 
Antworten!

Gruß - Wolfgang

von Stefan B. (forscher)


Lesenswert?

Hallo Wolfgang,

sitze gerade am fast gleichen Problem, auch STM3210C, dann aber 
GNU-Chain, die verschiedenen Flasher habe ich auch noch nicht am Laufen.
Bei dir gibt es aber einen Fehler :
Das Kabel darf NICHT 2-3 gekreuzt haben !! (so steht es jedenfalls in 
einer Note im Manual (S.13))
Vielleicht hilft das !

Grüsse
forscher

von Mehmet K. (mkmk)


Lesenswert?

Flashen via USART geht meines Wissens mit der IAR Workbench IDE nicht. 
Aber mit dem FlashLoader von ST. Nur darauf achten, dass die BOOT pins 
richtig gesetzt sind.

Wolfgang schrieb:
> Kurios ist das schon,
> daß da ein 105er µC gebrannt werden soll, aber was solls.
Hatst Du die Target richtig gesetzt?
Workspace/Project -> rechts klick -> General Options -> Target -> Device

von Wolfgang (Gast)


Lesenswert?

Hallo, Stefan!

Danke für Deinen Tip. Die Anforderung laut "Anleitung" habe ich 
selbstredlich gelesen. Habe ein Kabel 1:1 aus einer Flachbandleitung 
gebaut und ausprobiert mit den o.g. Auswirkungen (seltsam) und auch ein 
fertiges mit 1:1-Belegung bis auf 2<->3 gekreuzt ausprobiert, das 
überhaupt nicht will.

Nach langem Messen, Schauen, Raten komme ich zum Schluß, daß die 
Hardware ab der Seriell-Buchse des PCs funktioniert. Mit dem 
HyperTerminal kann ich nämlich eine Verbindung zum µC aufbauen. Leider 
muß dazu SW2(=BOOT0) auf 1 gesetzt und ein Rücksetzer am µC ausgeführt 
werden. Mit gesetzten Brücken auf JP18 und JP19 sollte es ohne SW2=1 
gehen. Dazu muß aber der PC die Leitungen DCD und CTS ansteuern, was bei 
mir nicht klappt.

Offensichtlich fehlt eine adäquate Kommunikation von Seiten des "flash 
loader"s in IAR oder wie bei Dir GNU (das ich nie im Einsatz hatte). 
Vielleicht weiß ja noch jemand einen Rat, was wir übersehen. So wenige 
Nutzer des STM3210C gibt es ja doch nicht.

Übrigens finde ich die "Dokumentation" der Entwicklungsumgebung 
schändlich nachlässig. Weder ein vernünftiges Handbuch mit Anleitung zur 
Inbetriebnahme durch die gängigsten IDEs noch eine CD mit Treibern oder 
was auch immer war dabei. st.com funktioniert nur mit Adobe Flash, was 
ich auf meinen privaten Rechnern mit Sicherheit nicht installieren 
werde. Einen einzigen flüchtigen Ansatz von Anleitung zum Brennen des µC 
auf dem STM3210C habe ich im PDF UM0713 gefunden: Abbild laden, brennen, 
µC neustarten. Sehr aufschlußreich! Da sollten sich die Leute von STM 
mal die vorbildliche Doku bei Atmel abschauen.

Gruß - Wolfgang

von Wolfgang (Gast)


Lesenswert?

Ha, überschnitten!

Danke, Mehmet. Der Chip ist definitiv auf den 107er gesetzt. Das habe 
ich natürlich kontrolliert, als etwas von 105xC.flash gemeldet wurde.

Wo bekomme ich eine definitive Bestätigung dafür her, daß IAR den STM32F 
blabla nicht per USART brennen kann? Von IAR ist keine Hilfe zu 
erwarten, sofern die Info nicht schon irgendwo steht.

Gruß - Wolfgang

von Mehmet K. (mkmk)


Lesenswert?

Wolfgang schrieb:
> Wo bekomme ich eine definitive Bestätigung dafür her, daß IAR den STM32F
> blabla nicht per USART brennen kann?

Das weiss ich natürlich auch nicht. Aber wenn Du auf Project->Rechts 
Klick schaust: dort ist nix von einem FlashLoader oder dergleichen.
Also gehe ich davon aus, dass das nicht unterstützt wird.

Ich arbeite auch mit dem ST-Link aber mit IAR 5.50. Wusste gar nicht, 
dass die schon bei Version 6 sind :)

Ist Dein STM3210C-EVAL ein Orginal? Oder Made in China? Dass der Chip 
möglicherweise ein 105'er ist, auf den man 107 gedruckt hat? Nur so ein 
Gedanke.

von Wolfgang (Gast)


Lesenswert?

Naja, im Menü gibts Project->"Download and Debug  STRG-D", sollte damit 
also gehen. Ich habe KEIN ST-LINK, sondern habe nur einmal diese 
Einstellung verwendet, um an die Einstellungen auf 
Options->Debugger->Download zu kommen.

Das STM3210C ist definitiv ein Original, bezogen von Spoerle. Mit dem 
gekreuzten Kabel und HyperTerminal bei 19200 8E1 habe ich einmal laut 
AN3155 die PID ausgelesen (auf dem Speicheroszi ziemlich aufwendig zu 
dekodieren) und heraus kam $0418, also laut AN2606 Kap. 6 ein Chip der 
"Connectivity Line". Eine Unterscheidung zw. 105er und 107er ist hier 
nicht möglich, was ich jetzt aber nicht als vordringlich empfinde.

Gruß - Wolfgang

von Stefan B. (forscher)


Lesenswert?

Hallo Wolfgang,

so jetzt habe ich einen guten Erfolg.
Ich kann jetzt mit dem Stm32Prog.exe unter Windows das STM3210C-Board 
problemlos auslesen. Notwendig ist:
Das Kabel muss auf Pin 2/3 gekreuzt sein, auf Pin 1/8 NICHT!
Ich habe also ein Kabel gelötet, beide Seiten weiblich:

5 -> 5   // GND
2 -> 3
3 -> 2
1 -> 1
8 -> 8

Dann muss noch die Schalterstellung stimmen:
SW1 auf 0
SW2 auf 1

Das ganze lief sogar über einen USB-Serial Adapter.

Grüsse
Stefan

von Wolfgang (Gast)


Lesenswert?

Hallo, Stefan!

So ein Kabel verwende ich ja bereits.

Nun zu dem Chaos bei STM: Die haben es nicht geschafft, weder zum 
STM32F107VCT6, den ich verwende, noch zum STM3210C diesen "Flash Loader 
Demonstrator" unter "Design Support"->"SW Demos" anzuzeigen, über das 
ich irgendwann doch gestolpert wäre. Erst eine Google-Suche über dieses 
STM32Prog.exe und einen Eintrag auf st.com beim 101ZE µC führte zum 
Erfolg.

So denn, dat Dingenskirchen installiert, kann ich nun mit dem µC reden. 
Leider funktioniert der Einstieg nicht über DCD und RTS, was nochmal 
weiterer Nachforschungen bedarf. Schließlich will ich auch nicht 
stundenlang manuell irgendwelche Programme bedienen, sondern IAR soll 
den µC gleich brennen.

Verdammt nochmal, kann denn ein renommierter IDE-Hersteller keine 
vernünftige Anleitung schreiben? Warum kann das STM auch nicht? Da muß 
sich wohl jeder Neuling durch sämtliche Schwierigkeiten kämpfen, nur um 
mal ein paar Zeilen C auf einem µC zum Laufen zu bekommen.

So, Mehmet und Stefan: Danke erstmal. Ich bleibe am Ball und werde über 
die Ergebnisse berichten, damit es andere Entwickler nicht gar so schwer 
haben.

Gruß - Wolfgang

von Wolfgang (Gast)


Lesenswert?

Aktueller Stand: Der Reset-Puls über die RTS-Leitung ist 960ns lang und 
bringt die 3,3V auf ca. 2,5V herunter. Da kann kein µC rücksetzen!

Nach Ausbau des C15 kommt der Reset-Puls auf -0,4V herunter und der µC 
wird zurückgesetzt. Leider startet die USART-Übertragung bereits 80ns 
nach BEGINN des Reset-Pulses. So schnell kann kein µC den Bootloader 
durchlaufen. Das ändert sich auch nicht über die Wahl der Baudrate. 
Pfusch hoch 3! Konnte man denn da nicht ein paar ms warten, die ohnehin 
niemandem geschadet hätten?

Gruß - Wolfgang

von Mehmet K. (mkmk)


Lesenswert?

Wolfgang schrieb:
> Naja, im Menü gibts Project->"Download and Debug  STRG-D", sollte damit
> also gehen.

Diese Menu-Auswahl bezieht sich aber meiner Meinung nach nicht auf eine 
COM-Port, sonder auf eine JTAG-Verbindung.

von Wolfgang (Gast)


Lesenswert?

So. Programmierung des µCs mit der GUI funktioniert, man muß aber die 
evtl. gesteckten Brücken JP18 und JP19 entfernen. Nach Bau eines 
Adapters mit der Belegung

PC µC
-----
1   -
2   3
3   2
4   8
5   5
6   -
7   1
8   -
9   -

funktioniert prinzipiell auch die Ansteuerung der Leitungen Boot0 und 
Reset über RS232. Dazu muß nur noch das Kommandozeilenprogramm dazu 
überredet werden, auch die entsprechenden Statussignale herauszugeben. 
Das klappt nicht direkt und die Signale kann man auch nicht nach 
Belieben programmieren. Also müßte man erstmal die Signale invertieren 
und formieren. "Müßte" deshalb, da das Kommandozeilenprogramm letztlich 
nicht nutzbar ist und erst einige Fehler ausgebaut werden müßten, wozu 
ich keine Zeit habe.

Für die Formierung verwendet man am besten ein doppeltes Monoflop wie 
den HC123. Das Reset-Signal wird >10ms langgemacht, das Boot0-Signal 
>20ms länger als das Reset-Signal. SW2 wird auf 1 gestellt, weil die 
Jungs von STM Dioden in die Reset- und Boot0-Leitung eingesetzt haben. 
Alternativ kann man die D1 durch 0R ersetzen und muß nicht mehr 
andauernd SW2 umstellen, wenn man den Programmieradapter an- oder 
absteckt. C15 (s.o.) kann eingelötet bleiben. Danach erfolgt der Aufruf 
als Options->"Build Actions"->"Post-build command line", alternativ in 
einer Batch-Datei und probeweise auch im CLI:

"C:\Programme\STMicroelectronics\Software\Flash Loader 
Demonstrator\STMFlashLoader.exe" -c --pn1 --br 115200 --co OFF --to 1000 
-Dtr --Hi -Dtr --Lo -i STM32_Connectivity-line_256K -d --a 08000000 --fn 
"H:\Projekte\Teststation SC020\Debug\Exe\Teststation.bin" --v -r --a 
08000000 < "readme.txt" > "out.txt"

Die Eingabe eines Zeichens über die Tastatur muß unterbunden werden, da 
das aus dem IAR heraus nicht funktionieren würde. Leider bleibt IAR hier 
stecken und der Abbruch des "Build"-Vorgangs durch den Nutzer zeigt dann 
einen Fehler. Welcher das ist, schweigt sich der STMFlashLoader wie IAR 
aus.

Der Schaltplan zum STM3210C ist auch nicht gerade besonders 
übersichtlich. Ich verbriet eine Menge Zeit damit, das Signal PHY_RESET# 
zu verfolgen, bis ich es schließlich auf der Schaltplanübersicht fand. 
Auf Amiga-Schaltplänen z.B. standen ja auch die Seitenzahlen zu jedem 
Signal, wohin es verband. Danke, STM!

Fazit: Brennen des ARM-µCs funktioniert über die GUI des "Flash Loader 
Demonstrator"s und leider nur prinzipiell über STMFlashLoader, womit man 
dies bequem und automatisiert von IAR aus tun könnte. Vielleicht findet 
sich ja mal jemand, der die Arbeitszeit in STMFlashLoader stecken will, 
um es absturzsicher zu machen und insbesondere die RTS-Leitung direkt 
programmierbar (am besten mit Einstellung der Verweilzeiten). Bis 
dorthin genügt also ein einfaches gekreuztes Seriellkabel bei manueller 
Bedienung.

Gruß - Wolfgang

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.