Ubuntu 22.04下如何查找RFID阅读器的USB端口?
RFID阅读器端口定位及pyembedded适配问题
在Ubuntu 22.04系统中使用pyembedded开发Python程序,需要读取RFID阅读器返回的卡片ID。pyembedded要求通过rfid = RFID(port='{USB}', baud_rate=9600)指定设备端口,但始终无法找到正确的USB端口路径。
已尝试的操作与获取的信息
- udevadm info输出:
执行sudo udevadm info --query=all --name=/dev/input/event16得到以下内容:
sudo udevadm info --query=all --name=/dev/input/event16 P: /devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.0/0003:2518:6022.0003/input/input21/event16 N: input/event16 L: 0 S: input/by-id/usb-NSCCN_wCopy_Smart_Reader-event-if00 S: input/by-path/pci-0000:00:14.0-usb-0:2:1.0-event E: DEVPATH=/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.0/0003:2518:6022.0003/input/input21/event16 E: DEVNAME=/dev/input/event16 E: MAJOR=13 E: MINOR=80 E: SUBSYSTEM=input E: USEC_INITIALIZED=1191291401 E: ID_INPUT=1 E: ID_VENDOR=NSCCN E: ID_VENDOR_ENC=NSCCN E: ID_VENDOR_ID=2518 E: ID_MODEL=wCopy_Smart_Reader E: ID_MODEL_ENC=wCopy\x20Smart\x20Reader E: ID_MODEL_ID=6022 E: ID_REVISION=0103 E: ID_SERIAL=NSCCN_wCopy_Smart_Reader E: ID_TYPE=hid E: ID_BUS=usb E: ID_USB_INTERFACES=:030000: E: ID_USB_INTERFACE_NUM=00 E: ID_USB_DRIVER=usbhid E: ID_PATH=pci-0000:00:14.0-usb-0:2:1.0 E: ID_PATH_TAG=pci-0000_00_14_0-usb-0_2_1_0 E: LIBINPUT_DEVICE_GROUP=3/2518/6022:usb-0000:00:14.0-2 E: DEVLINKS=/dev/input/by-id/usb-NSCCN_wCopy_Smart_Reader-event-if00 /dev/input/by-path/pci-0000:00:14.0-usb-0:2:1.0-event
- 自定义udev规则:
添加了针对该RFID设备的udev规则:
SUBSYSTEM=="USB", ATTRS{idVendor}=="2518", ATTRS{idProduct}=="6022", MODE="0660", GROUP="plugdev"
- usb.core获取的设备完整信息:
DEVICE ID 2518:6022 on Bus 001 Address 007 ================= bLength : 0x12 (18 bytes) bDescriptorType : 0x1 Device bcdUSB : 0x110 USB 1.1 bDeviceClass : 0x0 Specified at interface bDeviceSubClass : 0x0 bDeviceProtocol : 0x0 bMaxPacketSize0 : 0x40 (64 bytes) idVendor : 0x2518 idProduct : 0x6022 bcdDevice : 0x103 Device 1.03 iManufacturer : 0x1 NSCCN iProduct : 0x2 wCopy Smart Reader iSerialNumber : 0x3 bNumConfigurations : 0x1 CONFIGURATION 1: 400 mA ================================== bLength : 0x9 (9 bytes) bDescriptorType : 0x2 Configuration wTotalLength : 0x29 (41 bytes) bNumInterfaces : 0x1 bConfigurationValue : 0x1 iConfiguration : 0x0 bmAttributes : 0xc0 Self Powered bMaxPower : 0xc8 (400 mA) INTERFACE 0: Human Interface Device ==================== bLength : 0x9 (9 bytes) bDescriptorType : 0x4 Interface bInterfaceNumber : 0x0 bAlternateSetting : 0x0 bNumEndpoints : 0x2 bInterfaceClass : 0x3 Human Interface Device bInterfaceSubClass : 0x0 bInterfaceProtocol : 0x0 iInterface : 0x0 ENDPOINT 0x81: Interrupt IN ========================== bLength : 0x7 (7 bytes) bDescriptorType : 0x5 Endpoint bEndpointAddress : 0x81 IN bmAttributes : 0x3 Interrupt wMaxPacketSize : 0x40 (64 bytes) bInterval : 0x1 ENDPOINT 0x2: Interrupt OUT ========================== bLength : 0x7 (7 bytes) bDescriptorType : 0x5 Endpoint bEndpointAddress : 0x2 OUT bmAttributes : 0x3 Interrupt wMaxPacketSize : 0x40 (64 bytes) bInterval : 0x1
- 尝试指定端口后的报错:
运行rfid = RFID(port='/dev/bus/usb/001/009', baud_rate=9600)时,抛出错误:
serial.serialutil.SerialException: Could not configure port: (25, 'Inappropriate ioctl for device')
核心疑问
- 上述udevadm info的输出中是否包含设备可用的USB端口路径?
- 到底应该从何处获取该RFID设备的正确端口路径,以适配pyembedded的RFID初始化?
内容的提问来源于stack exchange,提问作者Razvan
相关产品推荐
相关产品推荐

