解决openocd无法识别jlink的问题LIBUSB_ERROR_NOT_SUPPORTED

一.解决方法

当我们使用 openocd + j-link 进行烧录和调试时,会接收到这样的警告:Warn : Failed to open device: LIBUSB_ERROR_NOT_SUPPORTED,最后发现找不到 j-link:Error: No J-Link device found,尽管我们能使用 j-scope,j-flash 等工具,在 KEIL 中也可以正常识别 j-link 。

在 SEGGER 的维基中提到了原因:

In general, it is possible to use J-Link with OpenOCD. OpenOCD handles J-Link as a dumb JTAG/SWD/… probe and only uses the very low level logic to output JTAG/SWD/… sequences. It does not make use of any high level logic etc. and therefore is much slower than the proprietary SEGGER J-Link DLL / GDBServer / … implementation. In order to use J-Link with OpenOCD the standard J-Link USB driver must be replaced with the WinUSB driver, using 3rd party utilities. There are lots of walkthroughs available on the internet.

简单来说就是 openocd 使用 jlink 的方式很低级,所以我们需要把 j-link 原来的驱动更换为 WinUSB 驱动才可以被 openocd 识别。

zadig 和 USBDriverTool 都可以更换驱动,网上绝大部分的教程都推荐使用 zadig,但是其实 USBDriverTool 在这个场景下更适用,原因是 USBDriverTool 不但可以将 j-link usb 驱动转为 WinUSB 驱动,还可以再转换回去,这个是 zadig 做不到的。

SEGGER 的维基中还提到了一点:

Note: Once the J-Link USB driver has been replaced, no SEGGER software from the J-Link software package will be able to communicate with J-Link anymore. To use SEGGER J-Link software again, the USB driver needs to be switched back to its default.

也就是说,我们把 j-link 的驱动转换成 openocd 可以识别的 WinUSB 驱动之后,j-scope,j-flash 等软件都无法使用,也无法在 KEIL 中使用 j-link 烧录和调试程序了。如果想使用这些工具,就必须把驱动还原回去,这时候 USBDriverTool 就派上用场了。

偏题一下,使用 openocd + j-link 是一种比较低效的方式,如果使用 j-link 作为调试器,那么使用 j-link gdb server 或者强大的 ozone 可能更为合适一些。

二.操作步骤

1.zadig

首先插好 j-link ,并选择List All Devices

在这里插入图片描述

最后设备选择 j-link ,要更换的驱动选择 WinUSB ,最后点击Replace Driver即可完成驱动的替换。值得一提的是,这里可以看到 j-link原来的驱动被识别为 jlink(v2.6.8.1),我们如果要把驱动换回去,就要恢复成现在的样子。

在这里插入图片描述

2.USBDriverTool

同样需要先插好 j-link 然后在 j-link 设备上单击右键,选择Install WinUSB即可完成驱动的转换。

在这里插入图片描述

如果想要恢复回原来的驱动,只需选择Restore default driver

在这里插入图片描述

然后选择我圈出来的两个驱动之一即可。恢复完驱动之后,可以使用 j-scope 等工具看一看能不能识别到 j-link。关心 j-link 驱动的版本的话,可以使用 zadig 软件看看和之前的版本号是否一致。

在这里插入图片描述

三.参考资料

SEGGER WIKI

Fixing J-Link “No emulators connected via USB”: How to have J-Link work for both Segger Utilities and VisualGDB (although probably not concurrently)

More on Segger J-Link and VisualGDB.

版权声明:本文为CSDN博主「Qrpucp」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_45467056/article/details/119886361

生成海报
点赞 0

Qrpucp

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

[STM32学习]——一文搞懂I2C总线

目录 I2C总线的概念 I2C最重要的功能包括: I2C的物理层 I2C主要特点: I2C的高阻态 I2C物理层总结: I2C的协议层 初始(空闲)状态 开始

分享灵动微MM32F3270微控制器的音频类产品参考方案

音频设备主要是对音频输入输出设备的总称,其包括的产品类型也很多,一般可以分为以下几种:功放机、音箱、多媒体控制台、数字调音台、音频采样卡、合成器、中高频音箱、话筒,PC中的声卡、耳机等&#

K210应用5-使用中断方式通过UART接收数据

使用中断方式通过UART接收数据 实验目的本节实验目的为实现串口发送和接收。这一节计划采取中断的方式来实现串口接收,K210串口接收到0x00,则熄灭前节提到的红色LED灯,并通过串口打印Red Le

STM32CubeMx hal 驱动sg90舵机

一、舵机的控制原理 舵机通过接收PWM信号,使其进入内部电路产生一个偏置电压,触发电机通过减速齿轮带动电位器移动,使电压差为零时,电机停转,从而达到伺服的效果。即给舵机一个