为啥在尝试使用 openocd 连接 stlink-v2 时出现通信故障

Posted

技术标签:

【中文标题】为啥在尝试使用 openocd 连接 stlink-v2 时出现通信故障【英文标题】:why am I getting a communication failure when trying to connect with stlink-v2 using openocd为什么在尝试使用 openocd 连接 stlink-v2 时出现通信故障 【发布时间】:2021-06-06 13:18:18 【问题描述】:

我正在尝试使用 stlink-v2 连接到 'stm32' 'bluepill' 以向其写入一些代码

每当我运行 openocd 时,它都无法连接 我的 openocd.cfg 文件是这样的

source [find interface/stlink-v2.cfg]
source [find target/stm32f3x.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
adapter speed: 1000 kHz
adapter_nsrst_delay: 100
Info : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD
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 v35 API v2 SWIM v7 VID 0x0483 PID 0x3748
Info : using stlink api v2
Info : Target voltage: 3.166623
Error: jtag status contains invalid mode value - communication failure
Polling target stm32f3x.cpu failed, trying to reexamine
Examination failed, GDB will be halted. Polling again in 100ms
Info : Previous state query failed, trying to reconnect
Error: jtag status contains invalid mode value - communication failure
Polling target stm32f3x.cpu failed, trying to reexamine
Examination failed, GDB will be halted. Polling again in 300ms
Info : Previous state query failed, trying to reconnect
Error: jtag status contains invalid mode value - communication failure
Polling target stm32f3x.cpu failed, trying to reexamine
Examination failed, GDB will be halted. Polling again in 700ms
Info : Previous state query failed, trying to reconnect
Error: jtag status contains invalid mode value - communication failure
Polling target stm32f3x.cpu failed, trying to reexamine
Examination failed, GDB will be halted. Polling again in 1500ms
Info : Previous state query failed, trying to reconnect
Error: jtag status contains invalid mode value - communication failure
Polling target stm32f3x.cpu failed, trying to reexamine
Examination failed, GDB will be halted. Polling again in 3100ms
Info : Previous state query failed, trying to reconnect
Error: jtag status contains invalid mode value - communication failure
Polling target stm32f3x.cpu failed, trying to reexamine
Examination failed, GDB will be halted. Polling again in 6300ms
^C

我之前在bluepill 上的stm32f103 上写了一些代码,当我连接到我的PC 时,代码运行(它导致pc13 上的LED 闪烁)

我还没有更改 openocd.cfg 文件,因为它上次运行良好

【问题讨论】:

您之前编程时是否设置了 RDP(读出保护)?您可以使用st.com/en/development-tools/stsw-link004.html 连接并读取设备吗?如果不使用相同的工具来重置选项字节禁用 RDP(将批量擦除芯片)。 注意 - PC13 仅提供 ~3mA 的电流,可能不适合驱动 LED。查看数据表:“PC13、PC14 和 PC15 [...] 这些 IO 不得用作电流源(例如驱动 LED)。” . ...除了我看到 PC13 连接到板载 LED 外——我猜有人没有阅读数据表。 510R 电阻器被指定为将电流保持在 3mA 以下,但它仍然是 IMO 的一个糟糕的设计选择。 此问题可能与接线错误(重新检查所有接线及其连续性)、SWDIO 和 SWDCLK 引脚的复位或重新配置有关。 NRST 是否连接,如果连接到哪个引脚?同时尝试在 OpenOCD 连接时按下复位按钮(以防 SWDIO 和 SWDCLK 引脚已重新配置)。 @Clifford ,尽管更改了设置,stlink 实用程序仍无法读取我的 stlink 连接器 【参考方案1】:

在 OpenOCD 尝试连接时按住重置按钮。

我在 STM32F3DISCOVERY 板上遇到了完全相同的错误。 这样做让我可以再次连接。

【讨论】:

以上是关于为啥在尝试使用 openocd 连接 stlink-v2 时出现通信故障的主要内容,如果未能解决你的问题,请参考以下文章

为啥stm32电脑识别不了

关于OpenOCD+ST-LINK的若干问题

如何使用 OpenOCD 通过 JTAG 链批量刷写 STM32 微控制器?

怎么在mdk 添加jlink rtt

为啥大家都用JLINK而不用STLINK呢?

尝试使用 Eclipse/OpenOCD 进行调试时出现“程序文件不存在”