LibUsb error: device address collision with root hub

LibUsb error: device address collision with root hub

我对这行代码有疑问。我能够成功打开设备并发送。

发送中:

retCode = LibUsb.bulkTransfer(devHandle, endpointSend, buf, iBuf, timeout);

接收:

retCode = LibUsb.bulkTransfer(devHandle, endpointReceive, messageBuf, iBuf, timeout);   
logger.debug("Receiving Message Status: "+retCode);

输出:

对于发送,我得到了 0 的响应,但在接收时,我得到了 -7。

Receiving Message Status: -7

libusb: error [init_device] program assertion failed: device address collision with root hub

其他日志

receiveMessage messageBuf: java.nio.DirectByteBuffer[pos=0 lim=1000 cap=1000]
receiveMessage iBuf: java.nio.HeapIntBuffer[pos=1 lim=1 cap=1]

搜索的参考文献:

http://usb4java.org/apidocs/constant-values.html#org.usb4java.LibUsb.ERROR_TIMEOUT

public static final int ERROR_PIPE  -9
public static final int ERROR_TIMEOUT   -7

有时当我断开和连接设备时它是-9,但通常是-7。由于我已经玩了一段时间超时,我开始怀疑它与管道有关。如何解决 -9 错误代码?

sometimes it is -9 when I disconnect

应始终为 -9,因为断开连接会清除内核中的 USB 句柄。

For Sending, I got a response of 0 but in receiving, I got -7.

这是常规的 ERROR_TIMEOUT,它可能是也可能根本不是错误。

基本意思就是:USB设备在timeout期间没有在endpoint上发送任何数据。

在 USB2UART 芯片的(示例)情况下,ERROR_TIMEOUT 仅表示 UART RX 线上没有接收到字节。

有趣的事实:LibUsb.bulkTransfer() 可以从 USB 设备接收 字节,并且 不会 return 在这种情况下的错误代码。 USB 批量端点实际上允许这样做(这与 "no data at all" 情况不同)。