乐鑫ESP32-C3 BLE教程
公共基础篇(理论)
红旭无线相关源码的约定俗称
基于VSCODE的ESP32C3开发环境的搭建
基于JTAG对ESP32-C3的调试及下载
初识ESP32-C3
ESP32-C3启动流程详解
第一课:Hello World
基于Docker+WSL+VSCODE的ESP32-C3开发环境搭建
BLE
基础篇(理论)
BLE基础知识
BLE的不同地址类型
不同类型的BLE广播事件浅析
BLE扫描的基本概念
广播篇(实战)
可连接可扫描的非定向广播
基于隐私的可连接可扫描的非定向广播
不可连接不可扫描的非定向广播
不可连接不可扫描的定向广播(扩展广播)
不可连接可扫描非定向广播
不可连接可扫描的定向广播(扩展广播)
可连接不可扫描的非定向广播(扩展广播)
不可连接不可扫描的非定向广播(链式广播)
低占空比的可连接不可扫描定向广播
高占空比的可连接不可扫描定向广播
BLE 5.0新特性---广播集(Advertising Set)
BLE 5.0新特性---周期广播(Periodic Advertising)
不可连接不可扫描的非向定匿名扩展广播
不可连接不可扫描的非向定匿名链式广播
不可连接不可扫描的链式周期广播
扫描篇(实战)
扫描非定向广播
扫描非定向广播(基于白名单)
扫描非定向广播(基于隐私)
扫描非定向的扩展广播
扫描定向的扩展广播
扫描可连接定向扩展广播
扫描不可连接不可扫描的链式广播(1650字节)
扫描不可连接不可扫描的匿名扩展/链式广播
扫描周期广播
如无权限阅读,请联系微信:17625815328
-
+
首页
基于JTAG对ESP32-C3的调试及下载
# 前言 继上一章节[《基于VSCODE的ESP32C3开发环境的搭建》](https://docs.wireless-tech.cn/doc/6/)之后,小编相信大部分读者借助红旭的肩膀,应该可以轻松地搞定ESP32-C3的开发环境搭建,并完成一些基础的开发;接下来,让我们继续趁热打铁,讲讲如何利用ESP32-C3的JTAG接口,对ESP32-C3进行下载或者调试仿真。 # JTAG接口 为了更好地阐述并实现对ESP32-C3进行下载或者调试仿真,这里小编以[HX-DK-商](https://item.taobao.com/item.htm?spm=a1z10.1-c-s.w4004-22286946226.12.59ca2c2c5a3wJ3&id=654877303965)为蓝本,进行一系列的配置和讲解。 ![](https://docdisk.wireless-tech.cn/img/2021/10/15/hx_dk_shang_20211015110649848518.png) 目前,ESP32-C3支持两种JTAG连接方式: 1. 内嵌的JTAG调试仿真器 ESP32-C3内嵌了一个USB-JTAG控制器,可用于对ESP32-C3进行下载或者调试仿真,如[HX-DK-商](https://item.taobao.com/item.htm?spm=a1z10.1-c-s.w4004-22286946226.12.59ca2c2c5a3wJ3&id=654877303965)中的标号9,只要插上USB线,即可实现下载和调试仿真的功能。 1. 外置的JTAG调试仿真器 如果想要使用外部的调试仿真器,则只要使用`标准的10-PIN连接线`与[HX-DK-商](https://item.taobao.com/item.htm?spm=a1z10.1-c-s.w4004-22286946226.12.59ca2c2c5a3wJ3&id=654877303965)中的标号8相连接,即可实现对ESP32-C3的下载和调试仿真。 ## 内置的USB-SERIAL-JTAG <span id ="USB_SERIAL_JTAG">ESP32-C3不但内置了`USB-JTAG`,还内置了`USB-SERIAL`,这给开发者提供了大大的便利,仅需要一根USB线即可实现下载和调试仿真,**实乃众多半导体厂商中的第一芯**。但是它们始终属于ESP32-C3中的一个外设,一旦设备进入休眠又或者死机了又或者重启了,那么这个外设的功能也随着 **"废掉"** 了,但是如果没有这些问题的话,那还是省心省力的,这是目前内置USB-SERIAL-JTAG的局限性所在。所以,[HX-DK-商](https://item.taobao.com/item.htm?spm=a1z10.1-c-s.w4004-22286946226.12.59ca2c2c5a3wJ3&id=654877303965)仍然保留了外置的USB-SERIAL和调试仿真器。</span> 在使用内置的USB-SERIAL-JTAG功能之前,用户还需要安装相应的驱动,这个驱动在上一章节[《基于VSCODE的ESP32C3开发环境的搭建》](./Tutorials/Basic_Chapter/基于VSCODE的ESP32C3开发环境的搭建.md)中提及的`ESP-IDF-Tools`工具中可以获取得到,即使用ESP-IDF-Tools安装相应的配置工具包时,要勾选`idf_driver`。最后,用户就可以在`.espressif`文件夹找到它,如下图所示: ![](https://docdisk.wireless-tech.cn/img/2021/10/18/idf_driver_20211018234947237831.png) 如果驱动安装成功,当[HX-DK-商](https://item.taobao.com/item.htm?spm=a1z10.1-c-s.w4004-22286946226.12.59ca2c2c5a3wJ3&id=654877303965)中的标号9只要插上USB线,在设备管理器中就可以发现一个`虚拟的串口`和一个`USB-JTAG的接口`,如下所示: ![](https://docdisk.wireless-tech.cn/img/2021/10/18/idf_driver_device_manager_20211018235009263647.png) 这个时候,用户就可以利用内置的USB-SERIAL-JTAG对ESP32-C3进行下载和调试。 ### 下载 ESP32-C3的固件下载有两种方式: 1. UART下载 因为内置有USB-SERIAL且驱动也已经安装成功,那么用户只需要在VS CODE上进行简单地配置即可下载: 1. 在VSCODE状态栏左下方,选择内置USB-SERIAL的虚拟串口 ![](https://docdisk.wireless-tech.cn/img/2021/10/18/idf_extension_uart_com_20211018235027480487.png) 1. 在ESP-IDF插件设置中,选择串口方式下载固件 ![](https://docdisk.wireless-tech.cn/img/2021/10/18/idf_extension_flash_type_20211018235045193596.png) 1. 在VSCODE状态栏左下方,选择芯片的型号 ![](https://docdisk.wireless-tech.cn/img/2021/10/18/idf_extension_device_type_20211018235105590774.png) 当上述的配置设置完成之后,即实现内置的USB-SERIAL对ESP32-C3进行下载,如下所示: ![](https://docdisk.wireless-tech.cn/img/2021/10/18/UART_Buit-in_download_20211018235143197628.gif) 1. <span id="Jtag_download">JTAG下载</span> 同理,用户只需要在VS CODE上进行简单地配置即可: 1. 在ESP-IDF插件设置中,选择JTAG方式下载固件 ![](https://docdisk.wireless-tech.cn/img/2021/10/18/idf_extension_jtag_20211018235313621755.png) 1. 在VSCODE状态栏左下方,选择芯片的型号 ![](https://docdisk.wireless-tech.cn/img/2021/10/18/idf_extension_device_type_20211018235425731503.png) 当上述的配置设置完成之后,即实现内置的USB-JTAG对ESP32-C3进行下载,如下所示: ![](https://docdisk.wireless-tech.cn/img/2021/10/18/JTAG_Buit-in_download_20211018235335442241.gif) ### 调试仿真 到目前小编写下这篇文章为止,基于`VSCODE`+`ESP-IDF插件`+`ESP-IDF`的方式,对ESP32-C3进行调试仿真,已经相对比较稳定可靠了;之所以这篇文章这么难产,是因为前期各个方面有太多的Bug,消耗了小编大量的时间,如果有读者在官方的Github仓库查询ESP32-C3 Debug问题的话,基本上大部分都是小编我发的Ticket。好了,废话不多说,想要使用内置的USB-JTAG对ESP32-C3进行调试仿真,需要如下2个步骤: 1. 同样的,在VSCODE状态栏左下方,选择芯片的型号,即: ![](https://docdisk.wireless-tech.cn/img/2021/10/18/idf_extension_device_type_20211018235425731503.png) 1. 配置当前代码工程的`launch.json`文件为下述的内容: ```json { "version": "0.2.0", "configurations": [ { "type": "espidf", "name": "Launch-name", "request": "launch", "mode": "auto", "skipVerifyAppBinBeforeDebug": true } ] } ``` 当上述的配置设置完成之后,为了保证调试仿真的鲁棒性,请先用上述的[JTAG下载](#Jtag_download)的方法先下载固件 <font size=5>**(如果固件没有更新,一次即可;如果有更新,则务必再下载一次)**</font>>,然后再按下`F5`键,即可实现内置的USB-JTAG对ESP32-C3进行调试仿真,如下图所示: ![](https://docdisk.wireless-tech.cn/img/2021/10/18/JTAG_Buit-in_debug_20211018235715623520.gif) > 如果突然间出现无法调试仿真的情况,先用上述的[JTAG下载](#Jtag_download)的方法先下载固件,紧接着硬件复位一下ESP32-C3,然后再按下`F5`键进行调试仿真。 <font size=4> **注意:按照上述的步骤之后,但是出现`ModuleNotFoundError: No module named 'win32api'`** </font>,此时就应该调用下述的命令查看是否有安装pywin32,命令如下所示: ```c f:\Tools\Espressif\IDF_Tools\.espressif\python_env\idf5.0_py3.9_env\Scripts\python.exe -m pip list -l Package Version --------------------- --------- bitstring 3.1.9 Brotli 1.0.9 certifi 2021.10.8 cffi 1.15.0 charset-normalizer 2.0.7 click 8.0.3 colorama 0.4.4 construct 2.10.67 contextlib2 21.6.0 cryptography 36.0.1 ecdsa 0.17.0 esp-windows-curses 0.1 Flask 0.12.5 Flask-Compress 1.10.1 Flask-SocketIO 2.9.6 future 0.18.2 gdbgui 0.13.2.0 gevent 1.5.0 greenlet 1.1.2 idf-component-manager 1.0.1 idna 3.3 itsdangerous 2.0.1 Jinja2 3.0.2 kconfiglib 14.1.0 MarkupSafe 2.0.1 pip 22.0.4 pycparser 2.20 pyelftools 0.27 pygdbmi 0.9.0.2 Pygments 2.10.0 pyparsing 3.0.7 pyserial 3.5 python-engineio 3.14.2 python-socketio 4.6.1 pywin32 303 PyYAML 6.0 reedsolo 1.5.4 requests 2.26.0 requests-toolbelt 0.9.1 schema 0.7.4 semantic-version 2.8.5 setuptools 60.5.0 six 1.16.0 tqdm 4.62.3 urllib3 1.26.7 Werkzeug 0.16.1 wheel 0.37.0 windows-curses 2.3.0 ``` 如果键入上述的命令之后,没有发现`pywin32`,则要安装它,命令如下: ```c f:\Tools\Espressif\IDF_Tools\.espressif\python_env\idf5.0_py3.9_env\Scripts\python.exe -m pip install pywin32 ``` ## 外置的ESP-Prog 如上述的[内置的USB-SERIAL-JTAG](#USB_SERIAL_JTAG)内容所述,内置的USB-SERIAL-JTAG控制器仍然存在一些瑕疵,所以有的应用场景仍然需要外部的调试仿真器来下载以及调试仿真。 同理,外置的ESP-Prog在使用之前,也是需要安装驱动文件的,其方法也跟内置的USB-SERIAL-JTAG的相似,即在上一章节[《基于VSCODE的ESP32C3开发环境的搭建》](https://docs.wireless-tech.cn/doc/6/)中提及的`ESP-IDF-Tools`工具中可以获取得到,即使用ESP-IDF-Tools安装相应的配置工具包时,要勾选`idf_driver`。最后,用户就可以在`.espressif`文件夹找到它,如下图所示: ![](https://docdisk.wireless-tech.cn/img/2021/10/18/idf_driver_ftdi_20211018235757650970.png) 如果驱动安装成功,ESP-Prog只要插上USB线,在设备管理器中就可以发现一个`虚拟的串口`和一个`USB-JTAG的接口`,如下所示: ![](https://docdisk.wireless-tech.cn/img/2021/10/18/idf_driver_esp_prog_device_manager_20211018235835916594.png) 这个时候,用户就可以利用外置的ESP-Prog对ESP32-C3进行下载和调试。还有一点需要注意的是:当ESP Prog与[HX-DK-商](https://item.taobao.com/item.htm?spm=a1z10.1-c-s.w4004-22286946226.12.59ca2c2c5a3wJ3&id=654877303965)的标号8相连接时,请**将ESP Prog的`JTAG_PWR_SEL`拨到5V,然后`HX-DK-商开发板`什么线都不需要接**。 ### 下载(ESP-Prog) 由于ESP Prog调试仿真器也具备USB-JTAG和USB-SERIAL的功能,所以其也支持两种方式的下载: 1. UART下载 这种方式比较简单,只需要将对应的TX和RX相互连接即可;至于ESP Prog的TX、RX引脚详情,请参考[ESP Prog官方的介绍](https://docs.espressif.com/projects/espressif-esp-iot-solution/en/latest/hw-reference/ESP-Prog_guide.html?highlight=esp%20prog),因为这种方式大同小异,小编就不再细述。 <img src="https://docdisk.wireless-tech.cn/img/2022/04/09/2022-04-09_125751_963972.png" width = "300" height = "" alt="" align=center /> 1. JTAG下载 如果使用外置ESP-Prog的JTAG接口对ESP32-C3进行下载,用户还需要对ESP32-C3内部的eFuse进行设置 **(注意,该设置是永久的,不可恢复的)**,即需要使用`espefuse.py`对eFuse的`JTAG_SEL_ENABLE`位进行烧录,操作的命令如下: ```c F:/Tools/Espressif/IDF_Tools/.espressif/python_env/idf4.4_py3.8_env/Scripts/python.exe F:\BLE_WIFI\Espressif\SDK\esp-idf-c3\components\esptool_py\esptool\espefuse.py -p COM50 burn_efuse JTAG_SEL_ENABLE 1 ``` 上述是小编当前的`Python`和`espefuse.py`路径和`COM口`,不同的用户可能对应的路径些许不同。当按照上述的命令配置之后,ESP32-C3在复位时,会根据GPIO10的电平来判断使用内置USB-JTAG还是外置的JTAG调试仿真器: - GPIO10为低电平时,使用内置的USB-JTAG - GPIO10为高电平时,使用外置的JTAG调试仿真器 > **但是!!!目前这个功能截止目前为止还有[Bug](https://github.com/espressif/openocd-esp32/issues/177 "Bug"),只能通过下一版的硬件升级才能解决这个问题;当前的现状就是只要烧录了JTAG_SEL_ENABLE位,ESP32-C3就永远只能支持外置的JTAG调试仿真器了。** 紧接着,我们就可以进行JTAG烧录了,即: 1. 在ESP-IDF插件设置中,选择JTAG方式下载固件 ![](https://docdisk.wireless-tech.cn/img/2021/10/19/idf_extension_jtag_20211019000552993886.png) 1. 在VSCODE状态栏左下方,选择芯片的型号 ![](https://docdisk.wireless-tech.cn/img/2021/10/19/idf_extension_device_type_esp_prog_20211019000609235839.png) 当上述的配置设置完成之后,即实现外置的ESP Prog对ESP32-C3进行下载,如下所示: ![](https://docdisk.wireless-tech.cn/img/2021/10/19/ESP_Prog_Buit-in_download_20211019000652676315.gif) ### 调试仿真(ESP-Prog) 同理,使用外置ESP Prog调试仿真器的设置,与使用内置的USB-SERIAL-JTAG是一样的;唯一不同的是:**只不过当选择设备类型时,要选择`ESP32-C3(ESP-PROG JTAG)`** ;小编这里也不再过多地描述,下图是使用外置ESP Prog调试仿真器的动图: ![](https://docdisk.wireless-tech.cn/img/2021/10/19/ESP_Prog_Buit-in_debug_20211019000759386022.gif) 至此,如何基于JTAG接口对ESP32-C3进行下载及调试仿真已经讲解完毕。
红旭无线
2022年4月9日 13:20
6123
7 条评论
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
欢迎关注红旭无线官方微信公众号
Markdown文件
PDF文档
PDF文档(打印)
分享
链接
类型
密码
更新密码
有效期