NUCLEO STM32F411

Gast #4958546
Lesenswert?

Hallo,

habe wohl meinen on board STLINK v2 durch Software zerschossen.
Bekomme diese Meldung von VisualGDB.


C:..\AppData\Local\VisualGDB\EmbeddedDebugPackages\com.sysprogs.arm.open 
ocd\bin\openocd.exe  -f interface/stlink-v2-1.cfg -f target/stm32f4x.cfg 
-c init -c "reset init" -c "echo VisualGDB_OpenOCD_Ready"
Open On-Chip Debugger 0.9.0 (2016-10-14) 
[https://github.com/sysprogs/openocd]
Licensed under GNU GPL v2
For bug reports, read
  http://openocd.org/doc/doxygen/bugs.html
Info : auto-selecting first available session transport "hla_swd". To 
override use 'transport select <transport>'.
Info : The selected transport took over low-level target control. The 
results might differ compared to plain JTAG/SWD
adapter speed: 2000 kHz
adapter_nsrst_delay: 100
none separate
Info : Unable to match requested speed 2000 kHz, using 1800 kHz
Info : Unable to match requested speed 2000 kHz, using 1800 kHz
Info : clock speed 1800 kHz
Info : STLINK v2 JTAG v28 API v2 SWIM v18 VID 0x0483 PID 0x374B
Info : using stlink api v2
Info : Target voltage: 3.265079
Error: init mode failed (unable to connect to the target)
in procedure 'init'
in procedure 'ocd_bouncer'




Habe noch ein zweites Nucleo board. Auf dem funktioniert eine einfache 
Application wie erwartet noch wunderbar.
Diese Application, mit der ich mir den ersten Nucleo zerschossen habe, 
traue ich mich nun nicht auf den zweiten zu flashen.

Kann man das board irgendwie wieder "flott" bekommen?
Angehängte Dateien:
Gast #4958584
Lesenswert?

Janosch schrieb:
> Info : Target voltage: 3.265079
> Error: init mode failed (unable to connect to the target)

Ich würde eher lesen, das der "Programmer" das Zielsystem nicht findet. 
Warum kann ich nicht sagen. Mit der Doku könnte man ein anderes System 
mal am SWD des STLink V2 anschließen, so es den bei dem Board 
rausgeführt ist.
#4959654
Lesenswert?

Den "connect under reset" kann man auch manuell ausführen (im warsten 
Sinne des Wortes). Man hält den Reset-Knopf am Nucleo oder was auch 
immer für ein Board man vor sich hat und startet OpenOCD (bzw. klickt 
auf den Flash-Button in der IDE der OOCD startet). Sobald OpenOCD 
startet lässt man den wieder los und alles sollte wie gehabt 
funktionieren. Wartet man allerdings zu lange, dann gibt es einen 
Timeout und es erscheint in der Ausgabe ein
1
Error: timed out while waiting for target halted

Mal im Klartext:
Die oben beschriebene Fehlermeldung kommt immer dann, wenn man an seinem 
Controller die SWD-Pins umkonfiguriert und sich somit quasi aussperrt. 
Konfiguriert man bei einem Nucleo F4 beispielsweise den LED-Pin als 
Ausgang und schreibt
1
GPIOA->MODER = (0b01 << (LED_PIN << 1));

anstatt
1
GPIOA->MODER |= (0b01 << (LED_PIN << 1));

dann hat man "erfolgreich" die SWD-Pins (die ebenfalls an GPIOA hängen) 
als Input konfiguriert (lediglich  | macht hier einen gewaltigen 
Unterschied). Nun kann man während das Programm läuft nicht mehr per SWD 
auf den Controller zugreifen. Die Rettung ist aber, das die Pins im 
Reset-Zustand als SWD konfiguriert sind, daher auch das "connect under 
reset" als Lösung.

Wer es ausprobieren möchte kann folgendermaßen mal ein "blinky of death" 
flashen und sich aussperren (siehe Anhang).
1
openocd -f interface/stlink-v2-1.cfg -f target/stm32f4x.cfg -c "program blinky_of_death.bin verify reset exit 0x08000000"

Die Rolle rückwärts macht man dann einfach mit irgendeinem Programm, bei 
dem die SWD-Pins nicht umkonfiguriert wurden, z.B. dem "blinky of 
life" (zur Abwechslung mal als .elf, siehe Anhang).
1
openocd -f interface/stlink-v2-1.cfg -f target/stm32f4x.cfg -c "program blinky_of_life.elf verify reset exit"

Nochmal der Ablauf:

1. Reset drücken und halten
2. OpenOCD starten (per Kommandozeile oder IDE)
3. Reset loslassen (binnen etwa zwei Sekunden)

Fertig.
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren