Forum: Mikrocontroller und Digitale Elektronik NUCLEO STM32F411


von Janosch (Gast)


Angehängte Dateien:

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?

von noreply@noreply.com (Gast)


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.

von pegel (Gast)


Lesenswert?

Bist schon in Windows, also nimm einfach das ST Link Utility.
Das regelt alles, wenn es noch irgendwie machbar ist.

von Ralph S. (jjflash)


Lesenswert?

pegel schrieb:
> Bist schon in Windows, also nimm einfach das ST Link Utility.
> Das regelt alles, wenn es noch irgendwie machbar ist.

... und dort einen Connect under reset durchführen und anschließen 
Lockbit kontrollieren, ggf. dieses löschen

von janosch (Gast)


Lesenswert?

Danke geht wieder.
:-)

von Christopher J. (christopher_j23)


Angehängte Dateien:

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.

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.