最近,在为ESP-32编写库时,需要捕获死锁,死锁有时是由于我的弯曲而导致的,这导致需要购买带有JTAG接口的调试板。 产生了什么-请仔细阅读。
装置 和材料
我们的主要特征,或更确切地说,是调试的目标:

基于ESP-WROOM-32芯片的开发板。 我不会提供链接,因为在那个地方所有东西都已经被购买了。
现在-调试板本身:


中捷液晶模组FT232H
我没有打扰,并在速卖通上订购了740.08卢布。 与ePacket交付。 费用包含焊接脚,仅在手边,因为我们不需要它们。
一组导线,每条6条:一端焊接,另一端连接ESP-32。
我也强烈建议您使用USB延长线,如果没有,它会很紧。
具有(X)Ubuntu 18.04的计算机。
客制化
为ESP-32安装OpenOCD
在这里,您可以安全地参考esp-idf本身的扩展坞:
sudo apt-get install make libtool pkg-config autoconf automake texinfo libusb-1.0 libftdi1-2 git git clone --recursive https://github.com/espressif/openocd-esp32.git
我另外注意到,我已将此版本的OpenOCD安装到系统中( sudo make install
),当您为不同的设备使用不同的OpenOCD时,这是不可接受的。
为我们定制OpenOCD
在这一点上,我拆分了调试卡和ESP-32本身的配置。 原来是这样的:
board.cfg:
transport select jtag adapter_khz 20000 # # set ESP32_ONLYCPU 1 # # set ESP32_RTOS none # RTOS source [find target/esp32.cfg]
interface.cfg:
interface ftdi ftdi_vid_pid 0x0403 0x6014 ftdi_layout_init 0x0c08 0x0f1b
编写Udev规则
由于权限问题,我们将无法访问USB设备。 可以使用udev规则的一行来解决:
echo 'SUBSYSTEM=="usb", ATTR{idVendor}=="0403", ATTR{idProduct}=="6014", GROUP="plugdev", MODE="0666"' | sudo tee /etc/udev/rules.d/99-JTAG.rules sudo systemctl restart udev.service sudo udevadm control --reload-rules
辅助脚本
除其他外,这样的脚本非常方便:
openocd_command:
它使您可以快速将命令直接发送到OpenOCD守护程序。 但是稍后会更多。
我们将CJMCU板连接到ESP-32
在这里,我们需要电线和烙铁,没有任何方式。 下表显示了要连接的内容和原因。
关于VIN和3V3
如果您不想从计算机上拉一条单独的线到ESP-32 devkit,则可以将+ 5V连接到VIN。 固件将通过JTAG,正如个人经验所示,该速度要快得多。 该选项的一个缺点是无法查看UART日志,但是恕我直言,调试器完全消除了对此操作的需要。
如评论中所述,不可能为ESP-32本身提供5V电压,而只能为devkits提供5V电压。 如果需要调试单独的芯片,则可以通过将CJMCU本身的+ 3.3V连接到ESP-32上的3V3,从CJMCU本身的转换器为其供电。 但是我不能说转换器是否有足够的功率,最好单独使用一个电源。 是的,同时连接5V和3.3V是不值得的。
在这种情况下,请始终连接GND!
检查OpenOCD
像这样运行OpenOCD:
openocd -s ' interface.cfg board.cfg' -f interface.cfg -f board.cfg
如果一切顺利,他们将向您显示以下内容:
Open On-Chip Debugger 0.10.0-dev (2018-08-22-14:47) Licensed under GNU GPL v2 For bug reports, read http://openocd.org/doc/doxygen/bugs.html adapter speed: 20000 kHz esp32 interrupt mask on Info : ftdi: if you experience problems at higher adapter clocks, try the command "ftdi_tdo_sample_edge falling" Info : clock speed 20000 kHz Info : JTAG tap: esp32.cpu0 tap/device found: 0x120034e5 (mfg: 0x272 (Tensilica), part: 0x2003, ver: 0x1) Info : JTAG tap: esp32.cpu1 tap/device found: 0x120034e5 (mfg: 0x272 (Tensilica), part: 0x2003, ver: 0x1) Info : esp32: Debug controller was reset (pwrstat=0x5F, after clear 0x0F). Info : esp32: Core was reset (pwrstat=0x5F, after clear 0x0F). Info : Detected debug stubs @ 3ffb3134 on core0 of target 'esp32' cpu0: Current bits set: BreakIn BreakOut RunStallIn cpu1: Current bits set: BreakIn BreakOut RunStallIn
这表明一切正常!
重要提示 :在忙于调试时,OpenOCD进程应该一直旋转。
启用Eclipse
官方文档中详细描述了许多步骤,我将不再重复。
Eclipse调试技巧
忘记EN按钮并在板上重置。 仅通过“终止并重新启动”重新启动。
供固件使用
openocd_command 'program_esp32 _/.bin 0x10000 verify'
您可以通过openocd_command
自定义命令设置openocd_command
并将其添加为构建目标,然后在“目标名称”字段中输入参数(不带引号)。
停止并恢复后,您可能无法获得预期的效果。 之后,我的播放声音的库因为有计时器的玩笑而疯狂地颤抖。
至此,我目前对该系统的经验结束了。 祝您调试工作富有成效(说实话,这不会令人愉快)!