我有 USB 实时时钟 (RTC),它连接到嵌入式 Linux 设备。 RTC 通过 i2c 访问,i2c 通过 USB 公开。 我通过 PyMCP2221A 模块访问 RTC,该模块又使用 cython-hidapi 模块,该模块与 hidapi 库 接口。 至少这是我对这一切如何运作的理解。
但是突然间,在我的新 Linux 版本上,cython-hidapi 不再显示设备。 我想不出有什么可以改变的来打破这个。
在我的旧版本上:
root@intel-corei7-64:~# python3 -c "import hid; print(hid.enumerate());"
[
{'path': b'1-5:1.2', 'vendor_id': 1240, 'product_id': 221, 'serial_number': '', 'release_number': 256, 'manufacturer_string': '', 'product_string': '', 'usage_page': 0, 'usage': 0, 'interface_number': 2},
{'path': b'1-2:1.0', 'vendor_id': 1008, 'product_id': 654, 'serial_number': '', 'release_number': 16644, 'manufacturer_string': '', 'product_string': '', 'usage_page': 0, 'usage': 0, 'interface_number': 0},
{'path': b'1-2:1.1', 'vendor_id': 1008, 'product_id': 654, 'serial_number': '', 'release_number': 16644, 'manufacturer_string': '', 'product_string': '', 'usage_page': 0, 'usage': 0, 'interface_number': 1},
{'path': b'1-2:1.2', 'vendor_id': 1008, 'product_id': 654, 'serial_number': '', 'release_number': 16644, 'manufacturer_string': '', 'product_string': '', 'usage_page': 0, 'usage': 0, 'interface_number': 2}
]
在我的新版本上:
root@intel-corei7-64:~# python3 -c "import hid; print(hid.enumerate());"
[]
在这两种情况下,操作系统仍然可以看到该设备,没有明显问题:
root@intel-corei7-64:~# udevadm info /dev/ttyACM0
P: /devices/pci0000:00/0000:00:15.0/usb1/1-5/1-5:1.0/tty/ttyACM0
N: ttyACM0
S: serial/by-id/usb-Microchip_Technology_Inc._MCP2221_USB-I2C_UART_Combo-if00
S: serial/by-path/pci-0000:00:15.0-usb-0:5:1.0
E: DEVLINKS=/dev/serial/by-id/usb-Microchip_Technology_Inc._MCP2221_USB-I2C_UART_Combo-if00 /dev/serial/by-path/pci-0000:00:15.0-usb-0:5:1.0
E: DEVNAME=/dev/ttyACM0
E: DEVPATH=/devices/pci0000:00/0000:00:15.0/usb1/1-5/1-5:1.0/tty/ttyACM0
E: ID_BUS=usb
E: ID_MODEL=MCP2221_USB-I2C_UART_Combo
E: ID_MODEL_ENC=MCP2221\x20USB-I2C\x2fUART\x20Combo
E: ID_MODEL_FROM_DATABASE=Celeron N3350/Pentium N4200/Atom E3900 Series USB xHCI
E: ID_MODEL_ID=00dd
E: ID_PATH=pci-0000:00:15.0-usb-0:5:1.0
E: ID_PATH_TAG=pci-0000_00_15_0-usb-0_5_1_0
E: ID_PCI_CLASS_FROM_DATABASE=Serial bus controller
E: ID_PCI_INTERFACE_FROM_DATABASE=XHCI
E: ID_PCI_SUBCLASS_FROM_DATABASE=USB controller
E: ID_REVISION=0100
E: ID_SERIAL=Microchip_Technology_Inc._MCP2221_USB-I2C_UART_Combo
E: ID_TYPE=generic
E: ID_USB_CLASS_FROM_DATABASE=Miscellaneous Device
E: ID_USB_DRIVER=cdc_acm
E: ID_USB_INTERFACES=:020201:0a0000:030000:
E: ID_USB_INTERFACE_NUM=00
E: ID_USB_PROTOCOL_FROM_DATABASE=Interface Association
E: ID_VENDOR=Microchip_Technology_Inc.
E: ID_VENDOR_ENC=Microchip\x20Technology\x20Inc.
E: ID_VENDOR_FROM_DATABASE=Microchip Technology, Inc.
E: ID_VENDOR_ID=04d8
E: MAJOR=166
E: MINOR=0
E: SUBSYSTEM=tty
E: USEC_INITIALIZED=2305363
我验证了PyMCP2221A和cython-hidapi的版本没有改变。 所以看起来 hidapi 本身就是问题,但我不能确定。 有谁知道可能出了什么问题或者我如何调试这个问题?
编辑:
我找到了这个 hidapitester 程序并尝试了一下。
hidapitester --list
在我的任何一个 Linux 版本上都没有返回任何内容,即使是 hid.enumerate()
显示设备的版本也是如此。
事实证明,两个系统上的 cython-hidapi 模块不是相同的版本。 当我运行
hid.version_str()
时,我在两个系统上都得到了 0.14.0
。 但后来我检查了pip freeze
,发现新系统现在实际上正在使用0.14.0.post2
。 我切换回 0.14.0
,一切又恢复正常了。