Linux 上的 Cygnal Integrated Products 串行端口

Cygnal Integrated Products serial port on Linux

我有一个红外线温度计,它在 USB 虚拟串口上运行,我想在 Debian 上使用它 Linux。不幸的是,系统没有枚举 /dev/ttyUSB 设备。

这是设备的 dmesg

usb 5-1: new full-speed USB device number 3 using uhci_hcd
usb 5-1: New USB device found, idVendor=10c4, idProduct=834b
usb 5-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
usb 5-1: Product: Infrared Online Sensor Adapter
usb 5-1: Manufacturer: Silicon Labs
usb 5-1: SerialNumber: CT00092755

这里是 lsusb -v:

Bus 005 Device 003: ID 10c4:834b Cygnal Integrated Products, Inc.
Couldn't open device, some information will be missing
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               1.10
  bDeviceClass            0 (Defined at Interface level)
  bDeviceSubClass         0
  bDeviceProtocol         0
  bMaxPacketSize0        64
  idVendor           0x10c4 Cygnal Integrated Products, Inc.
  idProduct          0x834b
  bcdDevice            1.00
  iManufacturer           1
  iProduct                2
  iSerial                 3
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength           32
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          0
    bmAttributes         0x80
      (Bus Powered)
    MaxPower              100mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass       255 Vendor Specific Class
      bInterfaceSubClass      0
      bInterfaceProtocol      0
      iInterface              2
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x01  EP 1 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               0

我怎样才能让它工作,以便我可以用串行端口连接到它?

事实证明,该设备使用标准的 Silicon Labs CP2102 接口芯片,设备制造商为其加载了自定义 idProduct 编号。虽然该芯片与 cp210x.ko 驱动程序 100% 兼容,但 idProduct 无法被系统识别,并且不会与驱动程序关联。

此时,有几种可能的解决方案:

  • 通过此 idProduct 手动指示系统使用 cp210x.ko 驱动程序。
  • idProduct添加到open source driver,编译并安装它。然后尝试将更改推送到标准 Linux 存储库。
  • 用通用芯片替换定制芯片。
  • 改写芯片上的idProduct

我选择重写idProduct。 Silicon Labs 有 free utility 可以做到这一点。我设置了 idProduct=EA60,这是该芯片的默认值。该设备现在可以被标准的内置驱动程序识别,并且可以完美运行。