Малина, не могу записать в 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).

Другие вопросы по тегам