Forum: Mikrocontroller und Digitale Elektronik STM32-F407-DIY-MORE mit gdb und blackmagic blue pill programmieren


von Christoph K. (chriskuku)


Lesenswert?

Ich setze jetzt meine Gehversuche mit dem STM32-F407-DIYMORE Board fort. 
Jetzt gewappnet mit einem BMP-geflashten Blue Pill Board.

Frage zuerst: es genügt doch, wenn ich das DIYMORE-Board mit 3,3V vom 
Blue Pill Board aus versorge, brauche doch die 5V nicht, oder?

Meine gdb Session hänge ich mal an.

Im .gdbinit steht im Moment:
1
$ cat .gdbinit
2
file ./firmware.elf
3
set mem inaccessible-by-default off
4
target extended-remote /dev/cu.usbmodemE1CBBADB1
5
mon swdp_scan
6
att 1

Und die gdb-session starte ich mit:
GDB:
1
#!/bin/sh
2
USBDEV=`ls -l /dev/cu.usb* | grep "18,   9" | sed 's/^.* //'`
3
sed -i -e "s,/dev.*$,$USBDEV," .gdbinit
4
/Users/kuku/opt/gcc-arm-none-eabi-8-2018-q4-major/bin/arm-none-eabi-gdb
(damit ich beim Ändern des Devicenamens den nicht immer neu eingeben 
muß)
1
$ ./GDB
2
GNU gdb (GNU Tools for Arm Embedded Processors 8-2018-q4-major) 8.2.50.20181213-git
3
Copyright (C) 2018 Free Software Foundation, Inc.
4
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
5
This is free software: you are free to change and redistribute it.
6
There is NO WARRANTY, to the extent permitted by law.
7
Type "show copying" and "show warranty" for details.
8
This GDB was configured as "--host=x86_64-apple-darwin10 --target=arm-none-eabi".
9
Type "show configuration" for configuration details.
10
For bug reporting instructions, please see:
11
<http://www.gnu.org/software/gdb/bugs/>.
12
Find the GDB manual and other documentation resources online at:
13
    <http://www.gnu.org/software/gdb/documentation/>.
14
15
For help, type "help".
16
Type "apropos word" to search for commands related to "word".
17
Target voltage: 3.06V
18
Available Targets:
19
No. Att Driver
20
 1      STM32F40x M4
21
0x5b93b9be in ?? ()
22
(gdb) mon erase_mass
23
Erasing flash... This may take a few seconds. \
24
(gdb) x /10x 0
25
0x0:  0x0cfec4ba  0x45d7e9ce  0x90904468  0x5b93b9bf
26
0x10:  0xb14e2f54  0x77fba4bd  0x2f422c29  0x5f655d35
27
0x20:  0xa9586a38  0xff5bba7c
28
(gdb)

Was mich wundert, ist, daß da bei 0x0 und folgende, kein 0xffffffff 
stehen.
Was auch immer ich lade (load), es steht dieses Gemüse da, nicht der 
Reset-Vektor und SP. Was mache ich falsch?

(zum Vergleich mal: NucleoBoard F411RE angeschlossen über on Board 
ST-LINK und gdb mit OpenOCD gestartet). No Prob.

von pegel (Gast)


Lesenswert?

Wieso 0x0?
Flash beginnt bei 0x08000000.

von Stefan F. (Gast)


Lesenswert?

Christoph K. schrieb:
> Target voltage: 3.06V

Hast du deinen Spannungsregler oder das USB Kabel überlastet?

von Au weia (Gast)


Lesenswert?

Christoph K. schrieb:
> Frage zuerst: es genügt doch, wenn ich das DIYMORE-Board mit 3,3V vom
> Blue Pill Board aus versorge, brauche doch die 5V nicht, oder?

... und schon geht es wieder los mit Sparen koste es was es wolle.

Von Abblock-Kondensatoren wollen wir bei dieser Attitude erst gar
nicht reden. Denn das ist immer nur unnützer Ballast der Geld kostet.

Weiter so. Das gibt wieder ein unterhaltsames Feuilloton zum Mitlesen
und Amüsieren.

von Christoph K. (chriskuku)


Lesenswert?

Stefan ⛄ F. schrieb:
> Christoph K. schrieb:
>> Target voltage: 3.06V
>
> Hast du deinen Spannungsregler oder das USB Kabel überlastet?

Ich fand nie, daß diese angezeigten Spannungen etwas mit der Realität zu 
tun haben. Warum, weiß ich nicht. Irgendwas in der BMP Soaftware mißt ja 
die Spannung. Messe ich die 3,3V direkt am Board, so liegen da 3,30V an.

von Christoph K. (chriskuku)


Lesenswert?

pegel schrieb:
> Wieso 0x0?
> Flash beginnt bei 0x08000000.
Beispiel:
1
Program received signal SIGINT, Interrupt.
2
0x00001516 in serial_qkey ()
3
(gdb) x /10x 0
4
0x0:  0x20000330  0x0000398f  0x000037cf  0x000037cf
5
0x10:  0x000037cf  0x000037cf  0x000037cf  0x00000000
6
0x20:  0x00000000  0x00000000
7
(gdb) c
8
Continuing.
Nach meinem Verständnis liegt zwar das Flash gemappt nach 0x08000000, 
aber innerhalb des Adressraums des Programms sind die Adressen relativ 
zu 0x00000000. So zeigt der Reset-Vektor auch nicht auf 0x0800398f, 
sondern auf 0x0000398f. Und gdb arbeitet auch im logischen Adressraum.

Im Falle meine mit OpenOCD und gdb gedebuggten Programms sieht's ja auch 
richtig aus.

Mit BMP habe ich nocht nicht das gewünschte Bild.

: Bearbeitet durch User
von Stefan F. (Gast)


Angehängte Dateien:

Lesenswert?

Christoph K. schrieb:
> Nach meinem Verständnis liegt zwar das Flash gemappt nach 0x08000000,
> aber innerhalb des Adressraums des Programms sind die Adressen relativ
> zu 0x00000000.

Anders herum. Der Flash Speicher beginnt an Adresse 0x0800 0000 und wird 
auf Adresse 0x0000 0000 gemappt. Wenn du vom RAM bootest (macht beim 
Debuggen Sinn) wird das RAM von 0x2000 0000 nach 0x000 0000 gemappt.

von Christoph K. (chriskuku)


Lesenswert?

Ich frage mich manchmal, mit welcher Attitüde manche Leute wie Du hier 
unterwegs sind. Was soll das?

Man sollte den Gästemodus hier abschaffen (wie man es auch in Leo.org 
vor einiger Zeit gemacht hat).

So sehr ich die Expertise vieler Beiträger hier in den Foren schätze, 
aber auf internationalen (engl.) Foren geht es weitaus seriöser zu. Zum 
- geringen - sachlichen Gehalt Deines Einwandes:

Du meinst also im Ernst, ich wolle irgendwas sparen? Die 
Abblockkondensatoren sind doch in der Schaltung eh vorhanden. Vorschrift 
bei der Beschaltung des STM32Fxx ist ohnehin, daß sich nah am Chip ein 
keramischer Abblockkondensator vorgeschriebener Dimensionierung zu 
befinden hat. Also spare ich gar nichts, da alles vorhanden ist. Mehr 
sag' ich dazu jetzt nicht. Dein Beitrag disqualifiziert sich von selbst.

: Bearbeitet durch User
von Christoph K. (chriskuku)


Lesenswert?

Stefan ⛄ F. schrieb:
> Christoph K. schrieb:
>> Nach meinem Verständnis liegt zwar das Flash gemappt nach 0x08000000,
>> aber innerhalb des Adressraums des Programms sind die Adressen relativ
>> zu 0x00000000.
>
> Anders herum. Der Flash Speicher beginnt an Adresse 0x0800 0000 und wird
> auf Adresse 0x0000 0000 gemappt. Wenn du vom RAM bootest (macht beim
> Debuggen Sinn) wird das RAM von 0x2000 0000 nach 0x000 0000 gemappt.

Richtig, hatte mich falsch ausgedrückt. Aber was sieht gdb oder zeigt 
gdb auf 0x0 an?

von pegel (Gast)


Lesenswert?

was sagt denn:

(gdb): x /10x 0x08000000

von Johannes S. (Gast)


Lesenswert?

zu den Spannungen: was für ein Regler ist in dem XTW? Ich benutze da 
lieber die 5V die aus dem Adapter kommen, die sind belastbarer und der 
Regler vom Targetboard wird benutzt.
Die 3,x V Anzeige könnte man noch durch Anpassen des Umrechnungsfaktors 
genauer machen, aber das ist ja nur Kosmetik. Da das XTW ja doch keine 
Treiber hat braucht es auch es keine externe VTarget.

Das Addressmapping passiert im CPU core soweit ich weiss. Das kann von 
CPU zu CPU verschieden sein, muss man im Datenblatt checken. Der H7 hat 
z.B. auch verschiedene Adressbereiche und einige liegen aus 
Debuggersicht auf anderen Adressen.

von Christoph K. (chriskuku)


Lesenswert?

pegel schrieb:
> was sagt denn:
>
> (gdb): x /10x 0x08000000

Habe den Grund gefunden. Hatte zwei verschiedene Images (.elf) und die 
memmap des einen (nicht funktionierenden) sah so aus:
1
MEMORY
2
{
3
   rom(RX)   : ORIGIN = 0x08000000, LENGTH = 0x4000
4
   ram(WAIL) : ORIGIN = 0x20000000, LENGTH = 0x4000
5
}
6
7
SECTIONS
8
{
9
   .text : { *(.text*) } > rom
10
   .bss  : { *(.bss*) } > ram
11
}
Die des anderen:
1
MEMORY
2
{
3
   rom(RX)   : ORIGIN = 0x00000000, LENGTH = 0x4000
4
   ram(WAIL) : ORIGIN = 0x20000000, LENGTH = 0x4000
5
}
6
7
SECTIONS
8
{
9
   .text : { *(.text*) } > rom
10
   .bss  : { *(.bss*) } > ram
11
}

Aber eigentlich wäre doch 0x00000000 richtig, oder?

: Bearbeitet durch User
von Johannes S. (Gast)


Lesenswert?

bei meinen Programmen wird immer auf Adresse 0x08000000 als Start 
geflasht, es stört mich auch nicht das ich den Reset Vektor auf dieser 
Adresse sehe.
Abhängig von den Boot Pins kann aber auch RAM oder eine FSMC Bank auf 
0x0 gemappt werden.

von Stefan F. (Gast)


Lesenswert?

Christoph K. schrieb:
> Aber eigentlich wäre doch 0x00000000 richtig, oder?

Vielleicht kann man den Flash über die gemappte Adresse ab 0x000 0000 
nur lesen (war nur geraten).

von Christoph K. (chriskuku)


Angehängte Dateien:

Lesenswert?

1. Bild zum Chip des DIYMORE-Boards
2. Bild möglicher 3,3V Wandler auf dem XTW (S2SL?)

Jetzt hat es erstmalig geklappt.*

(gdb) load
Loading section .text, size 0x3b80 lma 0x0
Start address 0x3a0e, load size 15232
Transfer rate: 118 KB/sec, 952 bytes/write.
(gdb) x /10x 0
0x0:  0x20000330  0x00003a0f  0x0000384f  0x0000384f
0x10:  0x0000384f  0x0000384f  0x0000384f  0x00000000
0x20:  0x00000000  0x00000000

*) aber nur, weil ich im Versuch die Randbedingungen verändert habe, was 
man nie machen sollte. Ich habe ja seit gestern auch einen zweiten XTW 
ST-LINK V2, den ich natürlich sofort - weil in Übung - mit den 
BMP-Binaries geflasht habe.

Dachte, die wären somit austauschbar, aber mitnichten. Der Erstere 
(schwarzes Eloxalgehäuse) funktioniert (s.o.), der zweite im rostbraunen 
Gehäuse funktioniert nicht richtig.
Vielleicht werde ich ihn noch mal flashen. Soweit bisher.

: Bearbeitet durch User
von Axel S. (a-za-z0-9)


Lesenswert?

Christoph K. schrieb:
> Ich habe ja seit gestern auch einen zweiten XTW
> ST-LINK V2, den ich natürlich sofort - weil in Übung - mit den
> BMP-Binaries geflasht habe.
>
> Dachte, die wären somit austauschbar, aber mitnichten. Der Erstere
> (schwarzes Eloxalgehäuse) funktioniert (s.o.), der zweite im rostbraunen
> Gehäuse funktioniert nicht richtig.

Vermutlich andere Hardware. Genauso wie die BMP-Firmware kann auch die 
ST-Link-Firmware praktisch beliebige GPIO für die Kommunikation mit dem 
Target benutzen. Die Firmware muß dann natürlich zur Hardware passen. 
Bei diesen ST-Links im Format eines USB-Sticks kann man von außen nicht 
sehen, was genau drin ist. Da muß man schon etwas genauer nachsehen.

von Stefan F. (Gast)


Lesenswert?

Axel S. schrieb:
> kann auch die ST-Link-Firmware praktisch beliebige GPIO
> für die Kommunikation mit dem Target benutzen.

Ich konnte meine ST-Link Klone immer problemlos mit der Software von ST 
aktualisieren. Daher nehme ich an, dass die Pinbelegung bei allen die 
gleiche sein sollte.

> Die Firmware muss dann natürlich zur Hardware passen.

Eben deswegen.

von Christoph K. (chriskuku)


Lesenswert?

Nachdem ich jetzt mit GDB/OpenOCD ein Stück weitergekommen bin (Anschluß 
des NRST Signals der SWD Schnittstelle) frage ich mich, wie das mit 
blackmagic und blue pill aussieht. Wo schließt man da den NRST an?

von Stefan F. (Gast)


Lesenswert?

Christoph K. schrieb:
> Wo schließt man da den NRST an?

Na an den Reset Eingang, wo denn sonst?

Und ja, der fehlt an der Seitenleiste. Und ja, das führt regelmäßig zu 
Schwierigkeiten.

Frag mich nicht, warum, ich habe mir das nicht ausgedacht. Die TraceSWO 
Leitung fehlt auch.

von Christoph K. (chriskuku)


Lesenswert?

Stefan ⛄ F. schrieb:
> Christoph K. schrieb:
>> Wo schließt man da den NRST an?
>
> Na an den Reset Eingang, wo denn sonst?
>
> Und ja, der fehlt an der Seitenleiste. Und ja, das führt regelmäßig zu
> Schwierigkeiten.
>
> Frag mich nicht, warum, ich habe mir das nicht ausgedacht. Die TraceSWO
> Leitung fehlt auch.

Ich meinte nicht das Target, ich meinte die Blue Pill.

von Stefan F. (Gast)


Lesenswert?

Christoph K. schrieb:
> Ich meinte nicht das Target, ich meinte die Blue Pill.

Und ich meine, das Blue Pill Board als Target. Drücke dich klarer aus!

Wenn du das Blue Pill Board als Debugger verwendest, dann schreibe das 
auch. In diesem Fall bestimmt die Software, welcher Pin als 
Reset-Ausgang verwendet wird. Das muss wohl irgendwo im Quelltext 
stehen.

von Christoph K. (chriskuku)


Lesenswert?

Stefan ⛄ F. schrieb:
> Christoph K. schrieb:
>> Ich meinte nicht das Target, ich meinte die Blue Pill.
>
> Und ich meine, das Blue Pill Board als Target. Drücke dich klarer aus!
>
> Wenn du das Blue Pill Board als Debugger verwendest, dann schreibe das
> auch. In diesem Fall bestimmt die Software, welcher Pin als
> Reset-Ausgang verwendet wird. Das muss wohl irgendwo im Quelltext
> stehen.

Titel des Threads?

von Stefan F. (Gast)


Lesenswert?

Christoph K. schrieb:
> Titel des Threads?

Der ist genau so zweideutig.

a) Mit GDB und BlackMagic ein Blue Pill Board programieren?
b) Mit GDB und BlackMagic auf einem Blue Pill Board etwas 
programieren?

von Christoph K. (chriskuku)


Lesenswert?

Stefan ⛄ F. schrieb:
> Christoph K. schrieb:
>> Titel des Threads?
>
> Der ist genau so zweideutig.
>
> a) Mit GDB und BlackMagic ein Blue Pill Board programieren?
> b) Mit GDB und BlackMagic auf einem Blue Pill Board *etwas*
> programieren?

Für mich absolut eindeutig. Wenn wir schon einen Exkurs in die Grammatik 
veranstalten wollen: Du übersiehst das Objekt:

<Akkusativ Objekt>: STM32-F407-DIY-MORE
<Subjekt(substantiviertes Verb)>: programmieren
<Adverbiale Ergänzung>:mit gdb und blackmagic blue pill

Wen oder was? STM32...
Was: programmieren
Mittels: gdb und bmp bp

Weder Dein a) noch b) lassen sich aus dem Titel herleiten

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Christoph K. schrieb:
> Weder Dein a) noch b) lassen sich aus dem Titel herleiten

Da siehst du, wie kompliziert unsere Sprache ist.

von W.S. (Gast)


Lesenswert?

Christoph K. schrieb:
> Ich setze jetzt meine Gehversuche mit dem STM32-F407-DIYMORE Board fort.
> Jetzt gewappnet mit einem BMP-geflashten Blue Pill Board.
>
> Frage zuerst: es genügt doch, wenn ich das DIYMORE-Board mit 3,3V vom
> Blue Pill Board aus versorge, brauche doch die 5V nicht, oder?
>
> Meine gdb Session hänge ich mal an.


Was hast du eigentlich vor?

Du hast noch keinerlei Plan, wie du dein Dingsda-Board mit Strom 
versorgen willst, aber du hängst erstmal ein ellenlanges Debug-Protokoll 
an.

Kriegst du denn wenigstens deine selbstgeschriebene Firmware in den µC 
deines Boards hinein - oder nicht?

Ich würde dir empfehlen, zuerst die Versorgung deines Brettl's zu 
erledigen.
Dann schreibst du deine Firmware.
Dann versuchst du, selbige in deinen µC zu programmieren - egal wie: 
ST-Link, J-Link, Bootlader, sonstige Programmieradapter.
Dann schaust du, ob und wie sich deine Firmware benimmt. Entweder toter 
Mann oder Vollfunktion oder irgend etwas dazwischen.
Dann kannst du immer noch überlegen, was da klemmen könnte und wie du es 
flott kriegst.

W.S.

von Christoph K. (chriskuku)


Lesenswert?

W.S. schrieb:
> Christoph K. schrieb:
>> Ich setze jetzt meine Gehversuche mit dem STM32-F407-DIYMORE Board fort.
>> Jetzt gewappnet mit einem BMP-geflashten Blue Pill Board.
>>
>> Frage zuerst: es genügt doch, wenn ich das DIYMORE-Board mit 3,3V vom
>> Blue Pill Board aus versorge, brauche doch die 5V nicht, oder?
>>
>> Meine gdb Session hänge ich mal an.
>
>
> Was hast du eigentlich vor?
>
> Du hast noch keinerlei Plan, wie du dein Dingsda-Board mit Strom
> versorgen willst, aber du hängst erstmal ein ellenlanges Debug-Protokoll
> an.

Die Frage nach der Versorgung via 3.3V war ja nicht grundsätzlicher oder 
essentieller Natur sondern eine rein akademische Frage.

Versorgen kann ich das Board über die USB-Schnittstelle mit der 
Langzeitperspektive, auch über die USB-Schnittstelle vielleicht mal eine 
VCOM in die Firmware hinein zu betreiben.

Aber primär geht es mir darum, das mecrispstellaris-Forth, das ich 
erfolgreich in ein stm32F407-DISC1 board geflasht habe, auch in dieses 
stm32-f407-DIYMORE board zu flashen. Ich habe den UART angepaßt an 
USART1 an PA09/P10, aber das Programm loopt noch irgendwo in der 
Initialisierung. Leider macht es auch solche Dinge, wie den Flash 
rückwärts nach 0xffff zu durchsuchen um einen freien Bereich zu finden 
(weil im Betrieb auch neue FORTH-Worte  in den Flash geschrieben 
werden). Muß wohl noch mal mit dem Autor Kontakt aufnehmen.

Die mecrispstellaris-forth Portierungen basieren alle auf .BIN files und 
der dazugehörige memmap-File mappt rom auf 0x00000000 (wo meine 
initialen Verständnisprobleme herrührten). Ich wunderte mich, warum die 
BIN files
mit der Adresse 0 klarkommen, während der .ELF File da eine 0x08000000 
braucht.



>
> Kriegst du denn wenigstens deine selbstgeschriebene Firmware in den µC
> deines Boards hinein - oder nicht?

Sowohl das komplette FORTH kriege ich hinein wie auch meine 
Minimalst-Programme.

Ich bin nur auf dem Wege dahin auf viele interessante Nebenschauplätze 
gestoßen, die mein Interesse weckten, wie z.B. die mit bmp 
umprogrammierten STLINK-V2 USB sticks und die mit bmp geflashten blue 
pills.

>
> Ich würde dir empfehlen, zuerst die Versorgung deines Brettl's zu
> erledigen.
> Dann schreibst du deine Firmware.
> Dann versuchst du, selbige in deinen µC zu programmieren - egal wie:
> ST-Link, J-Link, Bootlader, sonstige Programmieradapter.
> Dann schaust du, ob und wie sich deine Firmware benimmt. Entweder toter
> Mann oder Vollfunktion oder irgend etwas dazwischen.
> Dann kannst du immer noch überlegen, was da klemmen könnte und wie du es
> flott kriegst.
>
> W.S.

Grüße

Chrstoph

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.