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

B站_Miachael_ee_通过GDB和OpenOCD对ESP32 进行JTAG Debug_笔记1

B 站Miachael_ee视频链接

一、JTAG接口介绍

1.简介

JTAG, Joint Test Action Group,联合测试行动组,以制定该标准的联合测试行动组命名,是用于验证印刷电路板设计和测试印刷电路板制造后的行业标准。

2.接口定义

在这里插入图片描述

3.调试接口功能框图

在这里插入图片描述

  • ESP32 C3已经集成了USB转换芯片
    在这里插入图片描述

4.ESP32 S3 JTAG相关简介

  • ESP32-S3规格书下载链接
    在这里插入图片描述

  • 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文件夹(脚本文件夹)
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述

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调试;
http://www.xdnf.cn/news/12782.html

相关文章:

  • Python Day46
  • 【AI论文】MiMo-VL技术报告
  • 整数的字典序怎么算
  • 【FPGA开发】DDS信号发生器设计
  • 【题解-Acwing】1097. 池塘计数
  • OCCT基础类库介绍: Foundation Classes - Basics
  • 动手学深度学习pytorch(第一版)学习笔记汇总
  • 从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
  • 利用Pandas AI完成Excel大模型的结合实现自然语言问数
  • 第二十九章 数组
  • iptables实验
  • 2025年中国建银投资笔试测评春招校招社招笔试入职测评行测题型解读揭秘
  • 小番茄C盘清理:专业高效的电脑磁盘清理工具
  • FBRT-YOLO:面向实时航拍图像检测的轻量高效目标检测框架
  • 【QT】QT多语言切换
  • Java 线程同步详解
  • 前后端分离开发 和 前端工程化
  • k8s4部署
  • STM32H562----------串口通信(UART)
  • Spring注解开发
  • 《Go小技巧易错点100例》第三十五篇
  • CCF GESP202503 Grade4-B4263 [GESP202503 四级] 荒地开垦
  • JAVA学习 DAY4 DOS操作讲解及实例
  • 高保真组件库:下拉框
  • (一)单例模式
  • leetcode56-合并区间
  • 常见查找算法原理与应用详解
  • pandas 字符串存储技术演进:从 object 到 PyArrow 的十年历程
  • C语言内存管理和编译优化实战
  • Fetch API 使用详解:Bearer Token 与 localStorage 实践