之前在学习ESP32,其中有一部分课程是学习openocd通过JTAG调试程序的,因为我用的是ESP32-wroom,usb端口没有集成对应的usb转jtag的ft232,查了ESP32相关的资料(JTAG 调试 - ESP32 - — ESP-IDF 编程指南 latest 文档 (espressif.com))里面提到ESP32的JTAG适配器,ESP-WROVER-KIT开发板使用的是FT2232H,且开发板内部已经集成这个适配器。
我查了很多资料,确定ESP32里面是没有集成FT2232H适配器的,但是官方还是保留了接口以便我们自行接入JTAG适配器。
根据上面的接口可以连接对应的JTAG适配器。
当时脑子一热就买了FT232H,看到淘宝里面的评论说可以调试ESP32就买了,没想到这么难配置,找不到合适的资料。淘宝店家也只是发了FTDI的官方资料和原理图(和这个模块的原理图还不一样),反正是靠不住的,最终各种摸索之下找到配置方法。
网上有说需要EEPROM去写值设置成JTAG模式,包括spec上也是说需要通过EEPROM进行config,没看的很详细,主要是我还要买个EEPROM?这也太麻烦了吧?
后来自己又摸索了一下,发现可以通过FT_Prog软件,将模式切换成D2xx。
因为我这个型号的只有一个JTAG口,所以选择Hardware Specific时要选Port A,然后Port A-->Driver右侧选择D2xx Direct这个选项最后,上方选项卡Devices中选择Program,弹出来的框选Program完成即可。
但还是连接不上openocd,猜测没有驱动导致的么?
下载usb driver tool可以设置对应的驱动,设置好之后,貌似能成功检测到了。 Automatic USB driver installer for FTDI and LibUSB drivers (visualgdb.com)
也不知道对不对,看到网上教程说这么设置,之后在设备管理器里面就会有这个。
但是openocd也仅仅是检测到了,实际上跑不起来,会有问题。是cfg配置的问题。
GitHub - amirgon/ESP32-JTAG: ESP32 FT232H JTAG Debugging on Linux
上面是一模一样这个模块,JTAG Debug的配置说明,接线也有说明,看了之后才发现我之前接线是有误的,各位也可以检查一下有没有接错。
把git hub上的cfg下载下来,放在espressif(esp的sdk)中的openocd路径中。
D:\Espressif\tools\openocd-esp32\v0.11.0-esp32-20221026\openocd-esp32\share\openocd\scripts\board
上面是我的路径,给你们参考,之后执行openocd的指令
openocd -f .\board\ft232h.cfg
这里上面都已经配置好了,红色Error的信息是扫描不到cfg中的esp32的cpu,所以这里把esp32接上电脑之后,再执行一次指令。
成功的接通,openocd处于端口监听的状态了,但是这里还是有些问题的,下面的额信息Debug controller reset了,这里不确定是什么问题,通过espidf去尝试连接gdb,openocd也没有反应,说明这里还是有问题的。暂时没确定是什么问题,后续解决了再补充。
8月13日更新:
经过github上的引用资料,找到了乐鑫官方一个类似的帖子。
openocd & esp32 DevKitC on Linux - ESP32 Forum
上面使用的gdb和我现在用的不太一样,我之前用的是riscv32-esp-elf-gdb,后来在前面配置的openocd中使用的ft232h.cfg中,发现其source了esp32.cfg这个文件,进到esp32.cfg之后,发现里面使用的是xtensa的语句,所以是我前面使用的gdb工具错了。
换成上面这个指令,最后成功连接,但是一开始进入的位置并不是main函数,而且提示remote方式不支持run指令,需要使用continue,指令调用后,blink程序就会运行,开发板LED灯闪烁。