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?
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.
Bist schon in Windows, also nimm einfach das ST Link Utility. Das regelt alles, wenn es noch irgendwie machbar ist.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.