Я пытаюсь связаться с оценочной панелью AD9913 (Analog Devices) с USB-контроллером Cypress FX-2. Я написал полностью функциональную библиотеку Python, которая работает безупречно в Windows 7 (с использованием драйвера, созданного с помощью lib-lib32-1.2.6.0's inf-wizard.exe), но теперь я пытаюсь запустить такое же программное обеспечение из малины Pi 3 с Raspbian Jessie и, похоже, не может писать или читать.pyusb - [Ошибка 5] в Linux, но не 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])
Однако на малина возникают несколько проблем. Во-первых, код продукта 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, не должно быть необходимости здесь - не разрешает проблему.
Я подозреваю, что проблема связана с различием между ОС/libusb и реализацией Linux/интерфейсом USB-связи (уже намекнул на то, что показанный идентификатор продукта отличается для того же самого прикрепленного оборудования) что может потребовать внесения некоторых изменений в способ записи на конечную точку USB.
Я рад предоставить дополнительную информацию, если необходимо, и приветствую все намеки и предложения.