USB-устройство / PyUSB на Windows и LInux ведут себя по-разному - PullRequest
1 голос
/ 25 января 2020

У меня есть устройство с интерфейсом USB, которое я могу подключить как к своей машине с Ubuntu 18.04, так и к машине Windows 10. На Windows 10 мне нужно установить драйвер CP210x и вручную подключить его к устройству (в противном случае Windows пытается найти драйвер производителя устройства - это последовательный чип CP210x), а в Linux записать идентификатор поставщика и productID в драйвер cp210x для подключения к ttyUSB0. Это отлично работает.

Драйвер Windows от SiliconLabs - производителя микросхемы UART-USB в устройстве.

Итак, Windows подключен к COM5 и Linux к ttyUSB0 ( Ubuntu, Raspbian)

Используя Wireshark, я могу sn oop успешно использовать USB-шину в обеих операционных системах.

USB-устройство регулярно отправляет данные по шине USB и Windows с помощью Wireshark. Я вижу это сообщение как сообщение "URB_INTERRUPT in" с последними несколькими байтами, фактически содержащими данные, которые мне необходимы. Я могу видеть только пакеты URB_BULK. Изучая конечные точки с помощью pyusb, я вижу, что конечной точки URB_Interrupt нет, только URB_Bulk.

При использовании библиотек pyusb в Linux выясняется, что единственными доступными конечными точками являются URB_BULK.

Вопрос в основном заключается в как мне сказать Linux, чтобы заставить устройство отправлять через механизм передачи прерываний, как это делает Windows. Я не вижу метода в set_configuration в pyusb для этого (так как конечные точки передачи прерываний не появляются) и не нашел ничего в спецификации производителя.

В противном случае, конечно, я мог бы sn oop сообщения о конфигурации на Windows, но должно быть что-то, чего мне здесь не хватает?

1 Ответ

0 голосов
/ 02 февраля 2020

Не обращая внимания на это, в итоге ответ был прост: Windows переназначал адрес устройства на шине другому устройству.

...