pyocd 报错 No USB backend found 的解决方法
本文记录了我在Windows 10系统上遇到的pyocd命令执行报错——No USB backend found 的分析过程和解决方法。遇到类似问题的朋友可以直接参考最后的解决方法,向了解问题发送原因的可以查看原因分析部分。
文章目录
- pyocd 报错 No USB backend found 的解决方法
- 一、问题现象
- 问题背景
- 二、原因分析
- HidApiUSB.isAvailable
- PyWinUSB.isAvailable
- 三、解决方法
- 可能方案
- 最终方案
一、问题现象
今天在我的PC上使用执行 pyocd 时报错,具体信息如下:
最后一行报错信息内容是:
pyocd.probe.pydapaccess.dap_access_api.DAPAccessIntf.DeviceError: No USB backend found
问题背景
问题发生的背景补充说明:
- 操作系统是:Windows 10 64位;
- Python版本是:3.11.4 ;
- pyocd版本是:0.36.0 ;
- git-bash环境执行的命令,cmd执行也是一样的报错;
- 另外,之前执行 pyocd 命令一直都没有问题,今天才出现的;
二、原因分析
从截图上能够看出来这是一个Python代码产生的异常,抛出异常的一行代码在截图上也可以看到:
raise DAPAccessIntf.DeviceError("No USB backend found")
同时,截图上也可以看到位于的文件路径是:
D:\Python\Python311\Lib\site-packages\pyocd\probe\pydapaccess\interface\__init__.py
git-bash环境下,直接用vim打开这个文件:
vim "D:\Python\Python311\Lib\site-packages\pyocd\probe\pydapaccess\interface\__init__.py" +54
对应的代码为:
抛出异常的代码位于54行,可以看到,前面两个条件都失败才会抛出此异常,两个条件分别是:
- HidApiUSB.isAvailable
- PyWinUSB.isAvailable
接下来分析,这两个条的值分别是如何而来的。
HidApiUSB.isAvailable
由于是pyocd命令执行时输出的报错,所以直接在pyocd包的目录下搜索:
具体代码如下:
已经可以看到这个值的来源了:
- 如果import hid执行成功,则为True;
- 如果import hid执行失败,则为False;
PyWinUSB.isAvailable
类似的,可以找到PyWinUSB.isAvailable的来源:
源于两种情况:
- 如果 import pywinusb.hid as hid 成功,则为True;
- 如果 import pywinusb.hid as hid 失败,则为False;
三、解决方法
通过上面的分析,我们就知道解决方法了:
- 让 import hid 成功;
- 让 import pywinusb.hid 成功;
具体的就是:
pip install hid
或者:
pip install pywinusb
可能方案
但是经过试验,在我的系统上,hid安装后,会仍然失败,具体是:
最终方案
因此,最终解决方法是:
pip install pywinusb
安装完成后,pyocd pack find 就可以成功了:
问题解决,大功告成!