我試圖與具有賽普拉斯FX-2 USB控制器的AD9913評估板(ADI公司)進行通信。我編寫了一個功能齊全的Python庫,可以在Windows 7上完美地工作(使用通過libusb-win32-1.2.6.0的inf-wizard.exe生成的驅動程序),但現在我嘗試從Raspberry Pi 3運行相同的軟件, Raspbian Jessie似乎無法書寫或閱讀。pyusb - Linux上的[錯誤5],但不是Windows
下面的小例子,可以在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
我通過調用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
,其中如在Linux Interface 0
沒有端點,但有附加接口Interface 0, 1
,Interface 0, 2
和Interface 0,3
,其中第一個是相同的Windows顯示的唯一界面。
按照in this post的說明分離內核驅動程序 - 這在目前不需要USB驅動程序的情況下給予我當前的理解 - 並不能解決問題。
我懷疑這個問題源於USB通信的Windows/libusb和Linux實現/後端之間的區別(已經暗示了所附的產品ID與所附的硬件完全不同的事實)這可能需要對寫入USB端點的方式進行一些更改。
如果需要,我很樂意提供更多信息,並歡迎提供所有提示和建議。