当前位置: 首页 > news >正文

OpenOCD简明指南

一、OpenOCD 简介

OpenOCD(Open On-Chip Debugger)是一个开源的片上调试工具,支持多种调试器和目标芯片。它通过 JTAG、SWD 等接口与目标设备通信,提供固件烧录、调试、内存操作等功能。

二、快速烧录固件

2.1 基本烧录命令

openocd -f interface/stlink-v2.cfg -f target/stm32f1x.cfg -c "program Project.hex verify reset exit"

命令解析:

  • -f interface/stlink-v2.cfg:指定 ST-Link V2 调试器接口
  • -f target/stm32f1x.cfg:指定 STM32F1 系列目标芯片
  • program Project.hex:烧录 Project.hex 固件
  • verify:验证烧录结果
  • reset:复位芯片
  • exit:退出 OpenOCD

2.2 适用场景

适用于 STM32F1 系列芯片的快速固件烧录,一次性完成烧录→验证→复位全流程。

三、Telnet 调试模式

3.1 启动调试服务

openocd -f interface/cmsis-dap.cfg -f target/stm32g4x.cfg

服务说明:

  • 监听 3333 端口(GDB 调试)
  • 监听 4444 端口(Telnet 交互)
  • 保持终端运行以维持连接

3.2 连接 Telnet

telnet 127.0.0.1 4444

连接成功后进入交互模式,可直接输入 OpenOCD 指令操作目标芯片。

四、基本控制指令

4.1 基本控制指令汇总

指令名称 命令格式 示例 说明
init init init 初始化调试接口和目标芯片
reset reset reset 简单复位芯片
reset run reset run reset run 复位后立即运行程序
reset halt reset halt reset halt 复位后暂停执行(调试常用)
reset init reset init reset init 复位并初始化芯片状态
halt halt halt 暂停目标执行
resume resume resume 从当前地址恢复执行
resume 地址 resume [address] resume 0x08000000 从指定地址开始执行
step step step 单步执行(进入函数)

五、常用操作指令

5.1 内存操作指令

指令名称 命令格式 示例 说明
读 32 位 mdw [addr] [count] mdw 0x08000000 4 读取 4 个 32 位数据
读 16 位 mdh [addr] [count] mdh 0x20000000 5 读取 5 个 16 位数据
读 8 位 mdb [addr] [count] mdb 0x08001000 8 读取 8 个 8 位数据
写 32 位 mww [addr] [value] mww 0x20000000 0x12345678 写入 32 位数据
写 16 位 mwh [addr] [value] mwh 0x20000004 0xABCD 写入 16 位数据
写 8 位 mwb [addr] [value] mwb 0x20000006 0xEF 写入 8 位数据
保存内存 dump_image [file] [addr] [size] dump_image ram.bin 0x20000000 0x1000 保存内存数据到文件

5.2 Flash 操作指令

指令名称 命令格式 示例 说明
探测 Flash flash probe [num] flash probe 0 探测 Flash 设备
显示信息 flash info [num] flash info 0 显示 Flash 详细信息
地址擦除 flash erase_address [addr] [size] flash erase_address 0x08000000 0x1000 按地址范围擦除
扇区擦除 flash erase_sector [num] [first] [last] flash erase_sector 0 0 3 按扇区擦除
烧录固件 flash write_image [erase] [file] [addr] flash write_image erase firmware.bin 0x08000000 烧录固件到 Flash

5.3 程序加载与执行

指令名称 命令格式 示例 说明
程序烧录 program [file] [addr] [verify] [reset] program Project.bin 0x08000000 verify reset 烧录并验证程序
加载到内存 load_image [file] [addr] load_image test.elf 0x20000000 加载程序到 RAM
验证固件 verify_image [file] [offset] verify_image Project.hex 0x00 验证烧录结果
复位运行 reset run reset run 复位后运行程序
指定地址执行 resume [address] resume 0x20000000 从指定地址执行

5.4 调试指令

指令名称 命令格式 示例 说明
显示寄存器 reg reg 显示所有 CPU 寄存器
设置寄存器 reg [name] [value] reg R1 0x1234 设置寄存器值
硬件断点 bp [addr] [length] hw bp 0x08000100 0x01 hw 设置硬件断点
移除断点 rbp [addr] rbp 0x08000100 移除断点
数据监视点 wp [addr] [length] r/w wp 0x20000000 0x04 r 设置数据监视点
单步执行 step step 单步执行(进入函数)
步过执行 next next 单步执行(跳过函数)

六、总结

OpenOCD 是嵌入式开发中强大的调试工具,掌握基本控制指令是有效调试的基础。建议按照标准调试流程操作,结合实际项目多加练习,逐步掌握各种调试场景的应用技巧。

核心要点:

  • 始终以 init开始调试会话
  • 使用 reset halt获得可控的调试起点
  • 善用 step进行精细调试
  • 调试完成后用 reset run恢复正常执行
http://www.jsqmd.com/news/36031/

相关文章:

  • OpenOCD简明指南
  • 2025Dec.居家集训游记
  • 电商财务不求人!一张图看懂工作流程,算清每一笔账 - 智慧园区
  • OI 笑传 #26
  • 20232327 2025-2026-1 《网络与系统攻防技术》实验四实验报告
  • Gas 优化技巧
  • 2025.11.9总结
  • Python与C语言术语及概念差异全景总结
  • Appium vs uiautomator2 优势劣势对比表
  • 基于GF域的多进制QC-LDPC误码率matlab仿真,译码采用EMS算法
  • AtCoder Beginner Contest 431
  • 基于BPSK调制解调和LDPC编译码的单载波相干光传输系统matlab误码率仿真
  • 空间矢量脉宽调制(Space Vector Pulse Width Modulation)SVPWM基础
  • 如何有效衡量开发者生产力:超越代码行数的思考
  • 2025-11-blog
  • 科研项目申报
  • 关于apk安装包的解包与签名重新打包
  • 20232325 2025-2026-1 《网络与系统攻防技术》实验四实验报告
  • 题解:P11361 [NOIP2024] 编辑字符串
  • 与某省代理商的合作,写一点感触吧
  • CSP-S 2025 解题报告
  • 嵌入式面试中常见的一些编程题目 - 阿源
  • Makefile工程简单模板
  • 实用指南:Visual Studio下载安装教程(非常详细)从零基础入门到精通,看完这一篇就够了
  • 升鲜宝 供应链SCM 一体化自动化部署体系说明
  • 折腾笔记[37]-使用ML.NET进行文本情感分类
  • 从API调用到智能体编排:GPT-5时代的AI开发新模式 - 教程
  • Spring AI Alibaba 项目源码学习(一)-整体介绍
  • 技术架构师到CIO如何转型
  • Layout