GDB не может подключиться к OpenOCD на STM32 - PullRequest
2 голосов
/ 06 мая 2019

Попытка отладки моего примера кода blink_led на плате STM32L476 Nucleo-64, но GDB не может подключиться к OpenOCD (соединение прерывается почти мгновенно с ошибкой). Я прочитал много постов тут и там, но ни один из них не помог. Попытка добавления команд в OpenOCD с использованием -c, но без изменения поведения.

Мой код компилируется как в Release, так и в Debug config в Eclipse. Я могу прошить файл bin с помощью перетаскивания (пока на плате есть встроенная надстройка STLink) и выглядит, что код отлично работает на плате (светодиод мигает).

Кросс-компиляция на Centos7 с использованием следующих версий:

  • Toolchain (gdb): gcc-arm-none-eabi-8-2018-q4-major
  • OpenOCD: 0.10.0-11-20190118-1134

Поскольку использование eclipse не сработало, я попробовал командную строку,

(я не опытный разработчик в этой среде, поэтому я не смог найти файл конфигурации ближе к моей плате stm32l476, чем stm32l4discovery.cfg, пожалуйста, дайте мне знать, если при его использовании могут возникнуть проблемы)

./bin/openocd -f scripts/board/stm32l4discovery.cfg -c "init"

начинается,

GNU MCU Eclipse 64-bit Open On-Chip Debugger 0.10.0+dev-00462-gdd1d90111 (2019-01-18-11:37)
Licensed under GNU GPL v2
For bug reports, read
    http://openocd.org/doc/doxygen/bugs.html
Info : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD
adapter speed: 500 kHz
adapter_nsrst_delay: 100
none separate
srst_only separate srst_nogate srst_open_drain connect_deassert_srst
Info : clock speed 500 kHz
Info : STLINK V2J28M17 (API v2) VID:PID 0483:374B
Info : Target voltage: 3.244386
Info : stm32l4x.cpu: hardware has 6 breakpoints, 4 watchpoints
Info : Listening on port 3333 for gdb connections
Info : Listening on port 6666 for tcl connections
Info : Listening on port 4444 for telnet connections

Затем запускается GDB:

./arm-none-eabi-gdb ~/eclipse-workspace/test-blink-led/Debug/test-blink-led.elf

затем выполните следующую команду в GDB:

(gdb) target remote localhost:3333
Remote debugging using localhost:3333
Remote connection closed

Как показывает, соединение GDB мгновенно обрывается, и OpenOCD выдает следующие ошибки:

Info : accepting 'gdb' connection on tcp/3333
target halted due to debug-request, current mode: Thread 
xPSR: 0x01000000 pc: 0x080022e6 msp: 0x20017ff8
Info : device id = 0x10076415
Warn : STM32 flash size failed, probe inaccurate - assuming 1024k flash
Info : flash size = 1024kbytes
Error: auto_probe failed
Error: Connect failed. Consider setting up a gdb-attach event for the target to prepare target for GDB connect, or use 'gdb_memory_map disable'.
Error: attempted 'gdb' connection rejected
Error: jtag status contains invalid mode value - communication failure
Polling target stm32l4x.cpu failed, trying to reexamine
Examination failed, GDB will be halted. Polling again in 100ms

Так что из тех гиков, которые делают это на аналогичной платформе ежедневно, может кто-нибудь помочь и сказать мне, где я делаю неправильно. Может ли отсутствие какого-либо флага времени компиляции привести к этой проблеме?

Я почесываю голову уже пару дней, поэтому, пожалуйста, дайте мне ваши подсказки.

1 Ответ

1 голос
/ 07 мая 2019

Одной из причин может быть то, что ваша прошивка STLINK кажется довольно старой (STLINK V2J28M17, как показывает ваш журнал). Я предлагаю загрузить приложение STSW-LINK007 для обновления прошивки. Программное обеспечение представляет собой многоплатформенное Java-приложение. Он работает безупречно в Debian GNU / Linux.

В настоящее время я использую другой сервер GDB texane / stlink для своей задачи отладки с GDB без каких-либо проблем на некоторых Nucleo, а также на пользовательских платах. Я использую команду target extended-remote для подключения к порту сервера. Может быть, вы можете попытаться соединиться с этой командой также в OpenOCD.

...