Малина, не могу записать в USB-Serial конвертер
Я работаю над небольшим скриптом Python для малины, который взаимодействует с внешним устройством. это внешнее устройство имеет порты RS232 и USB, и я использую его через порт USB.
lsusb показывает:
Bus 001 Device 004: ID 0665:5161 Cypress Semiconductor USB to Serial
Поэтому я предполагаю, что USB-порт во встроенном устройстве имеет конвертер USB-Serial.
Пока все в порядке, за исключением того, что когда я открываю устройство через PyUSB, я могу получить только конечную точку IN (0x81), но не конечную точку OUT.
Поэтому я решил проверить через lsusb -v:
Bus 001 Device 004: ID 0665:5161 Cypress Semiconductor USB to Serial
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x0665 Cypress Semiconductor
idProduct 0x5161 USB to Serial
bcdDevice 0.02
iManufacturer 3 (error)
iProduct 1 (error)
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 34
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 3 Human Interface Device
bInterfaceSubClass 0 No Subclass
bInterfaceProtocol 0 None
iInterface 0
HID Device Descriptor:
bLength 9
bDescriptorType 33
bcdHID 1.11
bCountryCode 0 Not supported
bNumDescriptors 1
bDescriptorType 34 Report
wDescriptorLength 27
Report Descriptor: (length is 27)
Item(Global): Usage Page, data= [ 0x00 0xff ] 65280
(null)
Item(Local ): Usage, data= [ 0x01 ] 1
(null)
Item(Main ): Collection, data= [ 0x01 ] 1
Application
Item(Local ): Usage, data= [ 0x02 ] 2
(null)
Item(Global): Logical Minimum, data= [ 0x00 ] 0
Item(Global): Logical Maximum, data= [ 0xff 0x00 ] 255
Item(Global): Report Size, data= [ 0x08 ] 8
Item(Global): Report Count, data= [ 0x08 ] 8
Item(Main ): Input, data= [ 0x82 ] 130
Data Variable Absolute No_Wrap Linear
Preferred_State No_Null_Position Volatile Bitfield
Item(Local ): Usage, data= [ 0x02 ] 2
(null)
Item(Global): Report Count, data= [ 0x08 ] 8
Item(Main ): Output, data= [ 0x82 ] 130
Data Variable Absolute No_Wrap Linear
Preferred_State No_Null_Position Volatile Bitfield
Item(Main ): End Collection, data=none
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0008 1x 8 bytes
bInterval 12
Device Status: 0x0000
(Bus Powered)
Существует только одна конфигурация, один интерфейс, одна конечная точка, и она помечена как IN. Это возможно?
Заранее спасибо!
1 ответ
Этот совет:
bInterfaceClass 3 Human Interface Device
HID передает данные на ПК (IN) через конечную точку прерывания. В обратном направлении используется контрольная точка по умолчанию (EP0).
Поэтому я предполагаю, что USB-порт во встроенном устройстве имеет конвертер USB-Serial.
Хотя это может иметь место, он использует необычную конфигурацию. Протокол HID не потребует (OEM) драйверов на ПК, но имеет гораздо более низкие ограничения скорости передачи данных, что нормально для таких устройств, как ИБП.
TL; DR Просто получите доступ к устройству, как и к любому другому устройству HID с помощью pyUSB, и используйте управляющие сообщения для направления OUT (Pi=>device).