一、背景
最近在做一台小机器,设备初步规划使用几个实体按钮,这样方便用户戴手套操作。但因为设备有一些需要配置的参数,有需要配备屏幕。但是开发时间比较紧。考虑再三,决定先在初步配备一个简单的控制箱。控制箱上不带屏幕。后期配备一个无线连接的屏幕。这样用户在需要设置参数的时候通过无线连接到设备上就可以配置。另一方面,如果用户不想使用无线连接的屏幕,也可以在后期开发一个app,只要设备接入无线局域网也可以控制设备。这时候就想到了使用ESP32。以前用过几次ESP32,但是ESP32-S3还是第一次用。因为ESP32-S3带有更多的IO,同时蓝牙支持BLE5.[ESP32支持双模蓝牙,其实也不错。]这次就决定使用ESP32-S3.
二、发现问题
经过一番电路设计、layout、制板、焊接之后,windows可以完美识别,并在设备管理器上呈现了两个设备。
一个是USB串行设备,一个是 USB/JTAG设备。一切似乎很完美。然后在vscode里面的esp-idf用blink example来测试配置工程。编译正常,但是令人疑惑的是当我用vscode的flash直接下载的时候。“start openocd”之后,就失败了。
提示信息大概如下(因为不想再浮现失败了,就没法截屏):
Warn : Transport "jtag" was already selected
[OpenOCD] Info : Listening on port 6666 for tcl connections Info : Listening on port 4444
[OpenOCD] for telnet connections
[OpenOCD] ❌ Error: libusb_open() failed with LIBUSB_ERROR_NOT_FOUND
Error: libusb_open() failed with LIBUSB_ERROR_NOT_SUPPORTED
[OpenOCD] ❌ Error: esp_usb_jtag: could not find or open device!
三、问题解决
然后去官网浏览解决方案。找到一些openocd相关的教程。
测试发现openocd也正常运行,说明openocd安装本身没有问题。
只看到有一个用命令行烧写程序的教程,测试成功:
idf.py -p PORT flash
# 我这里将PORT改为了我的COM5
这再一次说明了我的设备,应该是驱动成功了。
四、最终解决方案
最终解决方案是在第二天解决的。其实就是按照前一天的思路找esp32-s3的官方usb/jtag驱动。
官网的网页如下:Configure ESP32-S3 built-in JTAG interface
里面提到windows系统可能会遇到LIBUSB_ERROR_NOT_FOUND 的问题。看来提示信息中的关键字就是“LIBUSB_ERROR_NOT_FOUND ”,只是最初没有想到。
解决方法如下:
在Powershell (wt命令)里面输入以下命令
Invoke-WebRequest 'https://dl.espressif.com/dl/idf-env/idf-env.exe' -OutFile .\idf-env.exe; .\idf-env.exe driver install --espressif
windows就会自动从上面提到的网址中下载驱动,并用idf-env去安装驱动。如果路径设置的好,可以将驱动直接下载到你已经存在的.espressif下。如果配置不好也没有关系,在安装好之后,可以手动将驱动安装文件转移到你自己的文件夹下。以保证下次安装的时候可以按照传统的方法更换驱动程序。
因为之前已经配置成功。这里只展示我手动删除设备和驱动之后,初次默认安装的驱动和手动选择指定驱动的地方。
上图说明:
2023/3/20/21:51:02的时候我手动删除了设备和驱动
2023/3/20/21:51:08 我手动刷新,windows默认安装的驱动。并启动了设备。可以看到是随后配置和更新的是WINUSB驱动。
2023/3/20/21:53:01 涉及的两条是配置了oem205,但是winusb并未启动。
如果你深入进去可以看到两个驱动的供应商不一样。一个是microsoft,另一个是libwdi。
总之在经过以上配置之后,就可以使用自带的usb/jtag下载程序了。
五、其它注意事项
idf-env的github链接,里面也提到了此命令。
上面命令成功的关键是设备的状态正常。我的设备有时候会在启动的时候进入特殊状态。这时程序没有正常跑,此时是不能正常烧写程序的。
做完这一步下一步就是使用openocd调试了。任重而道远,后会有期。
版权归原作者 watershade2010 所有, 如有侵权,请联系我们删除。