一、JTAG接口介绍
1.简介
JTAG, Joint Test Action Group,联合测试行动组,以制定该标准的联合测试行动组命名,是用于验证印刷电路板设计和测试印刷电路板制造后的行业标准。
2.接口定义
3.调试接口功能框图
- ESP32 C3已经集成了USB转换芯片
4.ESP32 S3 JTAG相关简介
ESP32-S3中有标准的JTAG接口和一个USB串口/JTAG控制器(该控制器可用于烧录芯片的flash、读取程序输出的数据以及将调试器连
接到正在运行的程序中)‘
5.ESP32-S3 JTAG调试接口
(1)标准的JTAG调试接口(电脑需要通过USB转JTAG芯片连接ESP32-S3进行调试)
(2)USB转JTAG控制器接口(电脑可以直接连接ESP32-S3的USB进行JTAG调试)
二、OpenOCD
1.OpenOCD官网链接
2.OpenOCD的功能模块
- Target(目标设备模块):
- 功能:定义并管理与目标芯片(如ARM Cortex-M、STM32、ESP32)的通信协议和调试接口;
- 作用:
- 配置芯片的调试模式(如:JTAG、SWD、JTAG/SWD混合调试);
- 控制芯片的运行状态(暂停、恢复、单步执行);
- 管理寄存器读写、内存访问等底层操作;
- Flash(闪存模块):
- 功能:负责对目标设备的闪存(Flash Memory)进行读写操作、支持烧录固件、擦除和验证;
- 作用:
- 实现不同类型闪存的驱动;
- 优化闪存操作(如分页读写、扇区擦除)以提高效率;
- 支持固件校验(如CRC检查)确保烧录正确;
- Daemon / ˈdiːmən / (守护进程模块):
- 功能:OpenOCD的核心服务,负责管理与硬件的连接、处理命令请求并提供接口给其他工具(如GDB);
- 作用:
- 监听TCP端口(默认3333)接收GDB连接;
- 监听Telnet端口i偶(默认4444)接收用户命令;
- 维护与调试硬件(如J-Link、ST-Link)的通信会话;
- GDB Server(GDB服务器模块)
- 功能:作为GDB(GNU Debugger)与目标设备之间的桥梁,将GDB的调试命令(如断点、单步执行)转换为目标设备可理解的操作;;
- 作用:
- 支持GDB原生调试协议(RSP);
- 处理断点、观察点和内存访问请求;
- 同步GDB与目标设备的状态;
- CLI(命令行界面模块)
- 功能:提供交互命令行接口,允许用户直接发送命令控制调试流程;
- 作用:
- 执行低级调试操作(如寄存器读写、内存转储);
- 配置OpenOCD参数(如时钟频率、接口速度);
- 手动控制调试会话(如重置设备、加载固件);
- 模块间的协作流程
- 启动调试阶段:Daemon加载配置文件(如接口、目标设备)、初始化硬件连接;
- 调试阶段:
- GDB通过GDB Server发送调试命令;
- Target模块将命令转换为硬件操作;
- Flash模块负责固件烧录;
- CLI提供手动控制;
- 通信链路:
目标设备 <—> 调试器硬件 <—> Target/Flash <—> Daemon <—> GDB Server <—> GDB
3.OpenOCD源码下载 
三、在ESP32中运行OpenOCD
1.ESP-IDF 离线安装
2.ESP-IDF中的OpenOCD
- ESP-IDF中已经自带了OpenOCD,
- bin文件夹中主要是openocd执行文件,乐鑫官方把openocd编译成立一个可执行文件和库文件(.dll, Dynamic Link Library,动态链接库)
- share文件夹中最重要的是其openocd文件夹下的scripts文件夹(脚本文件夹)
- bin文件夹中主要是openocd执行文件,乐鑫官方把openocd编译成立一个可执行文件和库文件(.dll, Dynamic Link Library,动态链接库)
3.启动OpenOCD
(1)查看OpenOCD版本
(2)下载程序到开发板内
- 配置芯片型号
- 配置示例
- 编译程序
- 烧录程序到开发板中
- 运行OpenOCD,openocd -f board/esp32s3-builtin.cfg
- ctrl + C,退出OpenOCD;
四、GDB
1.GDB简介
- GDB,GNU Debugger,GNU调试器;运行于类UNIX系统,支持C、C++等多种编程语言;
- 于1986年首次发行;GDB是一款免费软件,支持GPL,GNU General Public License,现在由自由软件基金会所维护;
- GDB的功能
- 跟踪和改变计算机中执行的程序;
- 检测和修改程序的内部变量,甚至能够单独调用函数;
- GDB支持arm、AVR等多重处理器;
- GDB支持Remote Debugging,远程调试;
- 如果要使用GDB调试程序,则通过gcc编译c程序时需要加入“-g”参数;
2.运行GDB
(1)ESP-IDF中的GDB执行文件,复制该执行文件的名字:xtensa-esp32s3-elf-gdb
- 注意:需要根据芯片的架构选择不同的gdb,例如:ESP32-C3是Risc-V,ESP32-S3是Xtensa;
乐鑫芯片概述网址
(2)elf文件与bin文件
- elf文件中有.debug调试信息,使用GDB调试时需要加上.elf文件的路径
(3)创建存放gdb启动参数的文件
set remotetimeout 100
target extended-remote :3333
set remote hardware-watchpoint-limit 2
mon reset halt
flushregs
thb app_main
c
(4)运行GDB
- 打开一个终端,运行OpenOCD; openocd -f board/esp32s3-builtin.cfg
- 打开另一个终端,运行GDB,xtensa-esp32s3-elf-gdb build\blink.elf -x gdbinit
- 查看断点附近的代码
- 输入q+Enter,退出GDB调试;