OpenOCD failed tor read memory at $addr 错误

在Ubuntu 20虚拟机中,使用OpenOCD V0.11和JLINK V9遇到无法识别STM32F103C8T6 CPU的问题。通过尝试按住复位键执行openocd命令,问题得到解决。此方法可能适用于类似情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

OpenOCD failed tor read memory at $addr 错误

环境
  • OpenOCD V0.11
  • JLINK V9 ,Firmware 2021 May 7
  • Target board,STM32F103-minimum board
  • Host OS, Ubuntu 20 on VMware
现象

执行openocd命令时

openocd -f openocd-tcl/jlink-swd-stm32f10x.cfg

出现如下错误

image-20210808105628557

提示target stm32f1x.cpu检查失败,也就是说没有识别到stm32f1x的cpu

更换目标板为STM32F103RCT6 ok

期间换回STM32F103C8T6又不行,更换V8 JLINK也是一样,更换连接杜邦线也不行

最后抱着尝试态度按着复位键再次执行命令,结果可以了。之后在正常不按复位键也可以了

image-20210808162348759

结果

本问题解决方法只是按着复位键重新执行openocd命令即可,类似现象可以尝试,仅供参考

* 终端进程“C:\Users\gxj96\.platformio\penv\Scripts\platformio.exe 'run', '--target', 'upload'”已终止,退出代码: 1。 * 终端将被任务重用,按任意键关闭。 * 正在执行任务: C:\Users\gxj96\.platformio\penv\Scripts\platformio.exe run --target upload Processing genericSTM32H750VB (platform: ststm32; board: genericSTM32H750VB; framework: arduino) --------------------------------------------------------------------------------------------------------------------------------------------------------- Verbose mode can be enabled via `-v, --verbose` option CONFIGURATION: https://docs.platformio.org/page/boards/ststm32/genericSTM32H750VB.html PLATFORM: ST STM32 (19.2.0) > STM32H750VBT6 (1024k RAM. 128k Flash) HARDWARE: STM32H750VBT6 480MHz, 512KB RAM, 128KB Flash DEBUG: Current (stlink) External (blackmagic, jlink, stlink) PACKAGES: - framework-arduinoststm32 @ 4.21001.250617 (2.10.1) - framework-cmsis @ 2.50900.0 (5.9.0) - tool-dfuutil @ 1.11.0 - tool-dfuutil-arduino @ 1.11.0 - tool-openocd @ 3.1200.0 (12.0) - tool-stm32flash @ 0.7.0 - toolchain-gccarmnoneeabi @ 1.120301.0 (12.3.1) LDF: Library Dependency Finder -> https://bit.ly/configure-pio-ldf LDF Modes: Finder ~ chain, Compatibility ~ soft Found 14 compatible libraries Scanning dependencies... Dependency Graph |-- SoftwareSerial @ 1.0.0 Building in release mode Checking size .pio\build\genericSTM32H750VB\firmware.elf Advanced Memory Usage is available via "PlatformIO Home > Project Inspect" RAM: [ ] 0.3% (used 1688 bytes from 524288 bytes) Flash: [== ] 20.0% (used 26204 bytes from 131072 bytes) Configuring upload protocol... AVAILABLE: blackmagic, dfu, jlink, serial, stlink CURRENT: upload_protocol = stlink Uploading .pio\build\genericSTM32H750VB\firmware.elf xPack Open On-Chip Debugger 0.12.0-01004-g9ea7f3d64-dirty (2023-01-30-15:04) Licensed under GNU GPL v2 For bug reports, read http://openocd.org/doc/doxygen/bugs.html debug_level: 1 hla_swd Error: Unable to set adapter speed Error: init mode failed (unable to
最新发布
07-07
在使用 PlatformIO 向 STM32H750VB 开发板上传固件时,如果遇到错误信息中包含 `exit code 1`、`debug hla_swd` 和 `unable to set adapter speed` 等关键词,通常表明与调试适配器(如 ST-Link)之间的通信出现了问题,尤其是在设置适配器速度时失败。以下是对该问题的详细分析及可能的解决方案。 ### 问题原因 1. **适配器驱动或配置问题** OpenOCD 使用 `hla_swd`(High-Level Adapter Serial Wire Debug)作为传输方式时,若无法正确识别或初始化调试探针(如 ST-Link),则可能导致设置适配器速度失败[^3]。 特别是在 PlatformIO 中使用的 OpenOCD 配置文件未正确指定适配器类型或接口,也可能导致此问题。 2. **连接不稳定或硬件问题** 如果 ST-Link 与目标芯片之间的物理连接不稳定,例如 SWD 引脚接触不良、电源不稳定等,也可能导致 OpenOCD 无法正常设置适配器速度。 3. **调试接口被禁用** 若在 STM32 的系统配置中禁用了调试接口(如将 SYS(Debug) 设置为 `No Debug`),OpenOCD 将无法通过 SWD 连接目标设备,从而导致上传失败[^2]。 4. **适配器速度设置过高** 在某些情况下,如果配置的适配器速度(`adapter speed`)过高,而硬件不支持,则会导致设置失败。例如,部分旧版本的 ST-Link 可能不能支持超过 4MHz 的频率。 --- ### 解决方案 1. **检查并修改 OpenOCD 配置文件** - 确保 PlatformIO 使用的 OpenOCD 配置文件中指定了正确的适配器类型和传输方式。例如: ```tcl # 指定适配器驱动(如 stlink) adapter driver stlink # 设置传输方式为 hla_swd transport select hla_swd # 加载目标芯片配置 source [find target/stm32h7x.cfg] # 设置适配器速度(单位为 kHz,建议从较低值开始尝试) adapter speed 1000 ``` - 如果使用的是 CMSIS-DAP 或其他适配器,请相应调整 `adapter driver` 和 `transport select` 参数[^3]。 2. **确认调试接口启用状态** - 在 STM32CubeMX 配置中,确保 `SYS(Debug)` 被设置为 `Serial Wire` 或 `JTAG-DP`,而不是 `No Debug`。否则即使烧录成功,后续调试和上传也会失败[^2]。 3. **降低适配器速度** - 尝试将 `adapter speed` 设置为较低值,如 `1000`(即 1MHz),以排除因速度过高导致的兼容性问题。 4. **更新 ST-Link 固件** - 使用 ST 官方工具(如 ST-LINK Utility)检查并更新 ST-Link 探针的固件版本,确保其与当前芯片和 OpenOCD 兼容。 5. **检查物理连接** - 确认 SWDCLK、SWDIO、GND 等引脚连接良好,避免因接触不良导致通信失败。 - 若使用自定义开发板,还需检查复位电路是否正常工作。 6. **PlatformIO 配置建议** - 在 `platformio.ini` 文件中指定自定义的 OpenOCD 配置文件路径: ```ini upload_protocol = custom upload_speed = 1000 upload_flags = -f ${PROJECT_SRC_DIR}/openocd.cfg ``` --- ### 示例代码:PlatformIO 自定义 OpenOCD 配置文件内容 ```tcl # openocd.cfg adapter driver stlink transport select hla_swd source [find interface/stlink.cfg] source [find target/stm32h7x.cfg] adapter speed 1000 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值