Skip to content

第1章 基础篇 基础不牢,地动山摇

Wireless-Tech edited this page Oct 6, 2022 · 2 revisions

1.1 初识ESP32-C3

本章内容将带领大家认识在准备开发ESP32-C3之前,需要了解哪些内容,如不同开发环境和方式的区别、软件开发套件的选择和下载的方式、遇到问题应该查阅哪些资料或从哪里获取得到有效的技术支持,从而避免一些不必要的时间消耗。

1.1.1 ESP32-C3 背景介绍

ESP32-C3,是乐鑫于2020年11月27日公布的一款低成本高性能且注重安全的WiFi4 & BLE 5.0 SoC;同时,其也是乐鑫ESP32家族C系列第一款采用RISC-V内核的芯片;然而,其在2021年4~5月份才开始真正推向市场。所以,目前官方和第三方关于ESP32-C3的资料都非常的匮乏,这也很容易导致新人在入手这颗芯片时,由于多如牛毛的ESP32系列资料的干扰;一方面,打击了新手的自信心;另一方面,会因资料与芯片不匹配而浪费大量的时间。因此,小编在本章节内容将带领新人如何快速认识并使用ESP32-C3。

1.1.2 开发环境搭建

妨碍新人玩转ESP32-C3的最大拦路虎就是开发环境的搭建,主要的问题点如下所示:

  1. 问题最多的就是Windows环境,因为用于开发ESP32-C3的很多工具都是Linux系统天生自带的,同样的工具想要在Windows系统上运行,或多或少会存在兼容性和水土不服的情况;
  2. 其次,就是苹果的Mac系统,但是得益于Mac OS是基于Unix内核开发的界面操作系统,与Linux系统的兼容性会比Windows系统好很多,自然在Mac系统开发ESP32-C3就会顺畅很多,毕竟Linux和Unix之间有血缘关系;
  3. 最后,开发ESP32-C3体验最好的就是Linux系统了;

综上所述,如果大家平时主力使用的系统就是Linux或者Mac,那么小编强烈推荐使用Linux和Mac开发ESP32-C3。当然,如果是使用Windows系统开发ESP32-C3,相较于以前现在问题也不是很大,只是稍微有点曲折。这里,小编推荐1.2 基于VSCode的ESP32-C3开发环境的搭建1.3 基于JTAG对ESP32-C3的调试及下载,相较于官网的教程这两篇教程会更加符合新人,尤其是用习惯了IAR和KEIL的新人,其基本融合了IAR和KEIL大部分同样的功能;当然,如果还是觉得官网推出的教程更适合,则请单击跳转

1.1.2.1 开发方式

开发方式也是困扰新人的另一个绊脚石,有纯命令行Eclipse+插件VScode+插件Microsoft VS+插件以及第三方的一些工具;可谓是五花八门让新人迷失了方向,导致不知道选择哪个才是最稳定可靠、好用以及有乐鑫官方维护的。这里,小编强烈推荐使用VScode+插件方式进行ESP32-C3的代码开发,因为VScode是一个跨平台的文本编辑器,配合各式各样的插件可以大大地提高工作效率;至于,如何使用它们请参考上述开发环境搭建中推荐的两篇文章,而上述其他的方式请读者们自行查找。

1.1.2.2 软件开发套件

同样,这也是一个让新人一脸懵逼地选择,目前有ESP-IDFARDUINO-ESP32,Micro-Python,Lua,Javascript等等这几种软件开发方式;对于这么多类型的软件开发,小编推荐的意见如下:

  1. 【推荐★★★★★】,如果是想要使用ESP32-C3开发产品,则老老实实使用ESP-IDF,功能最全且更新最快;
  2. 【推荐★★★】,如果是想要搞搞DIY,则使用ARDUINO-ESP32,但有可能遇到想要的功能没有对应的接口;
  3. 【推荐★】,熟悉Python的又只是想搞DIY的,可以使用Micro-Python,但是是由第三方进行维护,维护的工程师与官方的没法相提并论;
  4. 【不推荐】,对于从互联网转过来的工程师,则可以选择Lua和Javascript,非主流的开发方式;

1.1.2.3 工具及软件开发套件下载

这也是很多新人吐槽最多的一个点,由于很多工具和软件的镜像并没有放在国内的服务器,导致用户下载的时候少则几十分钟,多则几个小时,如下:

  1. 【推荐★★★★】,乐鑫官方的Gitee仓库

    镜像已经同步至国内的服务器,下载速度非常快,但是有些周折,甚至有时会有莫名其妙的问题;

  2. 【推荐★★★★★】,乐鑫官方的Github仓库

    如果条件允许,强烈推荐从Github的仓库下载对应的软件开发套件和工具;因为它永远是最新,最早修复bug的仓库;

1.1.3 资料

对于日常的ESP32-C3开发,所使用到的必备资料如下:

  1. ESP32-C3规格书
  2. ESP32-C3技术参考手册
  3. ESP32-C3编程指南
  4. 红旭无线的ESP32-C3系列教程
  5. 乐鑫官方的参考例程

以上资料已经涵盖了日常所使用的大部分场景,无特殊情况无须额外的资料。

1.1.4 技术支持

在开发ESP32-C3的时候,难免会遇到一些技术的难题,可以通过以下渠道获取得到技术支持:

  1. 【推荐★★★★★】,乐鑫官方的Github的Issues

    有乐鑫官方专人解答,响应速度以及回复质量是最高的;

  2. 【推荐★★★】,乐鑫官方的ESP32论坛

    有乐鑫官方专人解答,但是响应速度和回答率并没有Github的Issues高,尤其是中文发的贴子,基本上没有人理会;

  3. 【推荐★★★★】,乐鑫官方的技术支持邮件[email protected]

    对于不擅长英文的工程师,可以采用这种方式,但是由于FAE的能力水平参差不齐,有时解决一个问题会花费很长一段时间,平均的响应速度不是太快,但总体略好于乐鑫官方的ESP32论坛;

  4. 【推荐★★★★】,红旭技术论坛

    红旭无线有专人解答,由于人手有限,所以仅限于HX-DK-商开发板所涉及的无线相关问题;

  5. ESP32-C3相关问题,可以在此QQ群与各位网友一起自由讨论;

1.2 基于VSCode的ESP32-C3开发环境的搭建

本章的内容,讲解了基于Visual Studio Code来搭建ESP32-C3的开发环境,包括SDK和工具包的下载和更新、Espressif IDF插件的下载和配置、固件的烧录、编译以及程序的编辑,都可以在这里找到答案,这也是开启ESP32-C3软件开发的一小步。

1.2.1 准备工作

目前,ESP32-C3是乐鑫新推出的一款 WiFI&BLE 5.0 SoC芯片,要想实现ESP32-C3的代码编辑程序编译固件烧写以及软件的功能调试仿真。我们需要提前下载下述的工具:

  1. Visual Studio Code

    主要用于代码地编辑和编译,以及固件地烧录和调试仿真

  2. Espressif IDF插件

    在VS Code的插件市场中输入Espressif IDF,便可以直接下载;其出自于乐鑫官方之手,大大方便了工程师基于乐鑫芯片的开发;小编在写这篇文章时,该插件的版本为v0.6.1,如果后续有新的版本则使用最新的版本

  3. Git

    用于下载乐鑫的SDK以及对应的工具,同时它也是一个很好版本管理以及协同合作的工具,安装最新版本的即可;

  4. Microsoft Visual C++ Build Tools

    如果安装相关软件时,出现下述错误:

    error: Microsoft Visual C++ 14.0 is required.

    这个时候就需要安装这个软件,否则不需要;

1.2.2 开发环境搭建

1.2.2.1 SDK

  • 步骤1,在任何你想要存放SDK的位置,单击鼠标右键并选中Git Bash Here(前提是已经安装了Git工具)

  • 步骤2,然后根据自己的实际情况,键入下述的任何一条命令:

  • 步骤3,子模块更新

    下载完SDK之后,还需要对子模块进行更新;那么如何判断是否有子模块呢?我们可以在SDK目录查看是否有.gitmodules文件;如果有,则还需要键入以下命令:

    git submodule update --init --recursive --progress

1.2.2.2 工具包

当将SDK下载下来之后,我们还需要下载对应的工具才能实现编译下载以及调试仿真;由于是以ESP32-C3为主题来讲解,所以这里其他ESP32型号对应的工具就不用下载了,具体的步骤如下:

  • 步骤1,在系统环境变里中增加工具包的存放路径,如下:

    变量名:IDF_TOOLS_PATH 变量值:F:\Tools\Espressif\IDF_Tools\ .espressif

    其中变量名不可改变,但是对应的路径可以根据自己的情况不同而不同

  • 步骤2,设置工具包在国内服务器的下载路径,否则下载速度会很慢

    变量名:IDF_GITHUB_ASSETS 变量值:dl.espressif.com/github_assets

  • 步骤3,在通过Git下载下来的SDK根目录下,打开Powershell.exe以便路径可以切换到SDK的根目录

  • 步骤4,然后在步骤3中打开的powershell窗口,键入如下命令:

    .\install.ps1 esp32c3

  • 步骤5,在步骤4之后,先不要关闭powershell窗口,继续键入如下命令:

    .\export.ps1

    紧接着就会输出不同工具的路径,此时仍然先不要关闭powershell窗口,下述章节会用到这些内容,如下图所示:

如果上述的操作正确,那么ESP32-C3的相关工具包,就会很快被安装下载到你指定的目录下:

1.2.2.3 Espressif IDF插件

在VSCode中进行开发ESP32-C3之前,需要对Espressif IDF插件进行配置,主要需要修改的地方如下:

  • idf.adapterTargetName

    该参数主要配置目标设备,如esp32esp32s2esp32c3esp32s3;选择esp32c3即可,如下图所示:

  • idf.customExtraPaths

    该参数主要是在VSCode中,提前将上述安装的各个配置工具包的路径添加到系统环境变量PATH,当然你可以直接将各个配置工具包的路径,分别添加到你电脑的系统环境变量PATH上,只不过Espressif IDF插件在执行相关的操作时,是优先调用idf.customExtraPaths中的内容;那么,应该如何填充这些内容呢?也就是上面步骤5提及的内容;那么,知道了有哪些工具之后,我们就将这些工具的路径填充到idf.customExtraPaths,以下是小编配置工具包的路径内容 (请勿直接复制下述内容,其仅表示当前小编的工具包路径,后续应随着工具的升级而做出相应的修改)

    F:\BLE_WIFI\Espressif\SDK\esp-idf\components\esptool_py\esptool;F:\BLE_WIFI\Espressif\SDK\esp-idf\components\app_update;F:\BLE_WIFI\Espressif\SDK\esp-idf\components\espcoredump;F:\BLE_WIFI\Espressif\SDK\esp-idf\components\partition_table;F:\Tools\Espressif\IDF_Tools\.espressif\tools\riscv32-esp-elf-gdb\11.2_20220823\riscv32-esp-elf-gdb\bin;F:\Tools\Espressif\IDF_Tools\.espressif\tools\riscv32-esp-elf\esp-2022r1-11.2.0\riscv32-esp-elf\bin;F:\Tools\Espressif\IDF_Tools\.espressif\tools\cmake\3.24.0\bin;F:\Tools\Espressif\IDF_Tools\.espressif\tools\openocd-esp32\v0.11.0-esp32-20220706\openocd-esp32\bin;F:\Tools\Espressif\IDF_Tools\.espressif\tools\ninja\1.10.2\;F:\Tools\Espressif\IDF_Tools\.espressif\tools\idf-exe\1.0.3\;F:\Tools\Espressif\IDF_Tools\.espressif\tools\ccache\4.6.2\ccache-4.6.2-windows-x86_64;F:\Tools\Espressif\IDF_Tools\.espressif\python_env\idf5.1_py3.9_env\Scripts;F:\BLE_WIFI\Espressif\SDK\esp-idf\tools;
    

    当填充完成之后,再打开全局的Setting,看看格式符不符合JSON格式:

    "idf.customExtraPaths": "F:\\BLE_WIFI\\Espressif\\SDK\\esp-idf\\components\\esptool_py\\esptool;F:\\BLE_WIFI\\Espressif\\SDK\\esp-idf\\components\\app_update;F:\\BLE_WIFI\\Espressif\\SDK\\esp-idf\\components\\espcoredump;F:\\BLE_WIFI\\Espressif\\SDK\\esp-idf\\components\\partition_table;F:\\Tools\\Espressif\\IDF_Tools\\.espressif\\tools\\riscv32-esp-elf-gdb\\11.2_20220823\\riscv32-esp-elf-gdb\\bin;F:\\Tools\\Espressif\\IDF_Tools\\.espressif\\tools\\riscv32-esp-elf\\esp-2022r1-11.2.0\\riscv32-esp-elf\\bin;F:\\Tools\\Espressif\\IDF_Tools\\.espressif\\tools\\cmake\\3.24.0\\bin;F:\\Tools\\Espressif\\IDF_Tools\\.espressif\\tools\\openocd-esp32\\v0.11.0-esp32-20220706\\openocd-esp32\\bin;F:\\Tools\\Espressif\\IDF_Tools\\.espressif\\tools\\ninja\\1.10.2\\;F:\\Tools\\Espressif\\IDF_Tools\\.espressif\\tools\\idf-exe\\1.0.3\\;F:\\Tools\\Espressif\\IDF_Tools\\.espressif\\tools\\ccache\\4.6.2\\ccache-4.6.2-windows-x86_64;F:\\Tools\\Espressif\\IDF_Tools\\.espressif\\python_env\\idf5.1_py3.9_env\\Scripts;F:\\BLE_WIFI\\Espressif\\SDK\\esp-idf\\tools;",
  • idf.customExtraVars

    该参数主要是配置工具包中所需要的一些自定义环境变量值,同样的你可以将自定义环境变量值添加到你电脑的系统环境中,只不过Espressif IDF插件在执行相关的操作时,是优先调用idf.customExtraVars中的内容,如下是小编的内容 (请勿直接复制下述内容,其仅表示当前小编的路径,后续应随着工具的升级而做出相应的修改)

    {"OPENOCD_SCRIPTS":"F:/Tools/Espressif/IDF_Tools/.espressif/tools/openocd-esp32/v0.10.0-esp32-20210902/openocd-esp32/share/openocd/scripts","IDF_CCACHE_ENABLE":"1"}
    

    同理,当填充完成之后,再打开全局的Setting,看看格式符不符合JSON格式:

    "idf.customExtraVars": "{\"OPENOCD_SCRIPTS\":\"F:/Tools/Espressif/IDF_Tools/.espressif/tools/openocd-esp32/v0.10.0-esp32-20210902/openocd-esp32/share/openocd/scripts\",\"IDF_CCACHE_ENABLE\":\"1\"}",
  • idf.espIdfPath

    这里填充ESP-IDF的路径,但是该参数只针对Linux和Mac OS;所以,如果不是这两个系统之一,则可以不填;

  • idf.espIdfPathWin

    这里填充ESP-IDF的路径,但是该参数只针对Windows系统,以下是小编的路径:

    F:\BLE_WIFI\Espressif\SDK\esp-idf-c3

  • idf.flashType

    该参数是配置下载固件时,是选择UART还是JTAG接口; 注意:ESP32-C3芯片只支持JTAG接口,不支持SWD接口;以下是小编的配置:

  • idf.openOcdConfigs

    该参数主要是配置OpenOcd,用于下载以及调试ESP32-C3,我们需要在代码工程中的settings.json配置相关的参数,有两种方式:

    1. 外置的JTAG,如ESP-Prog

      "idf.openOcdConfigs": [    
        "board/esp32c3-ftdi.cfg"
      ]

      上述是使用外部的ESP-Prog调试仿真器的配置;

    2. ESP32-C3内嵌的USB-JTAG

      "idf.openOcdConfigs": [
        "board/esp32c3-builtin.cfg"
      ]

      ESP32-C3内嵌有JTAG调试仿真器,无须额外的调试仿真器也可实现调试仿真;

  • idf.port

    该参数用于选择连接ESP32-C3的串口号,仅对Linux和Mac OS有效;

  • idf.portWin

    该参数用于选择连接ESP32-C3的串口号,仅对Windows OS有效;如果是采用JTAG下载则不需要填充该参数;

  • idf.pythonBinPath

    该参数用于配置工具包中Python工具的路径,仅对Linux和Mac OS有效;

  • idf.pythonBinPathWin

    该参数用于配置工具包中Python工具的路径,仅对Windows OS有效;以下是小编的路径:

    F:\Tools\Espressif\IDF_Tools.espressif\python_env\idf5.1_py3.9_env\Scripts\python.exe

  • idf.toolsPath

    该参数用于配置工具包的路径,仅对Linux和Mac OS有效;

  • idf.toolsPathWin

    该参数用于配置工具包的路径,仅对Windows OS有效;步骤1已经将路径添加到电脑的系统环境中了,以下是小编电脑中新添的IDF_TOOLS_PATH系统环境变量

    所以,该参数的填充如下:

    ${env:IDF_TOOLS_PATH}

除了上述提及的参数,其他的参数暂时保持默认;如有必要,再根据具体的应用做出相对应的更改。

1.2.2.4 更新

当一些软件上的bug修复以及相应工具的升级,官方都会第一时间推送至Github上,所以我们应该时不时地更新一下自己本地的软件和相应的工具,以避免不必要的问题,具体的方式如下:

  • SDK更新

    该命令仅对从master分支下载的SDK有效,在当前SDK的路径下依次键入下述的命令:

    git checkout master
    git pull
    git submodule update --init --recursive

  • 工具包更新

    操作的方法如上述的步骤4

1.2.3 实验

通过上述的1.2.2 开发环境搭建之后,如果没有配置错误,那么这个时候基本上是可以在VSCode中使用Espressif IDF插件的所有功能;以下小编给大家显示常见的几个功能:

1.2.3.1 新建一个工程

为了新建一个,我们首先打开VSCode,然后按下F1->ESP-IDF:Show Examples Projects,然后选择一个你想要创建的工程,这里小编以Blink这个工程为例:

1.2.3.2 编译&下载&监控一个工程

有了工程之后,我们就可以在VSCode中利用Espressif IDF插件编译、下载以及打印Log信息,这里小编还是以Blink这个工程为例:

1.2.3.3 代码补全及函数跳转

如果我们没有进行对应的配置的话,打开一个工程会看到很多的波浪线以及当点击函数名时,不会发生跳转;这个时候就需要我们在代码工程中的c_cpp_properties.json进行配置,以下是小编的配置:

{
  "configurations": [
    {
      "name": "ESP-IDF",
      "compilerPath": "${default}",
      "cStandard": "c11",
      "cppStandard": "c++17",
      "compileCommands": "${workspaceFolder}/build/compile_commands.json",
      "includePath": [
        "${config:idf.espIdfPath}/components/**",
        "${config:idf.espIdfPathWin}/components/**",
        "${workspaceFolder}/**"
      ],
      "browse": {
        "path": [
          "${config:idf.espIdfPath}/components",
          "${config:idf.espIdfPathWin}/components",
          "${workspaceFolder}"
        ],
        "limitSymbolsToIncludedHeaders": false
      }
    }
  ],
  "version": 4
}

其中,上述提及到的compileCommands,其对应的值只有编译工程之后,才会生成对应的compile_commands.json文件;经过上述的配置之后,此时代码补码以及函数跳转就可以正常工作了,以下是小编的操作:

至此,所有开发必备的功能 (包括选择串口号、GUI配置工具、单独编译及下载等功能) 均可以直接在VSCode中完美地运行;至于如何使用JTAG对ESP32-C3下载以及调试,我们在下一篇章中介绍讲解。

1.3 基于JTAG对ESP32-C3的调试及下载

继上一章节《1.2 基于VSCode的ESP32-C3开发环境的搭建》之后,小编相信大部分读者,应该可以轻松地搞定ESP32-C3的开发环境搭建,并完成一些基础的开发;接下来,让我们继续趁热打铁,继续讲讲如何利用JTAG接口对ESP32-C3进行下载和调试仿真。

1.3.1 JTAG接口

为了更好地阐述并实现对ESP32-C3进行下载以及调试仿真,这里小编以HX-DK-商为蓝本,进行一系列的配置和讲解。

目前,ESP32-C3支持两种JTAG连接方式:

  1. 内嵌的JTAG调试仿真器

    ESP32-C3内嵌了一个USB-JTAG控制器,可用于对ESP32-C3进行下载或者调试仿真,如HX-DK-商中的标号9,只要插上Type-C线,即可实现下载和调试仿真的功能。

  2. 外置的JTAG调试仿真器

    如果想要使用外部的调试仿真器,则只要使用标准的10-PIN连接线HX-DK-商中的标号8相连接,即可实现对ESP32-C3的下载和调试仿真。

1.3.1.1 内置的USB-SERIAL-JTAG

ESP32-C3不但内置了USB-JTAG,还内置了USB-SERIAL,这给开发者提供了大大的便利,仅需要一根Type-C线即可实现下载和调试仿真,然而它始终属于ESP32-C3中的一个外设,一旦设备进入休眠又或者死机了又或者重启了,那么这个外设的功能也随之 "失效" 了,假设如果没有这些问题的话,那还是很不错的,这也是目前内置USB-SERIAL-JTAG的局限性所在。所以,HX-DK-商仍然保留了外置的USB-SERIAL和调试仿真器。

在使用内置的USB-SERIAL-JTAG功能之前,用户还需要安装相应的驱动,即在任意地方以管理员权限打开Powershell,然后键入以下命令:

Invoke-WebRequest 'https://dl.espressif.com/dl/idf-env/idf-env.exe' -OutFile .\idf-env.exe; .\idf-env.exe driver install --espressif

如果驱动安装成功,当HX-DK-商中的标号9只要插上Type-C线,在设备管理器中就可以发现一个虚拟的串口和一个USB-JTAG的接口,如下所示:

此时,用户就可以利用内置的USB-SERIAL-JTAG对ESP32-C3进行下载和调试。

1.3.1.2 实验一

1.3.1.2.1 下载

ESP32-C3的固件下载有两种方式:

1.3.1.2.1.1 UART下载

因为内置有USB-SERIAL,且驱动也已经安装成功,那么用户只需要在VSCode上进行简单地配置,即可下载:

  • 在VSCode状态栏左下方,选择内置USB-SERIAL的虚拟串口

  • 在ESP-IDF插件设置中,选择串口方式下载固件

  • 在VSCode状态栏左下方,选择芯片的型号

当上述的配置设置完成之后,即实现内置的USB-SERIAL对ESP32-C3进行下载,如下所示:

1.3.1.2.1.2 JTAG下载

同理,用户只需要在VSCode上进行简单地配置即可:

  • 在ESP-IDF插件设置中,选择JTAG方式下载固件

  • 在VSCode状态栏左下方,选择芯片的型号

当上述的配置设置完成之后,即实现内置的USB-JTAG对ESP32-C3进行下载,如下所示:

1.3.1.2.2 调试仿真

想要使用内置的USB-JTAG对ESP32-C3进行调试仿真,需要如下2个步骤:

  1. 同样的,在VSCode状态栏左下方,选择芯片的型号,即:

  2. 配置当前代码工程的launch.json文件为下述的内容:

{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "espidf",
      "name": "Launch-name",
      "request": "launch",
      "mode": "auto",
      "skipVerifyAppBinBeforeDebug": true
    }
  ]
}

当上述的配置设置完成之后,为了保证调试仿真的鲁棒性,请先用上述的JTAG下载的方法先下载固件 (如果固件没有更新,一次即可;如果有更新,则务必再下载一次),然后再按下F5键,即可实现内置的USB-JTAG对ESP32-C3进行调试仿真,如下图所示:

如果突然间出现无法调试仿真的情况,先用上述的JTAG下载的方法先下载固件,紧接着硬件复位一下ESP32-C3,然后再按下F5键进行调试仿真。

注意:按照上述的步骤之后,但是仍然出现ModuleNotFoundError: No module named 'win32api' ,此时就应该调用下述的命令查看是否有安装pywin32,命令如下所示:

f:\Tools\Espressif\IDF_Tools\.espressif\python_env\idf5.1_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,则要安装它,命令如下:

f:\Tools\Espressif\IDF_Tools\.espressif\python_env\idf5.1_py3.9_env\Scripts\python.exe -m pip install pywin32

1.3.1.3 外置的ESP-Prog

如上述的内置的USB-SERIAL-JTAG内容所述,内置的USB-SERIAL-JTAG控制器仍然存在一些瑕疵,所以有的应用场景仍然需要外部的调试仿真器来下载以及调试仿真。

同理,外置的ESP-Prog在使用之前,也是需要安装驱动文件的,其方法也跟内置的USB-SERIAL-JTAG的相似,即在任意地方以管理员权限打开Powershell,然后键入以下命令:

Invoke-WebRequest 'https://dl.espressif.com/dl/idf-env/idf-env.exe' -OutFile .\idf-env.exe; .\idf-env.exe driver install --ftdi

如果驱动安装成功,ESP-Prog只要插上USB线,在设备管理器中就可以发现一个虚拟的串口和一个USB-JTAG的接口,如下所示:

这个时候,用户就可以利用外置的ESP-Prog对ESP32-C3进行下载和调试。还有一点需要注意的是:当ESP Prog与HX-DK-商的标号8相连接时,请将ESP Prog的JTAG_PWR_SEL拨到5V,然后HX-DK-商开发板什么线都不需要接

1.3.1.4 实验二

1.3.1.4.1 下载

由于ESP Prog调试仿真器也具备USB-JTAG和USB-SERIAL的功能,所以其也支持两种方式的下载:

1.3.1.4.1.1 UART下载

这种方式比较简单,只需要将对应的TX和RX相互连接即可;至于ESP Prog的TX、RX引脚详情,请参考ESP Prog官方的介绍,因为这种方式大同小异,小编就不再细述。

1.3.1.4.1.2 JTAG下载

如果使用外置ESP-Prog的JTAG接口对ESP32-C3进行下载,用户还需要对ESP32-C3内部的eFuse进行设置 (注意,该设置是永久的,不可恢复的),即需要使用espefuse.py对eFuse的JTAG_SEL_ENABLE位进行烧录,操作的命令如下:

F:/Tools/Espressif/IDF_Tools/.espressif/python_env/idf5.1_py3.9_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,只能通过下一版的硬件升级才能解决这个问题;当前的现状就是只要烧录了JTAG_SEL_ENABLE位,ESP32-C3就永远只能支持外置的JTAG调试仿真器了

紧接着,我们就可以进行JTAG烧录了,即:

  1. 在ESP-IDF插件设置中,选择JTAG方式下载固件

  2. 在VSCode状态栏左下方,选择芯片的型号

当上述的配置设置完成之后,即实现外置的ESP Prog对ESP32-C3进行下载,如下所示:

1.3.1.4.2 调试仿真

同理,使用外置ESP Prog调试仿真器的设置,与使用内置的USB-SERIAL-JTAG是一样的;唯一不同的是:只不过当选择设备类型时,要选择ESP32-C3(ESP-PROG JTAG) ;小编这里也不再过多地描述,下图是使用外置ESP Prog调试仿真器的动图:

至此,如何基于JTAG接口对ESP32-C3进行下载及调试仿真已经讲解完成了。

Clone this wiki locally