如下图所示,ESP32S3芯片支持多种程序下载和调试方式。ESP32S3 在芯片内部集成了一颗USB控制器,可以用切换Boot模式的形式将USB控制器模拟成一路下载串口。芯片的Jtag功能和USB功能是不能同时使用的,功能切换使用Efuse(一次性熔丝位)控制。默认情况下BananaPI 的熔丝位填充为全0,所以功能上仅支持USB模拟串口下载。
为了可以同时使用USB功能和Jtag功能通常情况下使用内部USB控制器+外部JTAG控制器的方式,所以在使用的时候需要烧录Efuse将Jtag功能切换至外部控制器。
JTAG接口是嵌入式行业定义的统一的单板调试接口协议,规范定义了信号电平、协议和传输方式。通常情况下仅需要TDI、TDO、TCK、TMS 和 GND 这5根线即可完成芯片的调试。
ESP32 通过开源调试软件OpenOCD来进行PC和Jtag控制器的数据交互,OpenOCD 支持市面上常见的所有Jtag控制器,OpenOCD设备支持列表。
因为搬家手边只有一个JlinkV9,就以Jlink为例子给大家介绍下如何进行调试。其他的调试器使用方式都是类似的,只要支持Jtag接口即可。详细的接线示意可以参考如下示意图。
默认情况下Jlink是只支持Jflash
进行固件下载,JLinkGDBServerCL
进行调试的。需要进行驱动替换之后才可使用OpenOCD。
Zadig
之后选择 Options
-> List All Devices
列举出当前计算机上接入的USB设备Reinstall Driver
,按照提示进行即可完成驱动替换。(初次替换可能显示的是install Driver)。{
"C_Cpp.intelliSenseEngine": "Tag Parser",
"idf.flashType": "JTAG", //接口类型必须为JTAG
"idf.adapterTargetName": "esp32s3",
"idf.portWin": "COM3", //替换成自己的串口
"idf.openOcdConfigs": [ //配置文件根据实际选择 后续要修改此文件
"board/esp32s3-bridge.cfg"
],
"terminal.integrated.defaultProfile.windows": "Windows PowerShell"
}
一般保持默认就可以,VScode IDF会帮我们自动生成。
{
"version": "0.2.0",
"configurations": [
{
"name": "GDB",
"type": "cppdbg",
"request": "launch",
"MIMode": "gdb",
"miDebuggerPath": "${command:espIdf.getXtensaGdb}",
"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
}
}
]
}
为了使用外部Jtag接口,需要通过烧录熔丝位开启外部Jtag,操作方法如下:
pip install esptool
python -m espefuse -p <串口号> burn_efuse DIS_USB_JTAG 1
python -m espefuse -p <串口号> summary
可以看到在烧录之后DIS_USB_JTAG位已经从0变成了1,重启esp32 之后就可以进行后续操作。
默认情况下ESP32 的openocd配置文件支持的JTAG烧录器为乐鑫官方的ESP-JTAG,因此需要将其修改为使用的烧录器,方法如下:
在.vscode/setting.json选项配置过程中以下字段配置。
"idf.openOcdConfigs": [ //配置文件根据实际选择 后续要修改此文件
"board/esp32s3-bridge.cfg"
],
因此需要修改esp32s3-bridge.cfg
文件以支持jlink,修改具体内如如下所示:
# Example OpenOCD configuration file for ESP32-S3 connected via ESP USB Bridge board
#
# For example, OpenOCD can be started for ESP32-S3 debugging on
#
# openocd -f board/esp32s3-bridge.cfg
#
# Source the JTAG interface configuration file
#source [find interface/esp_usb_bridge.cfg]
# 从esp usb bridge 修改为jlink.cfg,其他调试器的cfg文件名可以打开openocd-esp32\share\openocd\scripts\interface 目录查询
source [find interface/jlink.cfg]
# ESP32S3 chip id defined in the idf esp_chip_model_t
#espusbjtag chip_id 9
# Source the ESP32-S3 configuration file
source [find target/esp32s3.cfg]
如果找不到cfg文件可以使用everything等软件搜索下,一般在esp安装路径下:
C:\Users\songz\.espressif\tools\openocd-esp32\v0.11.0-esp32-20220411\openocd-esp32\share\openocd\scripts\board
终于到了最终可以使用的步骤,操作分为以下几个步骤:
OpenOCD Server
将其连接运行和调试按钮
然后运行GDB调试(在实际的使用过程中可能会运行2-3次GDB才能进入调试,原因未知。如果多次操作还是无法运行GDB,尝试将OpenOCD断开从新连接试试。)
烧伤保险丝 - ESP32-S3 - — esptool.py 最新文档 (espressif.com)
2021基于vscode以及jlink调试esp32最新esp32 jlink
Installation and Dependencies - ESP32-S3 - — esptool.py latest documentation (espressif.com)
版权说明:如非注明,本站文章均为 扬州驻场服务-网络设备调试-监控维修-南京泽同信息科技有限公司 原创,转载请注明出处和附带本文链接。
请在这里放置你的在线分享代码