Ошибка 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

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

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

3 ответа

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

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

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

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

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

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

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

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

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

когда я использовал cfg, он выглядел так:stm32f401.cfg

      # source [find stlink-v2.cfg]
source [find interface/stlink.cfg]

# chip name
set CHIPNAME stm32f401ccu6
set ENDIAN little

# choose a port here
set telnet_port 0

source [find target/stm32f4x.cfg]
adapter_khz 480

выдает ошибку "Ошибка: неверное имя DAP!" по комментарию #set CHIPNAME все в порядке.

Другие вопросы по тегам