VSCode + JTAG调试合宙ESP32C3的经历
VSCode + JTAG调试合宙ESP32C3
环境
Windows10
VSCode + ESP-IDF
合宙ESP32C3(无串口芯片版本)
理论
想要直接使用内置JTAG,USB要求连接GPIO18和GPIO19


合宙ESP32C3有串口芯片版本USB经过CH343连接的串口,无法使用内置JTAG

合宙ESP32C3无串口芯片版本满足要求

步骤
连接PC后有一个虚拟串口和一个USB JTAG接口

按住BOOT,然后按下RST,松开BOOT,芯片进入下载模式,下载固件
PS F:\Espressif\frameworks\esp-idf-v4.4.3\workspace\hello_world> idf.py flash -p COM16 -b 921600
Executing action: flash
Running ninja in directory f:\espressif\frameworks\esp-idf-v4.4.3\workspace\hello_world\build
Executing "ninja flash"...
[1/5] cmd.exe /C "cd /D F:\Espressif\frameworks\esp-idf-v4.4.3\workspace\hello_world\build\esp-idf\esptool_py && ...ion_table/partition-table.bin F:/Espressif/frameworks/esp-idf-v4.4.3/workspace/hello_world/build/hello_world.bin"hello_world.bin binary size 0x25130 bytes. Smallest app partition is 0x100000 bytes. 0xdaed0 bytes (86%) free.
[2/5] Performing build step for 'bootloader'
[1/1] cmd.exe /C "cd /D F:\Espressif\frameworks\esp-idf-v4.4.3\workspace\hello_world\build\bootloader\esp-idf\esptool_py && F:\Espressif\python_env\idf4.4_py3.8_env\Scripts\python.exe F:/Espressif/frameworks/esp-idf-v4.4.3/components/partition_table/check_sizes.py --offset 0x8000 bootloader 0x0 F:/Espressif/frameworks/esp-idf-v4.4.3/workspace/hello_world/build/bootloader/bootloader.bin"
Bootloader binary size 0x4d70 bytes. 0x3290 bytes (40%) free.
[2/3] cmd.exe /C "cd /D F:\Espressif\frameworks\esp-idf-v4.4.3\components\esptool_py && F:\Espressif\tools\cmake\...rkspace/hello_world/build" -P F:/Espressif/frameworks/esp-idf-v4.4.3/components/esptool_py/run_serial_tool.cmake"esptool.py esp32c3 -p COM16 -b 921600 --before=default_reset --after=hard_reset write_flash --flash_mode dio --flash_freq 80m --flash_size 2MB 0x0 bootloader/bootloader.bin 0x10000 hello_world.bin 0x8000 partition_table/partition-table.bin
esptool.py v3.3.2
Serial port COM16
Connecting....
Chip is ESP32-C3 (revision 3)
Features: Wi-Fi
Crystal is 40MHz
MAC: 60:55:f9:75:9c:90
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 921600
Changed.
Configuring flash size...
Flash will be erased from 0x00000000 to 0x00004fff...
Flash will be erased from 0x00010000 to 0x00035fff...
Flash will be erased from 0x00008000 to 0x00008fff...
Compressed 19824 bytes to 12050...
Writing at 0x00000000... (100 %)
Wrote 19824 bytes (12050 compressed) at 0x00000000 in 0.3 seconds (effective 585.5 kbit/s)...
Hash of data verified.
Compressed 151856 bytes to 82022...
Writing at 0x00010000... (16 %)
Writing at 0x00019991... (33 %)
Writing at 0x000202c8... (50 %)
Writing at 0x0002749a... (66 %)
Writing at 0x0002dacd... (83 %)
Writing at 0x00035037... (100 %)
Wrote 151856 bytes (82022 compressed) at 0x00010000 in 1.8 seconds (effective 687.7 kbit/s)...
Hash of data verified.
Compressed 3072 bytes to 103...
Writing at 0x00008000... (100 %)
Wrote 3072 bytes (103 compressed) at 0x00008000 in 0.0 seconds (effective 684.5 kbit/s)...
Hash of data verified.
Leaving...
Hard resetting via RTS pin...
Done
PS F:\Espressif\frameworks\esp-idf-v4.4.3\workspace\hello_world>
启动OpenOCD和GDB前先按下RST重启芯片,运行在正常模式,而不是下载模式
使用乐鑫OpenOCD,搭配board/esp32c3-builtin.cfg

启动OpenOCD,监听3333,成功
PS F:\Espressif\frameworks\esp-idf-v4.4.3\workspace\hello_world> openocd -f board/esp32c3-builtin.cfg
Open On-Chip Debugger v0.11.0-esp32-20220706 (2022-07-06-15:48)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.org/doc/doxygen/bugs.html
Info : only one transport option; autoselect 'jtag'
Info : esp_usb_jtag: VID set to 0x303a and PID to 0x1001
Info : esp_usb_jtag: capabilities descriptor set to 0x2000
Warn : Transport "jtag" was already selected
Info : Listening on port 6666 for tcl connections
Info : Listening on port 4444 for telnet connections
Info : esp_usb_jtag: serial (60:55:F9:75:9C:90)
Info : esp_usb_jtag: Device found. Base speed 40000KHz, div range 1 to 255
Info : clock speed 40000 kHz
Info : JTAG tap: esp32c3.cpu tap/device found: 0x00005c25 (mfg: 0x612 (Espressif Systems), part: 0x0005, ver: 0x0)
Info : datacount=2 progbufsize=16
Info : Examined RISC-V core; found 1 harts
Info : hart 0: XLEN=32, misa=0x40101104
Info : starting gdb server for esp32c3 on 3333
Info : Listening on port 3333 for gdb connections
根据官方教程创建gdbinit文件,端口3333
target remote :3333
set remote hardware-watchpoint-limit 2
mon reset halt
flushregs
thb app_main
c
启动GDB调试,成功,此时已经可以使用GDB调试了
PS F:\Espressif\frameworks\esp-idf-v4.4.3\workspace\hello_world> riscv32-esp-elf-gdb -x gdbinit build/hello_world.elf
F:\Espressif\tools\riscv32-esp-elf\esp-2021r2-patch5-8.4.0\riscv32-esp-elf\bin\riscv32-esp-elf-gdb.exe: warning: Couldn't determine a path for the index cache directory.
GNU gdb (crosstool-NG esp-2021r2-patch5) 9.2.90.20200913-git
Copyright (C) 2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "--host=x86_64-host_w64-mingw32 --target=riscv32-esp-elf".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from build/hello_world.elf...
0x40000000 in ?? ()
JTAG tap: esp32c3.cpu tap/device found: 0x00005c25 (mfg: 0x612 (Espressif Systems), part: 0x0005, ver: 0x0)
Reset cause (3) - (Software core reset)
Hardware assisted breakpoint 1 at 0x42005eee: file F:/Espressif/frameworks/esp-idf-v4.4.3/workspace/hello_world/main/hello_world_main.c, line 17.
[New Thread 1070136696]
[New Thread 1070130304]
[Switching to Thread 1070134812]
Thread 1 "main" hit Temporary breakpoint 1, app_main () at F:/Espressif/frameworks/esp-idf-v4.4.3/workspace/hello_world/main/hello_world_main.c:17
17 {
(gdb)
OpenOCD可以看到GDB连接后的行为
Info : accepting 'gdb' connection on tcp/3333
Memory protection is enabled. Reset target to disable it...
Info : JTAG tap: esp32c3.cpu tap/device found: 0x00005c25 (mfg: 0x612 (Espressif Systems), part: 0x0005, ver: 0x0)
Info : Reset cause (3) - (Software core reset)
Warn : No symbols for FreeRTOS!
Info : [esp32c3] Found 8 triggers
Info : Flash mapping 0: 0x10020 -> 0x3c020020, 27 KB
Info : Flash mapping 1: 0x20020 -> 0x42000020, 75 KB
Info : Auto-detected flash bank 'esp32c3.flash' size 4096 KB
Info : Using flash bank 'esp32c3.flash' size 4096 KB
Info : Flash mapping 0: 0x10020 -> 0x3c020020, 27 KB
Info : Flash mapping 1: 0x20020 -> 0x42000020, 75 KB
Info : Using flash bank 'esp32c3.irom' size 76 KB
Info : Flash mapping 0: 0x10020 -> 0x3c020020, 27 KB
Info : Flash mapping 1: 0x20020 -> 0x42000020, 75 KB
Info : Using flash bank 'esp32c3.drom' size 28 KB
Warn : negative reply, retrying
Warn : Prefer GDB command "target extended-remote :3333" instead of "target remote :3333"
Info : JTAG tap: esp32c3.cpu tap/device found: 0x00005c25 (mfg: 0x612 (Espressif Systems), part: 0x0005, ver: 0x0)
Info : Reset cause (3) - (Software core reset)
VSCode
使用指令行已成功,接下来使用VSCode
VSCode ESP-IDF插件官方说明如下,我使用ESP-IDF Debug Adapter失败,使用Microsoft C/C++ extension调试成功
vscode-esp-idf-extension/DEBUGGING.md at master · espressif/vscode-esp-idf-extension · GitHub
使用ESP-IDF插件,启动OpenOCD,打印如下,本质和指令行直接调用没啥区别


[OpenOCD]
[Stopped] : OpenOCD Server
[OpenOCD]
Open On-Chip Debugger v0.11.0-esp32-20220706 (2022-07-06-15:48)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.org/doc/doxygen/bugs.html
[OpenOCD]
debug_level: 2
[OpenOCD]
Info : only one transport option; autoselect 'jtag'
[OpenOCD]
Info : esp_usb_jtag: VID set to 0x303a and PID to 0x1001
Info : esp_usb_jtag: capabilities descriptor set to 0x2000
Warn : Transport "jtag" was already selected
[OpenOCD]
Info : Listening on port 6666 for tcl connections
[OpenOCD]
Info : Listening on port 4444 for telnet connections
[OpenOCD]
Info : esp_usb_jtag: serial (60:55:F9:75:9C:90)
[OpenOCD]
Info : esp_u[OpenOCD]
sb_jtag: Device found. Base speed 40000KHz, div range 1 to 255
[OpenOCD]
Info : cloc[OpenOCD]
k speed 40000 kHz
[OpenOCD]
Info : JTAG tap: esp32c3.cpu tap/device found: 0x00005c25 (mfg:[OpenOCD]
0x612 (Espressif Systems), part: 0x0005, ver: 0x0)
[OpenOCD]
Info : datacount=2 progbufsize=16
[OpenOCD]
Info : Examined RISC-V[OpenOCD]
core; found 1 harts
Info : hart 0: XLEN=32, misa=0x40101104
[OpenOCD]
Info : [esp32c3] Found 8 trig[OpenOCD]
gers
[OpenOCD]
Info : starting gdb server for esp32c3 on 3333
Info : Listening on port 3333 for gdb connections
根据插件官方说明,创建launch.json,我修改了"miDebuggerPath",根据自己的情况修改即可
{
"version": "0.2.0",
"configurations": [
{
"name": "GDB",
"type": "cppdbg",
"request": "launch",
"MIMode": "gdb",
"miDebuggerPath": "F:/Espressif/tools/riscv32-esp-elf/esp-2021r2-patch5-8.4.0/riscv32-esp-elf/bin/riscv32-esp-elf-gdb.exe",
"program": "${workspaceFolder}/build/${command:espIdf.getProjectName}.elf",
"windows": {
"program": "${workspaceFolder}\\build\\${command:espIdf.getProjectName}.elf"
},
"cwd": "${workspaceFolder}",
"environment": [{ "name": "PATH", "value": "${config:idf.customExtraPaths}" }],
"setupCommands": [
{ "text": "target remote :3333" },
{ "text": "set remote hardware-watchpoint-limit 2"},
{ "text": "mon reset halt" },
{ "text": "thb app_main" },
{ "text": "flushregs" }
],
"externalConsole": false,
"logging": {
"engineLogging": true
}
}
]
}
打个断点按下F5进行调试,按了三下才开启,原因未知

VSCode + JTAG调试合宙ESP32C3的经历的更多相关文章
- 合宙AIR105使用Keil MDK + DAP-Link 烧录和调试
关于AIR105 AIR105是合宙LuatOS生态下的一款芯片, 1月初上市, 开发板与摄像头一起搭售(赠送). 从配置信息看, 芯片性能相当不错: Cortex-M4F内核, 最高频率204Mhz ...
- 合宙AIR105(二): 时钟设置和延迟函数
目录 合宙AIR105(一): Keil MDK开发环境, DAP-Link 烧录和调试 合宙AIR105(二): 时钟设置和延迟函数 Air105 的时钟 高频振荡源 芯片支持使用内部振荡源, 或使 ...
- 合宙AIR105(三): 定时器, 定时器中断和PWM输出
目录 合宙AIR105(一): Keil MDK开发环境, DAP-Link 烧录和调试 合宙AIR105(二): 时钟设置和延迟函数 合宙AIR105(三): 定时器, 定时器中断和PWM输出 Ai ...
- 合宙AIR105(四): SPI, MAX7219 8x8LED驱动
目录 合宙AIR105(一): Keil MDK开发环境, DAP-Link 烧录和调试 合宙AIR105(二): 时钟设置和延迟函数 合宙AIR105(三): 定时器, 定时器中断和PWM输出 合宙 ...
- 合宙模块LUA相关资料汇总
1. 目录 1. 目录 [2. LUA二次开发](#2. LUA二次开发) 2.1 [新手教程](#2.1 新手教程) 2.2 [进阶教程](#2.2 进阶教程) 2.3 [LUA开发环境](#2.3 ...
- 合宙Air32F103CBT6开发板上手报告
2022年6月初合宙新上市了 Air32F103 系列 MCU, 市面上 STM32F103 的克隆军队又增加了新的一员. 这次不知道是哪家的贴牌, 分 Air32F103CBT6 和 Air32F1 ...
- linux系统下如何在vscode中调试C++代码
本篇博客以一个简单的hello world程序,介绍在vscode中调试C++代码的配置过程. 1. 安装编译器 vscode是一个轻量的代码编辑器,并不具备代码编译功能,代码编译需要交给编译器完成. ...
- 合宙模块AT相关资料汇总
1. 目录 1. 目录 [2. 新手教程](#2. 新手教程) [3. 产品资料](#3. 产品资料) 3.1 [2G模块(GPRS / GPRS+GNSS)](#3.1 2G模块(GPRS / GP ...
- 【转载】Windows下VSCode编译调试c/c++
懒得自己配置或自己配置出现不明问题的朋友可以点这里: [VSCode]Windows下VSCode便携式c/c++环境 http://blog.csdn.net/c_duoduo/article/de ...
- visual studio code(vscode) 调试php(转)
原文链接:http://www.cnblogs.com/CLR010/p/5276077.html visual studio code(vscode) 调试php 1.下载vscode (vis ...
随机推荐
- centos环境minio安装踩坑指南2023年7月30日
MinIO的安装踩坑指南 环境centos7 1. 安装MinIO官方文档 Binary下载 , 按照官网的路径配置比较快 下载minio wget https://dl.min.io/server/ ...
- easyExcel合并数据导出(一对多)
语言 java 框架 ssm 需求 :看图 也是导出效果 数据库查询为(关系为一对多) 一个学生对应多个课程 实现步骤 1.实体类配置, 建议单独写个实体用来导出使用() 学生信息字段正常配置 , ...
- VSCode如何通过Ctrl+P快速打开node_modules中的文件
背景 咱们新建一个NodeJS项目,必然会安装许多依赖包,因此经常需要查阅某些依赖包的源码文件.但是,由于node_modules目录包含的文件太多,出于性能考虑,在VSCode中默认情况下是禁止搜索 ...
- c# 前台和后台线程
前台和后台线程 Net的公用语言运行时(Common Language Runtime,CLR)能区分两种不同类型的线程:前台线程和后台线程.这两者的区别就是:应用程序必须运行完所有的前台线程才可以退 ...
- mysql8在Win10下安装教程
一.准备工作 下载mysql8安装包,下载URL地址:https://mirrors.tuna.tsinghua.edu.cn/mysql/downloads/MySQL-8.0/ 二.管理员权限执行 ...
- 力扣613(MySQL)-直线上的最近距离(简单)
题目: 表 point 保存了一些点在 x 轴上的坐标,这些坐标都是整数. 写一个查询语句,找到这些点中最近两个点之间的距离. 最近距离显然是 '1' ,是点 '-1' 和 '0' 之间的距离.所以输 ...
- 力扣557(java)-反转字符串中的单词(简单)
题目: 给定一个字符串 s ,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序. 示例 1: 输入:s = "Let's take LeetCode contest&qu ...
- 转载 | 基于函数计算自定义运行时快速部署一个 springboot 项目
简介: 本文转自函数计算征集令优秀征文,活动火热进行中,欢迎大家报名参加! 什么是函数计算? 函数计算是事件驱动的全托管计算服务.使用函数计算,您无需采购与管理服务器等基础设施,只需编写并上传代码.函 ...
- 智能数据构建与管理平台Dataphin的前世今生:缘起
简介: 阿里巴巴提出的OneData方法论帮助企业捋清了数据全生命周期的管理思路,更将其植入到产品Dataphin(智能数据构建与管理)中,通过阿里云为企业提供服务. Dataphin 智能数据构建与 ...
- Quick BI的可视分析之路
简介: Quick BI是专为云上用户量身打造的智能数据分析和可视化BI产品,帮助企业快速完成从传统的数据分析到数据云化+分析云化的转变,将企业的业务数据产出后以最快的速度被推送到各组织侧消费使用.本 ...