首页 > 其他分享 >合宙ESP32C3 + VSCode + OpenOCD调试经历

合宙ESP32C3 + VSCode + OpenOCD调试经历

时间:2023-01-02 14:00:11浏览次数:70  
标签:Info OpenOCD 合宙 ... VSCode Espressif esp idf

合宙ESP32C3 + VSCode + OpenOCD调试经历

环境

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进行调试,按了三下才开启,原因未知

标签:Info,OpenOCD,合宙,...,VSCode,Espressif,esp,idf
From: https://www.cnblogs.com/liteng0305/p/17019812.html

相关文章

  • vscode设置python代码debug(调试) 与带参数调试
    VScode官方调试说明:https://code.visualstudio.com/docs/python/debugging#_set-configuration-options 一、带参数的Debug调试,launch.json文件创建来源1.新建p......
  • OpenOCD+DAP-LINK调试ESP32的失败经历
    目的手里有调试STM32的DAP-LINK,想试试通过JTAG调试ESP32OpenOCD支持CMSIS-DAPDAP-LINK支持的芯片,我手上这款描述如下,应该JTAG协议的都支持平台windows10+ESP-IDFE......
  • OpenOCD如何通过stlink直接下载程序到stm32板子(已解决)
    首先,关于OpenOCD的入门介绍,以及如何调试,看我这篇文章:​​嵌入式IDE原理OpenOCD介绍以及stlink如何连接stm32板子_标biao的博客-由于OpenOCD一旦连接上,会自动进入3种端口监......
  • vscode 上创建 c/c++ 工程
    以win10x64系统为例:首先下载并安装vscode和mingw,其中这个mingw的原版编译器是个在线安装包,由于网络被墙安装会非常慢,甚至经常会出现安装中途失败的情况,因此我将以往......
  • VSCode比较文档
      编辑器中,Ctrl选中两个文档,右键将已选项进行比较 左右分栏显示差异  ......
  • 【VSCode】深入理解图标含义提升开发效率
    问题VSCode中有各种各样丰富多彩的图标,然而正是因为这种丰富性使得普通开发者一时之间很难辨别。某些情况下,熟知这些图标的含义,能够帮助开发者快速的做出选择。例如:当使用P......
  • 配置远程仓库,VScode克隆远程仓库
    本机安装Git在本机下载git:https://git-scm.com/downloads配置远程仓库首先,在远程Linux上安装gitsudoyuminstallgitsudoapt-getinstallgit配置ssh免密登录创......
  • VSCode添加到右键菜单命令
    一、打开注册表win+R输入regedit,打开注册表编辑器二、文件添加右键VScode打开命令依次找到HKEY_CLASSES_ROOT>*>shell,右键新建,项,命名为VSCode,点击VScode文件夹,双击......
  • VSCode
    运行和调试(debug).vscode/launch.json{//使用IntelliSense了解相关属性。//悬停以查看现有属性的描述。//欲了解更多信息,请访问:https://go.micr......
  • vscode+eslint项目规范化,自动格式化配置(项目中用到的)
    项目如果没有格式化插件就会变得十分拥挤,并且因为个人的开发习惯不同,会导致多人配合的时候,某些人的格式不能与你的兼容导致项目大面积冲突,这样一来统一的格式和开发规范就......