Hallo zusammen,
ich versuche mit grade eine Toolchain auf Basis von VisualStudio und VisualGDB (da gibt ja ne 30-tägige Trail, bevor man was latzen muss) zusammenstellen, um mit einem jTag Lock Pick Tiny2 einen Nordic-Chip zu beschreiben.
Prinzipiell scheine ich inzwischen auch Zugriff auf den Debugger in Verbindung mit dem Chip zu bekommen. Allerdings klappt das mit dem Flashen noch nicht.
Die Logdatei von VisualGDB sagt:
Warn : using fast async flash loader. This is currently supported
Warn : only with ST-Link and CMSIS-DAP. If you have issues, add
Warn : "set WORKAREASIZE 0" before sourcing nrf51.cfg to disable it
Allerdings kann ich dies nirgends als Option finden. Ich kann zwar in VisualGDB in den Debug-Settings Kommandozeilenbefehle ergänzen, aber die werden nach und nicht vor dem -target nrf51 eingefügt (Ausgabe aus dem Verbindungstest):
C:\Users\cysig\AppData\Local\VisualGDB\EmbeddedDeb ugPackages\com.sysprogs.arm.openocd\bin\openocd.ex e -c "adapter_khz 500" -f interface/ftdi/jtag-lock-pick_tiny_2.cfg -c "transport select swd" -f target/nrf51.cfg set WORKAREASIZE 0 -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
adapter speed: 500 kHz
Info : FTDI SWD mode enabled
swd
cortex_m reset_config sysresetreq
adapter speed: 1000 kHz
VisualGDB_OpenOCD_Ready
Info : clock speed 1000 kHz
Info : SWD DPIDR 0x0bb11477
Info : nrf51.cpu: hardware has 4 breakpoints, 2 watchpoints
Info : accepting 'telnet' connection on tcp/4444
shutdown command invoked
Info : dropped 'telnet' connection
32277
Wenn ich den Blink-Code dann hochladen möchte, bekomme ich einen SIGINT-Fehler.
32278
Als Neuling auf dem Gebiet VisualStudio und VisualGDB tu ich mir noch etwas schwer den Workflow von VS zu verinnerlichen. Eine Suche gab zwar Treffer hinsichtlich dem WORKAREASIZE 0, jedoch habe ich keine Ahnung, wie eich dies einbinden kann.
Hmmm...so ganz klappt die Kommunikation mit dem nRF51 noch nicht.
Der VisualGSB-Support meinte, ich soll das
set WORKAREASIZE 0[code] an den Anfang meiner target.cfg einbinden:
You can try adding "set WORKAREASIZE 0" at the beginning of the %LOCALAPPDATA%\VisualGDB\EmbeddedDebugPackages\com .sysprogs.arm.openocd\share\openocd\scripts\target \nrf51.cfg file
Aber eine Kommunikation mit dem nRF51 schlägt immer noch fehl:
[code]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 : FTDI SWD mode enabled
swd
cortex_m reset_config sysresetreq
adapter speed: 1000 kHz
VisualGDB_OpenOCD_Ready
Info : clock speed 1000 kHz
Info : SWD DPIDR 0x0bb11477
Info : nrf51.cpu: hardware has 4 breakpoints, 2 watchpoints
Info : accepting 'gdb' connection on tcp/50327
Info : nRF51822-CEAA(build code: C0) 256kB Flash
undefined debug reason 7 - target needs reset
Error: address + size wrapped(0xfffffffe, 0x00000004)
nrf51.cpu: target state: halted
target halted due to debug-request, current mode: Thread
xPSR: 0xc1000000 pc: 0x000006d0 msp: 0x000007c0
nrf51.cpu: target state: halted
target halted due to debug-request, current mode: Thread
xPSR: 0xc1000000 pc: 0x000006d0 msp: 0x000007c0
Warn : not enough working area available(requested 32)
Warn : no working area available, falling back to slow memory writes
nrf51.cpu: target state: halted
target halted due to debug-request, current mode: Thread
xPSR: 0xc1000000 pc: 0x000006d0 msp: 0x000007c0
Error: nrf51.cpu -- clearing lockup after double fault
Polling target nrf51.cpu failed, trying to reexamine
Info : nrf51.cpu: hardware has 4 breakpoints, 2 watchpoints
Error: address + size wrapped(0xfffffffe, 0x00000004)
Error: nrf51.cpu -- clearing lockup after double fault
Polling target nrf51.cpu failed, trying to reexamine
Info : nrf51.cpu: hardware has 4 breakpoints, 2 watchpoints
Error: address + size wrapped(0xfffffffe, 0x00000004)
Error: nrf51.cpu -- clearing lockup after double fault
Polling target nrf51.cpu failed, trying to reexamine
Info : nrf51.cpu: hardware has 4 breakpoints, 2 watchpoints
Error: address + size wrapped(0xfffffffe, 0x00000004)
Error: nrf51.cpu -- clearing lockup after double fault
Polling target nrf51.cpu failed, trying to reexamine
Info : nrf51.cpu: hardware has 4 breakpoints, 2 watchpoints
Error: address + size wrapped(0xfffffffe, 0x00000004)
- - - Aktualisiert - - -
Nachdem ich zunächst als VisualGDB-Ausgabe immer eine SIGINT-Meldung bekommen habe, hab ich als ergänzende Attribute
handle SIGINT nostop
angehangen (Quelle: http://stackoverflow.com/questions/29599886/cortex-m3-cant-debug-reason-sigint).
Daraufhin lief GDB ohne weitere Meldung durch und die Logdatei spuckt folgendes aus:
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 : FTDI SWD mode enabled
swd
cortex_m reset_config sysresetreq
adapter speed: 1000 kHz
Info : clock speed 1000 kHz
Info : SWD DPIDR 0x0bb11477
Info : nrf51.cpu: hardware has 4 breakpoints, 2 watchpoints
nrf51.cpu: target state: halted
target halted due to debug-request, current mode: Thread
xPSR: 0xc1000000 pc: 0x000006d0 msp: 0x000007c0
VisualGDB_OpenOCD_Ready
Info : accepting 'gdb' connection on tcp/50423
Info : nRF51822-CEAA(build code: C0) 256kB Flash
nrf51.cpu: target state: halted
target halted due to debug-request, current mode: Thread
xPSR: 0xc1000000 pc: 0x000006d0 msp: 0x000007c0
nrf51.cpu: target state: halted
target halted due to debug-request, current mode: Thread
xPSR: 0xc1000000 pc: 0x000006d0 msp: 0x000007c0
Eigentlich war ich davon ausgegangen, dass ich nun als Output des Blink-Samples eine blinkende LED auf dem entsprechenden Pin haben sollte:
#include <stdbool.h>
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
#include "nrf_delay.h"
#include "nrf_gpio.h"
#ifdef __cplusplus
}
#endif
int main(void)
{
nrf_gpio_cfg_output(13);
for (;;)
{
nrf_gpio_pin_set(13);
nrf_delay_ms(500);
nrf_gpio_pin_clear(13);
nrf_delay_ms(500);
}
}
Aber es regt sich nichts.
Ich schätze mal, dass ich nach dem Flashen irgendwie dem Gerät sagen muss, dass es den Code abarbeiten muss?
Solande VisualGDB aktiv ist, signalisiert mir die Übertragungs-LED am jTag-Lock-Pick Tiny 2 eine aktive Verbindung. Wenn ich das Debugging anhalte, härt die auf zu flackern.
Raw Output from GDB:
Your VisualGDB trial expires in 28 days!
c:\SysGCC\arm-eabi\bin\arm-eabi-gdb.exe --interpreter mi C:\SyncDataC\VisualProjects\nRfBlinkAllSolution\Vi sualGDB\Debug\nRfBlinkAll
-gdb-version
=thread-group-added,id="i1"
~"GNU gdb (GDB) 7.12\n"
~"Copyright (C) 2016 Free Software Foundation, Inc.\n"
~"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\nThis is free software: you are free to change and redistribute it.\nThere is NO WARRANTY, to the extent permitted by law. Type \"show copying\"\nand \"show warranty\" for details.\n"
~"This GDB was configured as \"--host=i686-pc-mingw32 --target=arm-eabi\".\nType \"show configuration\" for configuration details."
~"\nFor bug reporting instructions, please see:\n"
~"<http://www.gnu.org/software/gdb/bugs/>.\n"
~"Find the GDB manual and other documentation resources online at:\n<http://www.gnu.org/software/gdb/documentation/>.\n"
~"For help, type \"help\".\n"
~"Type \"apropos word\" to search for commands related to \"word\"...\n"
~"Reading symbols from C:\\SyncDataC\\VisualProjects\\nRfBlinkAllSolution \\VisualGDB\\Debug\\nRfBlinkAll..."
~"done.\n"
~"GNU gdb (GDB) 7.12\n"
~"Copyright (C) 2016 Free Software Foundation, Inc.\n"
~"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\nThis is free software: you are free to change and redistribute it.\nThere is NO WARRANTY, to the extent permitted by law. Type \"show copying\"\nand \"show warranty\" for details.\n"
~"This GDB was configured as \"--host=i686-pc-mingw32 --target=arm-eabi\".\nType \"show configuration\" for configuration details."
~"\nFor bug reporting instructions, please see:\n"
~"<http://www.gnu.org/software/gdb/bugs/>.\n"
~"Find the GDB manual and other documentation resources online at:\n<http://www.gnu.org/software/gdb/documentation/>.\n"
~"For help, type \"help\".\n"
~"Type \"apropos word\" to search for commands related to \"word\".\n"
^done
-list-features
^done,features=["frozen-varobjs","pending-breakpoints","thread-info","data-read-memory-bytes","breakpoint-notifications","ada-task-info","language-option","info-gdb-mi-command","undefined-command-error-code","exec-run-start-option"]
-gdb-set disassembly-flavor intel
^error,msg="No symbol \"disassembly\" in current context."
-gdb-set print demangle off
^done
-break-insert -f main
^done,bkpt={number="1",type="breakpoint",disp="keep",enabled="y",addr="0x0001c16a",func="main()",file="LEDBlink.cpp",fullname="C:\\SyncDataC\\VisualProjects\\nRfBlinkAllSolution \\nRfBlinkAll\\LEDBlink.cpp",line="20",thread-groups=["i1"],times="0",original-location="main"}
set remotetimeout 60
&"set remotetimeout 60\n"
=cmd-param-changed,param="remotetimeout",value="60"
^done
target remote :53092
&"target remote :53092\n"
~"Remote debugging using :53092\n"
=thread-group-started,id="i1",pid="42000"
=thread-created,id="1",group-id="i1"
~"0x000006d0 in ?? ()\n"
*stopped,frame={addr="0x000006d0",func="??",args=[]},thread-id="1",stopped-threads="all"
^done
info shared
&"info shared\n"
~"No shared libraries loaded at this time.\n"
^done
mon reset init
&"mon reset init\n"
@"nrf51.cpu: target state: halted\n"
@"target halted due to debug-request, current mode: Thread \n"
@"xPSR: 0xc1000000 pc: 0x000006d0 msp: 0x000007c0\n"
^done
load
&"load\n"
~"Loading section .softdevice, size 0x1b000 lma 0x0\n"
+download,{section=".softdevice",section-size="110592",total-size="208334"}
+download,{section=".softdevice",section-sent="16224",section-size="110592",total-sent="16224",total-size="208334"}
~"Loading section .isr_vector, size 0xc0 lma 0x1b000\n"
+download,{section=".isr_vector",section-size="192",total-size="208334"}
~"Loading section .text, size 0x1290 lma 0x1b0c0\n"
+download,{section=".text",section-size="4752",total-size="208334"}
~"Loading section .init_array, size 0x4 lma 0x1c350\n"
+download,{section=".init_array",section-size="4",total-size="208334"}
~"Loading section .fini_array, size 0x4 lma 0x1c354\n"
+download,{section=".fini_array",section-size="4",total-size="208334"}
~"Loading section .data, size 0x4 lma 0x1c358\n"
+download,{section=".data",section-size="4",total-size="208334"}
~"Start address 0x1c024, load size 115548\n"
~"Transfer rate: 6 KB/sec, 9629 bytes/write.\n"
^done
mon reset init
&"mon reset init\n"
@"nrf51.cpu: target state: halted\n"
@"target halted due to debug-request, current mode: Thread \n"
@"xPSR: 0xc1000000 pc: 0x000006d0 msp: 0x000007c0\n"
^done
-data-evaluate-expression "sizeof(void *)"
-data-evaluate-expression "sizeof(int)"
^done,value="4"
^done,value="4"
-data-evaluate-expression "sizeof(short)"
^done,value="2"
-data-evaluate-expression "sizeof(long)"
^done,value="4"
-data-evaluate-expression "sizeof(long long)"
^done,value="8"
-data-evaluate-expression "sizeof(char)"
^done,value="1"
-data-evaluate-expression "sizeof(wchar_t)"
^error,msg="No symbol \"wchar_t\" in current context."
-data-evaluate-expression "sizeof(float)"
^done,value="4"
-data-evaluate-expression "sizeof(double)"
^done,value="8"
-data-evaluate-expression "sizeof(long double)"
^done,value="8"
info target
&"info target\n"
~"Symbols from \"C:\\SyncDataC\\VisualProjects\\nRfBlinkAllSolution \\VisualGDB\\Debug\\nRfBlinkAll\".\n"
~"Remote serial target in gdb-specific protocol:\n"
~"Debugging a target over a serial line.\n"
~"\tWhile running this, GDB does not access memory from...\n"
~"Local exec file:\n"
~"\t`C:\\SyncDataC\\VisualProjects\\nRfBlinkAllSolut ion\\VisualGDB\\Debug\\nRfBlinkAll', file type elf32-littlearm.\n"
~"\tEntry point: 0x1c024\n"
~"\t0x00000000 - 0x0001b000 is .softdevice\n"
~"\t0x20000000 - 0x20001fe8 is .softdevice_sram\n"
~"\t0x0001b000 - 0x0001b0c0 is .isr_vector\n"
~"\t0x0001b0c0 - 0x0001c350 is .text\n"
~"\t0x0001c350 - 0x0001c354 is .init_array\n"
~"\t0x0001c354 - 0x0001c358 is .fini_array\n"
~"\t0x20001fe8 - 0x20001fec is .data\n"
~"\t0x20001fec - 0x20002074 is .bss\n"
^done
-data-evaluate-expression "&_estack"
^done,value="0x20004000"
-var-create - * "*((void **)0x20003ffc)"
^done,name="var1",numchild="0",value="0x78723d7a",type="void *",has_more="0"
-var-assign "var1" 0x105d5a2d
^done,value="0x105d5a2d"
-data-evaluate-expression "\*\(\(void\ \*\*\)0x20003ffc\)"
^done,value="0x105d5a2d"
-exec-continue
^running
*running,thread-id="all"
~"Note: automatically using hardware breakpoints for read-only addresses.\n"
Inzwischen hab eich eine Lösung gefunden.
VisualGDB hat mir permanent folgendes an den Kopf geworfen:
Error erasing flash with vFlashErase packet
Zunächt einmal habe ich OpenOCD heruntergeladen und per Windows 10 SuperShell über meinen Programmer (jTag Lock-Pick Tiny2, ein ebenfalls günstiger ST-Link v2 müste aber genau funktionieren, entsprechend Interface in der Kommandozeile anpassen) auf den nRF51422 zugegriffen:
.\openocd.exe -s /openocd010/scripts/ -f interface/ftdi/jtag-lock-pick_tiny_2.cfg -c "transport select swd" -f target/nrf51_stlink.tcl
Nun kann man per telnet auf den Mikrokontroller zugreifen.
Hierzu habe ich Putty genutzt:
telnet auswählen, als
IP 127.0.0.1 und Port: 4444
eine nRF51822-Testplatine habe ich sofort per
nRF51 mass_erase
löschen und über VisualStudio mit VisualGDB neu beschreiben können.
Meine nRF51422-Platine hingegen spuckte mir den Fehler aus
Open On-Chip Debugger > nrf51 mass_erase
nRF51822-CEAA(build code: C0) 256kB Flash
Target not halted
> halt
Halt timed out, wake up GDB.
timed out while waiting for target halted
Kurzes Ausprobierer ergab hiermit Erfolg:
> reset halt
nrf51.cpu: target state: halted
target halted due to debug-request, current mode: Thread
xPSR: 0xc1000000 pc: 0x000006d0 msp: 0x000007c0
> nrf51 mass_erase
>
Und nun kann ich per VisualGDB auch auf meinen nRF51422 zugreifen.
Bei mikrokontroller.net wurde ich auf ein Video aufmerksam gemacht, das die Beschreibung des Chips in Zusammenhang zum verbauten Speicher aufschlüsselt:
https://www.youtube.com/watch?v=Nuh7qKAanyM&t=1m24s
Daher konnte ich nun den richtigen Chip in der nRF51-Familie auswählen und meine Test-LED blinkt nun ;)
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.