用S2 Mini实现ESP-PROG的功能通过JTAG调试ESP32开发板。

ESP-PROG涨价,DAPLink编译了支持JTAG的固件,能调试STM32但ESP32踩了不少坑也没调通。最后发现用闲置的S2 Mini就行了。

调试目标是ESP32-WROOM-32UE开发板。程序是简单的点灯程序。

S2 Mini刷ESP USB Bridge固件

ESP USB Bridge是乐鑫官方推出的将S2/S3变成USB转串口/JTAG设备的固件。

为了方便这里直接用已编译好的ESPLink固件

刷机用到的esptool.py在用PlatformIO编译ESP32程序时已安装,若没有则pip install esptool即可。

我用的是前者,位于~/.platformio/packages/tool-esptoolpy,在其目录下建立tmp文件夹并把ESPLink的三个bin文件复制进去。

USB连接S2 Mini。如果USB串口设备中找不到(特别是新板子),则需手动进入固件下载模式:按住0,按一下RST,等1秒松开0。

执行以下命令进行刷机:

1
python esptool.py -p /dev/ttyACM0 -b 460800 --before default_reset --after hard_reset --chip esp32s2  write_flash --flash_mode dio --flash_size detect --flash_freq 40m 0x1000 tmp/bootloader.bin 0x8000 tmp/partition-table.bin 0x10000 tmp/bridge.bin

其中/dev/ttyACM0是串口设备名(Win是COMx)。

刷完会自动挂载名为ESPLink的U盘,说明刷机成功。

添加S2 Mini的权限

安装PlatformIO见这篇文章

Linux系统需要编辑/etc/udev/rules.d/99-platformio-udev.rules文件,添加以下内容到文件末尾:

1
2
# ESPLink
ATTRS{idVendor}=="303a", ATTRS{idProduct}=="1002", MODE="0666", ENV{ID_MM_DEVICE_IGNORE}="1", ENV{ID_MM_PORT_IGNORE}="1"

重启服务。

1
sudo udevadm control --reload-rules

建议重启一下系统。

接线

JTAG Target
TCK(38) 13
TDI(36) 12
TDO(35) 15
TMS(37) 14
RST(33) EN

另外串口RXD是5,TXD是6,这里暂时用不上。

IMG_20221213_191047

配置调试器

PlatformIO创建项目后编辑platformio.ini

1
2
3
4
5
6
7
8
9
10
[platformio]
default_envs = esp32dev_debug

[env:esp32dev_debug]
platform = espressif32
board = esp32dev
framework = arduino
upload_protocol = esp-bridge
debug_tool = esp-bridge
debug_init_break = tbreak setup

调试

打开src/main.c文件,在delay()这行左边点一下添加断点。

F5(Run > Start Debugging)进入调试界面。和STM32几乎立即进入不同,双核的ESP32要等几秒。

2022-12-13_20-36

反复按F5(顶栏的Continue),可见到板载LED常亮,按一次灭一次。调试器工作正常。