Gdb не может подключиться к OpenOCD на stm32

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

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

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

  • Цепочка инструментов (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

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

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


person M. Sh    schedule 06.05.2019    source источник


Ответы (2)


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

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

person kaliczp    schedule 07.05.2019
comment
Ты богиня. Я никогда не мог об этом подумать. Похоже прошивка устарела. После обновления до V2J34M25 (API v2) он успешно подключился, хотя у меня все еще есть некоторые другие проблемы. Спасибо за ваше время. - person M. Sh; 08.05.2019

Попробуйте telnet localhost 4444

у меня это сработало, а 3333 - нет

person Jwdsoft    schedule 02.11.2020
comment
Порт 4444 действительно предназначен для telnet-соединения, но на самом деле 3333 - это порт сервера gdb. - person SKZ 81; 07.01.2021