ESP-32的预算调试器及其配置

最近,在为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 #     https://github.com/espressif/openocd-esp32/releases cd openocd-esp32 ./bootstrap ./configure # ,  FTDI-based adapters  make -j6 sudo make install 

我另外注意到,我已将此版本的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:


 #!/bin/bash echo "$@" | telnet localhost 4444 

它使您可以快速将命令直接发送到OpenOCD守护程序。 但是稍后会更多。


我们将CJMCU板连接到ESP-32


在这里,我们需要电线和烙铁,没有任何方式。 下表显示了要连接的内容和原因。


联系CJMCUJTAG目的联系ESP-32
AD0TCK13
公元1贸易发展指数12
公元2TDO15
公元3短信14
+ 5伏VIN(详细阅读!)
+ 3.3V3V3(详细阅读!)
地线GND(突然之间)

关于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调试技巧


  1. 忘记EN按钮并在板上重置。 通过“终止并重新启动”重新启动。


  2. 供固件使用


     openocd_command 'program_esp32 _/.bin 0x10000 verify' 

    您可以通过openocd_command自定义命令设置openocd_command并将其添加为构建目标,然后在“目标名称”字段中输入参数(不带引号)。


  3. 停止并恢复后,您可能无法获得预期的效果。 之后,我的播放声音的库因为有计时器的玩笑而疯狂地颤抖。



至此,我目前对该系统的经验结束了。 祝您调试工作富有成效(说实话,这不会令人愉快)!

Source: https://habr.com/ru/post/zh-CN421291/


All Articles