Raspberry pi pyusb-[Error 5]在Linux上,而不是Windows上

Raspberry pi pyusb-[Error 5]在Linux上,而不是Windows上,raspberry-pi,usb,libusb,pyusb,libusb-win32,Raspberry Pi,Usb,Libusb,Pyusb,Libusb Win32,我正在尝试与AD9913评估板模拟设备通信,它有一个Cypress FX-2 USB控制器。我编写了一个功能齐全的Python库,它使用通过libusb-win32-1.2.6.0的inf-wizard.exe生成的驱动程序在Windows 7上完美地运行,但现在我尝试从Raspberry Pi 3和Raspbian Jessie运行相同的软件,似乎无法写入或读取 以下示例适用于Windows 7: import os os.environ['PYUSB_DEBUG'] = 'debug' i

我正在尝试与AD9913评估板模拟设备通信,它有一个Cypress FX-2 USB控制器。我编写了一个功能齐全的Python库,它使用通过libusb-win32-1.2.6.0的inf-wizard.exe生成的驱动程序在Windows 7上完美地运行,但现在我尝试从Raspberry Pi 3和Raspbian Jessie运行相同的软件,似乎无法写入或读取

以下示例适用于Windows 7:

import os
os.environ['PYUSB_DEBUG'] = 'debug'

import usb.core
print "usb.core file:", usb.core.__file__

# get device
dev = usb.core.find(idVendor=0x0456, idProduct=0xEE25)
if dev is None:
    raise ValueError("Device not found")
dev.set_configuration()

# get the firmware version
print "Write: ", dev.write(0x01, [0x00])
print "Read: ", dev.read(0x81, 7)
这里的输出是:

usb.core file: C:\Python27\lib\site-packages\usb\core.pyc
Write:  1
Read:  array('B', [1, 0])
然而,在覆盆子上出现了几个问题。首先,产品ID是0xEE24,这是我通过dmesg发现的,其次,上面的代码示例给出

usb.core file: /usr/local/lib/python2.7/dist-packages/usb/core.pyc
Write:
Traceback (most recent call last):
    File "usbtesting_minimal_linux.py", line 29, in <module>
      print "Write: ", dev.write(0x01, [0x00])
    File "/usr/local/lib/python2.7/dist-packages/usb/core.py", line 948, in write
self.__get_timeout(timeout)
    File "/usr/local/lib/python2.7/dist-packages/usb/backend/libusb1.py", line 824, in bulk_write
timeout)
    File "/usr/local/lib/python2.7/dist-packages/usb/backend/libusb1.py", line 920, in __write
_check(retval)
    File "/usr/local/lib/python2.7/dist-packages/usb/backend/libusb1.py", line 595, in _check
     raise USBError(_strerror(ret), ret, _libusb_errno[ret])
usb.core.USBError: [Errno 5] Input/Output Error
对于前面提到的示例脚本,只有一个接口0,其中在Linux上,接口0没有端点,但还有其他接口接口0、1、接口0、2和接口0、3,其中第一个接口与Windows显示的唯一接口相同

按照描述分离内核驱动程序——鉴于我目前作为USB新手的理解,这里不需要分离内核驱动程序——并不能解决问题

我怀疑问题源于Windows/libusb和Linux实现/后端USB通信之间的差异,这一点已经被以下事实所暗示:所显示的productID对于连接的同一块硬件是不同的,这可能需要对我写入USB端点的方式进行一些更改


如果需要,我很乐意提供更多信息,并欢迎所有提示和建议。

尽管我仍然无法在Raspberry Pi上与设备通信,但错误5问题通过明确选择具有适当端点的适当替代设置来解决,例如

dev.set_interface_altsetting(interface = 0, alternate_setting = 1)
然后,读/写请求不再失败,出现错误5,而是出现超时错误,对于libusb1为错误110,对于libusb0为无

我现在怀疑操作系统如何检测设备存在问题,因为不仅Windows和Linux之间的productID发生了变化,而且我感兴趣的端点的wMaxPacketSize在Windows上的值为64字节,在Linux上的值为512字节


一旦我进一步进行故障排除,我将打开一个新问题并添加链接作为对此答案的注释,或者在此处发布整个解决方案,以防我可以立即解决所有问题。

最有可能的是,固件导致的此错误未上载。通常来说,FX-2 USB控制器不保存固件

谢谢你把这个挖出来。是的,缺乏正确的固件是导致这些问题的众多问题之一。虽然我成功地上传了固件并解决了许多后续问题,但后来我放弃了该项目,因为事实证明,即使是带有专有驱动程序的Windows变体也无法为预期的应用程序可靠地工作。我们现在通过Arduino直接与AD9913和类似芯片通信。
dev.set_interface_altsetting(interface = 0, alternate_setting = 1)