ESP32S3 ubuntu+vscode环境搭建及使用内部USB-JTAG(builtin)调试程序
[复制链接]
(一)环境搭建
ESP32系列开发环境部署难度一直为人所诟病,首当其冲的是C站上各种各样的坑人教程,其中大部分是抄袭极其老旧的教程,已经跟不上ESP系列库快速的发展步伐。
要论哪里有靠谱的教程,当属ESP的官方wiki:Linux 和 macOS 平台工具链的标准设置
在linux下安装和开发都比windows有优势的多,首先是工具链更好部署、另外编译速度也明显比windows平台更快。
1、首先安装依赖项
sudo apt-get install git wget flex bison gperf python3 python3-pip python3-setuptools cmake ninja-build ccache libffi-dev libssl-dev dfu-util libusb-1.0-0
2-从github获取idf,虽然可以走其他渠道,但最终会拉子模块,拉取还是会指向github。因为众所周知的问题,经常会在拉取过程断开连接。在我部署环境的时候还是比赛刚开始的5月份,当时可以使用镜像站拉取(使用hub.fastgit.xyz替换下面的github.com),但现在这个镜像站也G了,暂时也没有其他比较好的方法,只能自己科学地冲浪了。
mkdir -p ~/esp
cd ~/esp
git clone -b v4.4.2 --recursive https://github.com/espressif/esp-idf.git
3-安装esp tool:
这一步会设计从github拉取 esp tool工具文件,可以使用乐鑫的官网源替换:
export IDF_GITHUB_ASSETS="dl.espressif.com/github_assets"
另外还会从国外网站拉取pip相关内容,也容易导致崩溃,可以重定向pip3相关项目到清华源:
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
安装:
./install.sh
4-部署环境设置PATH这不可以不用,因为我们使用的是 vscode,vscode内置定向工具,不需要为我们系统额外增加一堆路径
5-在vscode扩展搜索esp idf,注意不是platform io
安装后敲F1,输入IDF EXTENSION,选第一个:
选择第二项 adventure,在第三项和第四项分别输入刚才下载idf的地址和esp tool的地址:
6-测试
在idf安装目录下的example下随便拷一个例程出来,选择esp32s3,然后点编译:
出现如下则说明编译通过,环境没有问题:
7-完善代码跳转
创建c_cpp_properties.json文件(在.vscode文件夹下),输入类似如下配置:
"configurations": [
{
"name": "Linux",
"includePath": [
// "${workspaceFolder}/../../mb_example_common/include",
"${workspaceFolder}/main/**",
"/home/tinnu/software/esp/idf_git5/esp-idf/components/**",
"/home/tinnu/software/esp/idf_git5/esp-idf/examples/protocols/modbus/mb_example_common/include/**",
"/home/tinnu/software/esp/idf_git5/esp-idf/examples/common_components/protocol_examples_common/include/**",
"/home/tinnu/software/esp/idf_git5/esp-idf/components/freemodbus/common/include/**",
"/home/tinnu/software/esp/idf_git5/esp-idf/components/freertos/include/freertos/**",
"${workspaceFolder}/build/config/**"
],
"defines": ["CONFIG_EXAMPLE_IPV4", "CONFIG_EXAMPLE_IPV4_ONLY"],
"compilerPath": "/home/tinnu/.espressif/tools/riscv32-esp-elf/esp-2021r2-patch3-8.4.0/riscv32-esp-elf/bin/riscv32-esp-elf-gcc",
"cStandard": "gnu17",
"cppStandard": "gnu++14",
"intelliSenseMode": "linux-gcc-x64"
}
],
即可进行跳转查阅代码。
8-下载
下载有两种方法,一个是通过串口,或者通过内部JTAG。
串口方法不再多提,比较繁琐的是JTAG方法。
首先我们手动查看ESP TOOL安装目录下有没有该文件:
ls ~/.espressif/tools/openocd-esp32/v0.11.0-esp32-20220411/openocd-esp32/share/openocd/scripts/board/esp32s3-builtin.cfg
这个是openocd的脚本文件,里面有esp32s3相关参数,类似的脚本还有:
esp32s3-bridge.cfg esp32s3-ftdi.cfg
第一个是走esp bridge技术,通过一个ESP32S3调试另一个ESP32S3用的,而后面一个则是ESP32专用的FTDI芯片做的调试器。
我们所使用的esp32s3-builtin.cfg脚本是走芯片上集成的黑科技USB-JTAG接口,每个芯片内部集成JTAG,非常酷炫。
如图绿色圈:
在确认文件存在后,新建 settings.json 文件(在.vscode文件夹下),加入如下配置
"idf.adapterTargetName": "esp32s3",
"idf.flashType": "JTAG",
"idf.openOcdConfigs": [
"board/esp32s3-builtin.cfg"
],
"idf.port": "/dev/ttyACM0",
点击右下角的openocd server。
启动后选择JTAG,点击flash:
9-调试
调试需要在.vscode下新建launch.json文件,加入如下配置:
"miDebuggerServerAddress": "127.0.0.1:3333",//目标板的ip地址和端口
"program": "${workspaceRoot}/build/xxx.elf",
"miDebuggerPath": "/home/dds/.espressif/tools/xtensa-esp32s3-elf/esp-2021r2-patch3-8.4.0/xtensa-esp32s3-elf/bin/xtensa-esp32s3-elf-gdb",
然后点击F5就可以愉快地断点调试,不过最好不要超过两个断点,打了两个断点之后就不要步进了:
甚至可以启动条件断点。
另外不知道是不是版本问题,对esp32s3的复位比较麻烦,经常开启调试之后程序不是重头启动的,这时候需要先暂停程序运行,然后 DEBUG CONSOLE执行:
-exec mon reset halt
|