Openocd错误:无效的命令名称“ dap”-无法通过ST-Link / V2连接蓝色药丸

时间:2018-12-10 22:15:22

标签: openocd stm32f1 bluepill

我正在通过克隆ST-Link / V2(例如this one)使用Blue Pill板(根据st-info --probe,具有128kB闪存的STM32F103CB)。我还使用了this one之类的正版ST-Link / V2进行了测试。两位程序员都能得到相同的结果,如下所述。

我的系统是Linux(Debian LXDE),并且从Liviu Ionescu的here版本安装了OpenOCD。

我的OpenOCD安装正在运行。除了Blue Pill,我还有一个ST-Nucleo-F103RB板,我可以使用OpenOCD连接到它。命令

openocd -f board/st_nucleo_f103rb.cfg

使用OpenOCD随附的标准.cfg文件提供

    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

但是我仍然无法使用ST-Link / V2编程器连接到我的Blue Pill。我已经阅读了所有可以找到的内容,包括https://elinux.org/Category:OpenOCD的相关部分以及我个人可以摘要的http://openocd.org/doc/。以下是我必须去的地方。

.cfg文件stm32f103c8_blue_pill.cfg对我不起作用。它产生下面描述的输出。

根据所读内容,我已经在../board/stm32f103.cfg中准备了自己的.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

这是stm32f1x.cfg的有问题的第47行:

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。

我看不到我在做什么错,现在我完全陷入了困境。如果有人可以引导我,我将不胜感激。抱歉,这么长的帖子。

2 个答案:

答案 0 :(得分:0)

我也遇到了这个问题。官方没有提供二进制文件,只有源代码。但是OpenOCD官方推荐了两个发布二进制文件的站点:
1.由Freddie Chopin维护。
2.由Liviu Ionescu在Github中维护。

我尝试了从Freddie Chopin网站发布的最新版本(OpenOCD 0.10.0 commit date: 2017-01-22 20:31:28 build date: 2017-01-23),但遇到此错误:无效的命令名称“ dap” 问题。但是我引用的所有*.cfg文件都已经在另一台装有OpenOCD二进制文件的计算机上正常运行了(尽管我忘记了在哪里下载该二进制文件)。

不知道出了什么问题,所以我转向GNU MCU Eclipse(由Liviu Ionescu维护)发布的最新版本(gnu-mcu-eclipse-openocd-0.10.0-11-20190118-1134-win64.zip),错误消失了,问题已解决

PS:我并不是说Freddie Chopin的构建中有错误,但是如果有人遇到此问题,也许您可​​以通过尝试当前正在积极维护的版本来解决。

答案 1 :(得分:0)

同意Wulfric,对OpenOCD使用标准安装

sudo apt安装openocd

给出“ dap”错误。

但是github版本openocd-xpack正常工作。

使用: Linux将4.15.0-66-通用#75-Ubuntu SMP ...固定为远程,将Windows 8/10固定为客户端目标MIMXRT1010-EVK