0

我正在尝试与具有 Cypress FX-2 USB 控制器的 AD9913 评估板(模拟设备)通信。我编写了一个功能齐全的 Python 库,可以在 Windows 7 上完美运行(使用通过 libusb-win32-1.2.6.0 的 inf-wizard.exe 生成的驱动程序),但现在我尝试从 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])

但是,在 Raspberry 上会出现几个问题。首先,产品 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

我通过调用来执行脚本sudo python minimal_example.py,否则(如预期的那样)我得到usb.core.USBError: [Errno 13] Access denied (insufficient permissions). (对于上述测试,我删除了我添加的 udev 规则以允许访问我的常规用户帐户,然后重新启动并重新插入设备。)

我还注意到在 Windows 上Configuration 1(这是唯一的配置),如添加所示

cfg = dev.get_active_configuration()

对于上述示例脚本,只有一个Interface 0,而在​​ LinuxInterface 0上没有端点,但有额外的接口和Interface 0, 1,其中第一个与 Windows 显示的唯一接口相同。Interface 0, 2Interface 0,3

本文所述分离内核驱动程序- 鉴于我目前作为 USB 新手的理解在这里不应该是必要的 - 并不能解决问题。

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

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

4

2 回答 2

1

很可能是固件导致的这个错误没有上传。通常来说,FX-2 USB 控制器不保存固件。

于 2019-03-05T04:07:33.750 回答
0

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

dev.set_interface_altsetting(interface = 0, alternate_setting = 1)

然后读/写请求不再失败Error 5,而是出现超时错误(Error 110forlibusb1Nonefor libusb0)。

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

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

于 2017-01-26T13:31:55.150 回答