Ошибка Openocd: недопустимое имя команды dap - невозможно подключить Blue Pill через ST-Link / V2

Я использую плату Blue Pill (STM32F103CB с 128 КБ флэш-памяти согласно st-info --probe) через клон ST-Link / V2, например этот. Я также тестировал подлинный ST-Link / V2, например этот. Я получаю тот же результат, описанный ниже, с обоими программистами.

Моя система - Linux (Debian LXDE), и я установил OpenOCD из выпусков Ливиу Ионеску здесь < / а>.

Моя установка OpenOCD работает. Помимо Blue Pill у меня есть плата ST-Nucleo-F103RB, и я могу подключиться к ней с помощью OpenOCD. Команда

openocd -f board/st_nucleo_f103rb.cfg

использование стандартного файла .cfg, поставляемого с OpenOCD, дает

    Open On-Chip Debugger 0.10.0
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: 1000 kHz
adapter_nsrst_delay: 100
none separate
srst_only separate srst_nogate srst_open_drain connect_deassert_srst
Info : Unable to match requested speed 1000 kHz, using 950 kHz
Info : Unable to match requested speed 1000 kHz, using 950 kHz
Info : clock speed 950 kHz
Info : STLINK v2 JTAG v29 API v2 SWIM v18 VID 0x0483 PID 0x374B
Info : using stlink api v2
Info : Target voltage: 3.271135
Info : stm32f1x.cpu: hardware has 6 breakpoints, 4 watchpoints

Но мне до сих пор не удалось подключиться к Blue Pill с помощью программаторов ST-Link / V2. Я прочитал все, что смог найти, включая соответствующие разделы https://elinux.org/Category:OpenOCD и насколько я могу лично переварить http://openocd.org/doc/. Вот где я должен.

Файл .cfg stm32f103c8_blue_pill.cfg у меня не работает. Он производит вывод, описанный ниже.

Основываясь на том, что я прочитал, я подготовил свой собственный файл .cfg по адресу ../board/stm32f103.cfg. Он говорит:

source [find interface/stlink.cfg]
transport select hla_swd
source [find target/stm32f1x.cfg]
#source [find board/stm32f103c8_blue_pill.cfg]
#reset_config srst_only
#reset_config none separate

Источники, которые я прочитал, предполагают, что это должно сработать, но это не так. Используя мой .cfg, описанный выше, я могу использовать либо target / stm32f1x.cfg, либо board / stm32f103c7_blue_pill.cfg, и я все равно получаю тот же результат, что и описано ниже. (В случае обоих этих файлов .cfg я использую стандартные файлы, поставляемые с OpenOCD.) Я тестировал оба варианта reset_config, показанные выше, и ни один из них. Ни одна из комбинаций не работает.

Файл interface / stlink.cfg, который я использую, изменен. Я изменил его, чтобы указать правильный device_desc "ST-LINK / V2" и правильный vid_pid 0x0483 0x3748. (Оба подтверждены с помощью lsusb.) Итак, игнорируя закомментированные строки, stlink.cfg читает

interface hla
hla_layout stlink
hla_device_desc "ST-LINK/V2"
hla_vid_pid 0x0483 0x3748

Я экспериментировал с включением hla_serial программатора. Интересно, что lsusb не может найти полный серийный номер. st-info --probe находит серийный номер, но дает немного другой номер, чем в приложении прошивки STLinkUpgrade. Я пробовал использовать оба серийных номера. Нет разницы.

Вот команда, которую я даю OpenOCD:

openocd -s ~/stm32/openocd/scripts -f board/stm32f103.cfg

Обратите внимание, что я должен указать путь с помощью -s для этой команды. С платой ST-Nucleo-F103RB мне не нужно этого делать. Однако с файлом stm32f103.cfg, если я не устанавливаю путь, я получаю:

Error: Can't find board/stm32f103.cfg
in procedure 'script'

Если я использую полную команду, показанную выше, с -s для установки пути, я получаю:

Open On-Chip Debugger 0.10.0
Licensed under GNU GPL v2
For bug reports, read
    http://openocd.org/doc/doxygen/bugs.html
/[..]stm32/openocd/scripts/target/stm32f1x.cfg:47: Error: invalid command name "dap"
in procedure 'script' 
at file "embedded:startup.tcl", line 60
at file "/[..]stm32/openocd/scripts/board/stm32f103.cfg", line 18
at file "/[..]stm32/openocd/scripts/target/stm32f1x.cfg", line 47

Вот оскорбительная строка 47 файла stm32f1x.cfg:

dap create $_CHIPNAME.dap -chain-position $_CHIPNAME.cpu

Я искал элементы в Stackoverflow / похожие на Ошибка: недопустимое имя команды "dap". Используя документацию OpenOCD, я понимаю, что команда dap create существует и примерно то, что она делает. Наиболее похожая зарегистрированная ошибка, о которой я обнаружил, находится по адресу https://elinux.org/OpenOCD_Troubleshooting:_Invalid_Command_Name_JTAG< >, и предложенное там решение кажется неприменимым, потому что я не вызываю interface / stlink.cfg из командной строки.

Я не понимаю, что делаю неправильно, и теперь полностью застрял. Если меня кто-то подскажет, я буду очень благодарен. Извините, это такой длинный пост.


person Spod    schedule 10.12.2018    source источник
comment
Кто-нибудь может помочь?   -  person Spod    schedule 12.12.2018
comment
Я сам решил проблему, поэтому я собираюсь задокументировать ее здесь, на случай, если кто-то еще столкнется с такой же проблемой.   -  person Spod    schedule 12.12.2018
comment
Решение - использовать полный путь: в моем случае ~ / [путь] / bin / openocd -s ~ / [путь] / scripts / -f board / stm32f103.cfg. Ливиу Ионеску рекомендует на странице gnu-mcu-eclipse.github.io/openocd/install что вы устанавливаете OpenOCD в / opt, но я установил его в моем домашнем каталоге, как рекомендовано в книге, которую я использую. Может поэтому и нужны полные пути. Если я прав, это кажется довольно странным и ненужным ограничением, которое разработчики OpenOCD накладывают на свое приложение.   -  person Spod    schedule 12.12.2018
comment
Добавьте свое решение как ответ на свой вопрос - это нормально и удобнее для читателей сайта.   -  person ReAl    schedule 14.12.2018


Ответы (2)


Я тоже столкнулся с этой проблемой. Официально бинарные файлы не предоставляются, только исходный код. Но есть два сайта, на которых выпуск двоичных файлов был рекомендован официальным лицом OpenOCD:
1. Поддерживается Фредди Шопен.
2. Поддерживается Ливиу Ионеску в Github.

Я попробовал последнюю версию (OpenOCD 0.10.0 commit date: 2017-01-22 20:31:28 build date: 2017-01-23), выпущенную с сайта Фредди Шопена, и столкнулся с этой проблемой Ошибка: недопустимое имя команды "dap". Но все *.cfg файлы, на которые я ссылался, нормально работали на другом моем компьютере с другим двоичным файлом OpenOCD (хотя я забыл, где я загрузил этот двоичный файл).

Не уверен, что пошло не так, поэтому я обратился к последней версии (gnu-mcu-eclipse-openocd-0.10.0-11-20190118-1134-win64.zip), выпущенной GNU MCU Eclipse (поддерживается Ливиу Ионеску) ошибка исчезла, проблема решена.

PS: Я не говорю, что в сборке Фредди Шопена есть ошибка, но если кто-то столкнулся с этой проблемой, возможно, вы сможете решить ее, попробовав версию, которая в настоящее время активно поддерживается.

person Wulfric Lee    schedule 18.02.2019

Согласитесь с Wulfric, используя стандартную установку OpenOCD

sudo apt установить openocd

выдал ошибку "скока".

Однако версия github openocd-xpack работал правильно.

Использование: Linux зажимает 4.15.0-66-generic # 75-Ubuntu SMP ... как удаленный, Windows 8/10 как целевой клиент MIMXRT1010-EVK

person Chevs    schedule 05.11.2019