Epoch of nRF51822: Debug with openOCD

Apr 04, 2019 15:28

Сегодня мы с вами поднимем пошаговую отладку при помощи Eclipse, openOCD и вот такого вот странного программатора, найденного на просторах AliExpress.
Вообще, будет отлично работать и с обычным JLink'ом, но это слишком тривиально и статей про то, как всё это настроить c ним в интернете полно.


А тем, кому интересно как связать дешевые компоненты друг с другом и получать от этого если не наслаждение, то хотя бы возможность пошаговой отладки, добро пожаловать под кат.


Нам понадобятся:
  • Eclipse с установленным плагином ARM и openOCD Debugging;
  • Программатор "тот самый";
  • Сама плата с процессором, который будем отлаживать.
Для установки плагина надо добавить репозиторий.
Имя: GNU ARM Eclipse Plug-ins
Адрес: http://gnuarmeclipse.sourceforge.net/updates



Далее там выбираем все, что может приглянуться. Но на самом деле важны только вот эти:



Прежде чем начинать, надо в Eclipse указать путь к openocd.exe.

Делается это в настройках: Window - > Perferences. Далее ищем вкладку с OpenOCD.



После того, как добавили и установили нужные нам плагины, идем в Debug Configurations. Создаем новую конфигурацию для GDB Open OCD Debugging.
Отключаем auto build, если собираем вне студии (например как я - через собственный makefile).



Во вкладке Debugger прописываем параметры запуска openOCD: -f interface/cmsis-dap.cfg -f target/nrf51.cfg



Во вкладке Startup указываем первую точку останова. Можно Reset_Handler (но для этого надо доабвить флаг -g3 и при сборке *.asm файлов).



Далее прошиваем нужной нам прошивкой (которая обязательно должна быть собрана с отладочной информацией при помощи указания флага сборки -g3).
Жмем кнопку Debug.

После этого произойдет запуск Open On-Chip Debugger:

Open On-Chip Debugger 0.10.0 (2019-02-10) [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 "swd". To override use 'transport select '.
cortex_m reset_config sysresetreq
adapter speed: 1000 kHz
Started by GNU ARM Eclipse
Info : Listening on port 6666 for tcl connections
Info : Listening on port 4444 for telnet connections
Info : CMSIS-DAP: SWD  Supported
Info : CMSIS-DAP: FW Version =  0.15
Info : CMSIS-DAP: Interface Initialised (SWD)
Info : SWCLK/TCK = 0 SWDIO/TMS = 1 TDI = 0 TDO = 0 nTRST = 0 nRESET = 1
Info : CMSIS-DAP: Interface ready
Info : clock speed 1000 kHz
Info : SWD DPIDR 0x0bb11477
Info : nrf51.cpu: hardware has 4 breakpoints, 2 watchpoints
Info : nrf51.cpu: external reset detected
Info : Listening on port 3333 for gdb connections
Info : accepting 'gdb' connection on tcp/3333
target halted due to debug-request, current mode: Handler PendSV
xPSR: 0x6100000e pc: 0x0000015e msp: 0x20003fb8
Info : nRF51822-QFAA(build code: H2) 256kB Flash
target halted due to debug-request, current mode: Thread
xPSR: 0xc1000000 pc: 0x000000c0 msp: 0x20004000
semihosting is enabled
target halted due to debug-request, current mode: Thread
xPSR: 0xc1000000 pc: 0x000000c0 msp: 0x20004000, semihosting
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/nrf52.cfg to disable it
target halted due to debug-request, current mode: Thread
xPSR: 0xc1000000 pc: 0x000000c0 msp: 0x20004000, semihosting
target halted due to debug-request, current mode: Thread
xPSR: 0xc1000000 pc: 0x000000c0 msp: 0x20004000, semihosting
===== arm v7m registers
(0) r0 (/32): 0xFFFFFFFF
(1) r1 (/32): 0xFFFFFFFF
(2) r2 (/32): 0xFFFFFFFF
(3) r3 (/32): 0xFFFFFFFF
(4) r4 (/32): 0xFFFFFFFF
(5) r5 (/32): 0xFFFFFFFF
(6) r6 (/32): 0xFFFFFFFF
(7) r7 (/32): 0xFFFFFFFF
(8) r8 (/32): 0xFFFFFFFF
(9) r9 (/32): 0xFFFFFFFF
(10) r10 (/32): 0xFFFFFFFF
(11) r11 (/32): 0xFFFFFFFF
(12) r12 (/32): 0xFFFFFFFF
(13) sp (/32): 0x20004000
(14) lr (/32): 0xFFFFFFFF
(15) pc (/32): 0x000000C0
(16) xPSR (/32): 0xC1000000
(17) msp (/32): 0x20004000
(18) psp (/32): 0xFFFFFFFC
(19) primask (/1): 0x00
(20) basepri (/8): 0x00
(21) faultmask (/1): 0x00
(22) control (/2): 0x00
===== Cortex-M DWT registers
И Eclipse перейдет в режим отладки.



Пользуйтесь клавишами F5, F6 и F7 для путешествия по миру ассемблера.

Staying plugged,
RJ

cmsis-dap, shel, openocd, eclipse, программирование, железки, roma_jam

Previous post Next post
Up