Forum: Mikrocontroller und Digitale Elektronik stm32 uart flash reset über gpio?


von Paul G. (paul_g210) Benutzerseite


Lesenswert?

Hi

Ich bin STM32 NOOB. Habe ein "Blue Pill" bekommen
und flashe bequem vom Sofa über SSH zu meinem Raspberry Pi
an dem der/das/die? Blue Pill via USB-FTDI Adapter hängt.

Also ich nun "stm32flash" auf dem Raspberry installiert habe
und die Optionen angesehen habe ist mir diese Option ins Auge gestochen:
1
-i GPIO_string  GPIO sequence to enter/exit bootloader mode
2
                        GPIO_string=[entry_seq][:[exit_seq]]
3
                        sequence=[[-]signal]&|,[sequence]

Da entsprang mir der Gedanke folgender Idee:

Mein BOOT0 Jumper muss ja auf 1 stehen damit ich flashen kann, trotzdem
muss ich jedes mal von meinem Sofa aufstehen um den Reset Knopf zu 
drücken.

Kann man nicht mit etwas Löten den Reset pin an einen GPIO Pin hängen 
und dann via "Software" RESET auslösen und flashen und ich weiter auf 
meinem gemütlichen Sofa dick werden kann? Oder hat diese GPIO Funktion 
in "stm32flash" eine andere Bewandtnis?

von Jim M. (turboj)


Lesenswert?

Paul G. schrieb:
> Kann man nicht mit etwas Löten den Reset pin an einen GPIO Pin hängen
> und
> dann via "Software" RESET auslösen und flashen und ich weiter auf meinem
> gemütlichen Sofa dick werden kann?

Könnte man.

Man könnte dann aber auch gleich direkt den SWD an den RPi anlöten und 
via OpenOCD flashen.

Dann kannste sogar debuggen vom Sofa!

von Einer K. (Gast)


Lesenswert?

Hmmm...

Mach einen Bootloader drauf...

;-)

von pegel (Gast)


Lesenswert?

Oder opfere ein BluePill und mach ein "Black Magic Probe" draus.
Brauchst dann keinen ST-Link.

Dann kannst Du beliebig mit gdb auf deinen Test BluePill zugreifen.

https://satoshinm.github.io/blog/171223_jtagswdpillblink_jtagswd_debugging_via_black_magic_probe_on_an_stm32_blue_pill_and_blinking_a_led_using_stm32cubemx_libopencm3_and_bare_metal_c.html

von Paul G. (paul_g210) Benutzerseite


Lesenswert?

Arduino Fanboy D. schrieb:
> Mach einen Bootloader drauf...

Geht nicht, ich brauche jedes KB Speicher weil FatFs schon so viel 
frisst...

pegel schrieb:
> Oder opfere ein BluePill und mach ein "Black Magic Probe" draus.

Wenn ich zwei hätte dann ja ;)

Jim M. schrieb:
> Man könnte dann aber auch gleich direkt den SWD an den RPi anlöten und
> via OpenOCD flashen.
>
> Dann kannste sogar debuggen vom Sofa!

Das klingt interessant. Das heißt ich müsste die SWDIO/SWDCLK am 
Bluepill
mit diversen GPIO's am Raspi verbinden?

von N. C. (nixchecker)


Lesenswert?

Hast Du zufällig ein SOIC-8 Clip übrig?

Zum Ausgleich schicke ich dir ein BluePill.

von N. C. (nixchecker)


Lesenswert?

Bei Bedarf auch schon als BMP geflasht.

von Paul G. (paul_g210) Benutzerseite


Lesenswert?

N. C. schrieb:
> Hast Du zufällig ein SOIC-8 Clip übrig?

Nee, sorry.

von pegel (Gast)


Lesenswert?


von Paul G. (paul_g210) Benutzerseite


Lesenswert?

Danke, bin auch hier fündig geworden:

https://iosoft.blog/2019/01/28/raspberry-pi-openocd/

von Paul G. (paul_g210) Benutzerseite


Lesenswert?

Also ich habe jetzt alles verkabelt:
1
RPi2B                BluePill
2
---------------------------------
3
3.3V                 3.3V
4
GND                  GND
5
bcm2835gpio 11       SWCLK
6
bcm2835gpio 25       SWIO
Meine config sieht so aus:

rpi3.cfg
1
adapter driver bcm2835gpio
2
bcm2835gpio_peripheral_base 0x3F000000
3
bcm2835gpio_speed_coeffs 146203 36
4
bcm2835gpio_swd_nums 11 25

Dann starte ich openocd zum Test:
1
# sudo openocd -f rpi3.cfg -c "transport select swd" -c "adapter speed 1000" -f target/stm32f1x.cfg
2
Open On-Chip Debugger 0.10.0+dev-01177-gb9a30e08-dirty (2020-04-13-12:01)
3
BCM2835 GPIO nums: swclk = 11, swdio = 25
4
5
swd
6
adapter speed: 1000 kHz
7
8
Info : Listening on port 6666 for tcl connections
9
Info : Listening on port 4444 for telnet connections
10
Info : BCM2835 GPIO JTAG/SWD bitbang driver
11
Info : SWD only mode enabled (specify tck, tms, tdi and tdo gpios to add JTAG mode)
12
Info : clock speed 1001 kHz
13
Info : SWD DPIDR 0x2ba01477
14
Info : stm32f1x.cpu: hardware has 6 breakpoints, 4 watchpoints
15
Info : stm32f1x.cpu: external reset detected
16
Info : starting gdb server for stm32f1x.cpu on 3333
17
Info : Listening on port 3333 for gdb connections

Funktioniert also soweit... Will ich aber nun ein Testprogramm aus 
CubeIDE (*.elf file) auf den/der/die? BluePill laden bekomme ich diese 
Meldung:
1
sudo openocd -f rpi3.cfg -c "transport select swd" -c "adapter speed 1000" -c "program /tmp/sd-card-spi.elf verify reset exit" -f target/stm32f1x.cfg
2
BCM2835 GPIO nums: swclk = 11, swdio = 25
3
4
swd
5
adapter speed: 1000 kHz
6
7
Info : BCM2835 GPIO JTAG/SWD bitbang driver
8
Info : SWD only mode enabled (specify tck, tms, tdi and tdo gpios to add JTAG mode)
9
Info : clock speed 1001 kHz
10
Warn : gdb services need one or more targets defined
11
** Unable to reset target **
12
shutdown command invoked
13
embedded:startup.tcl:558: Error: 
14
at file "embedded:startup.tcl", line 558

Fehlt also vermutlich irgdendeine RESET line...?

Jetzt habe ich "srst" in die Config geschrieben und Kabel an GPIO 24:
1
bcm2835gpio_srst_num 24

Okay, aber wo genau stecke ich nun das Reset Kabel vom Rpi am Bluepill 
rein?
Muss das in den Mittelpin vom BOOT0 Jumper?

von pegel (Gast)


Lesenswert?

Paul G. schrieb:
> BOOT0 Jumper

Beide Jumper erst einmal in Richtung der USB-Buchse stecken.

von Paul G. (paul_g210) Benutzerseite


Lesenswert?

pegel schrieb:
> Paul G. schrieb:
>> BOOT0 Jumper
>
> Beide Jumper erst einmal in Richtung der USB-Buchse stecken.

Habe ich, selbe Fehlermeldung

von pegel (Gast)


Lesenswert?

Bei richtiger Konfiguration des openocd braucht es kein Reset.

Aber wenn Du schon eins hast, der 4. Pin in Höhe der Jumper.
Ist mit R bezeichnet.

von Paul G. (paul_g210) Benutzerseite


Lesenswert?

pegel schrieb:
> Bei richtiger Konfiguration des openocd braucht es kein Reset.
>
> Aber wenn Du schon eins hast, der 4. Pin in Höhe der Jumper.
> Ist mit R bezeichnet.

Man, ich hab heute Tomaten auf den Augen, extra den Pinout ausgedruckt
und laminiert und dann finde ich das R nicht :D...

Nichtsdestotrotz

Immer noch:
** Unable to reset target **

pegel schrieb:
> Beide Jumper erst einmal in Richtung der USB-Buchse stecken.

Dann wären BOOT0 und BOOT1 auf 0...
Damit erkennt dann aber openocd den Blue Pill gar nicht mehr, oder muss 
das so sein...

von pegel (Gast)


Lesenswert?

Paul G. schrieb:
> Dann wären BOOT0 und BOOT1 auf 0

So soll es sein.
Muss also an der Konfiguration liegen.
Mach das mit der Reset Leitung wieder rückgängig.

Du musst zuerst den funktionierenden Zustand wieder herstellen.

Notfalls mit "Connect under Reset".
Vielleicht hast Du schon etwas übertragen und so das SWD im STM32 
abgeschaltet.

von pegel (Gast)


Lesenswert?

Hast Du das Projekt mit CubeMX/CubeIDE erstellt?

Dann ruf das CubeMX Projekt noch mal auf und sieh nach ob SWD 
eingeschaltet ist.
Bei Projekt Erstellung ist das nicht eingeschaltet!

von Paul G. (paul_g210) Benutzerseite


Angehängte Dateien:

Lesenswert?

pegel schrieb:
> Bei Projekt Erstellung ist das nicht eingeschaltet!

Äm ja...

- Also nochmal alles von vorne, RESET entfernt.
- Neues einfaches simpleBlink Project in CubeIde
- Unter SYS --> DEBUG auf SERIAL WIRE
- Unter Properties->Run/Debug->Debugger ST-LINK(OPENOCD)
- simpleBlink.elf via UART geflasht (läuft)
- BOOT0/BOOT1 auf 0
- (RPi) alle openocd configs gelöscht

Jetzt nur zum Testen:
1
# sudo openocd -f interface/raspberrypi2-native.cfg -c "transport select swd" -f /usr/share/openocd/scripts/board/stm32f103c8_blue_pill.cfg
2
Open On-Chip Debugger 0.10.0+dev-01177-gb9a30e08-dirty (2020-04-13-16:34)
3
BCM2835 GPIO nums: swclk = 11, swdio = 25
4
5
swd
6
Info : Listening on port 6666 for tcl connections
7
Info : Listening on port 4444 for telnet connections
8
Info : BCM2835 GPIO JTAG/SWD bitbang driver
9
Info : JTAG and SWD modes enabled
10
Info : clock speed 1001 kHz
11
Info : SWD DPIDR 0x2ba01477
12
Info : stm32f1x.cpu: hardware has 6 breakpoints, 4 watchpoints
13
Info : starting gdb server for stm32f1x.cpu on 3333
14
Info : Listening on port 3333 for gdb connections

Soweit so gut...

von pegel (Gast)


Lesenswert?

Die CubeIDE läuft auf dem Raspi?

von Bauform B. (bauformb)


Lesenswert?

Paul G. schrieb:
> Info : BCM2835 GPIO JTAG/SWD bitbang driver
> Info : SWD only mode enabled (specify tck, tms, tdi and tdo gpios to add
> JTAG mode)
> Info : clock speed 1001 kHz
> Warn : gdb services need one or more targets defined

> Fehlt also vermutlich irgdendeine RESET line...?

Keine Ahnung, was gdb services sind, aber anscheinend fehlt etwas in 
irgendeiner config?

von Paul G. (paul_g210) Benutzerseite


Lesenswert?

pegel schrieb:
> Die CubeIDE läuft auf dem Raspi?

Nein, mit dem Raspi will ich nur flashen, bauen tuh ichs auf meinem 
Läptop auf dem CubeIde installiert ist (ArchLinux) und dann will ich die 
fertig kompilierten binaries auf den Raspi senden (via scp) und auf den 
Blue Pill laden...

Mir gings eigentlich nur darum zu flashen ohne aufstehen zu müssen und 
den Reset Knopf zu drücken... Ums debuggen gings eigentlich überhaupt 
nicht aber wenn das per openocd remote von meinem Läptop zu Raspi auch 
geht, warum nicht :D

von pegel (Gast)


Lesenswert?

Dann wähle:

Connect to remote GDB server

und trage Name oder IP des RasPi ein.

Wenn Du dann noch das sudo Problem beseitigst, ist der Sessel sehr nah.

von Paul G. (paul_g210) Benutzerseite


Lesenswert?

Ahh, Erfolg!

Ich habe gerade nochmal das Flashen probiert und es klappte mit dem 
Befehl:
1
# sudo openocd -f interface/raspberrypi2-native.cfg -c "transport select swd" -f /usr/share/openocd/scripts/board/stm32f103c8_blue_pill.cfg -c "program /tmp/simpleBlink.bin verify reset exit"
2
3
BCM2835 GPIO nums: swclk = 11, swdio = 25
4
5
swd
6
Info : BCM2835 GPIO JTAG/SWD bitbang driver
7
Info : JTAG and SWD modes enabled
8
Info : clock speed 1001 kHz
9
Info : SWD DPIDR 0x2ba01477
10
Info : stm32f1x.cpu: hardware has 6 breakpoints, 4 watchpoints
11
Info : stm32f1x.cpu: external reset detected
12
Info : starting gdb server for stm32f1x.cpu on 3333
13
Info : Listening on port 3333 for gdb connections
14
target halted due to debug-request, current mode: Thread 
15
xPSR: 0x01000000 pc: 0x08000398 msp: 0x20005000
16
** Programming Started **
17
Info : device id = 0x20036410
18
Info : ignoring flash probed value, using configured bank size
19
Info : flash size = 128kbytes
20
Warn : no flash bank found for address 0x00000000
21
** Programming Finished **
22
** Verify Started **
23
** Verified OK **
24
** Resetting Target **
25
shutdown command invoked
Und das Programm läuft sofort. :)

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.