usb.core.USBError: [Errno 75] Overflow
usb.core.USBError: [Errno 75] Overflow
我对 USB 还很陌生。我需要与激光控制器通信,为此我想使用 Python。我现在在 Ubuntu 20.04 机器上工作。我有这个代码:
import usb.core
import usb.util
device = usb.core.find(idVendor=0xC251, idProduct=0x2201)
if device is None:
raise RuntimeError('Device not found')
interface = device[0].interfaces()[0]
if device.is_kernel_driver_active(interface.bInterfaceNumber):
device.detach_kernel_driver(interface.bInterfaceNumber)
endpoint = device[0].interfaces()[0].endpoints()[0]
endpoint.write(b'\x00\x90\x04')
但我在尝试写作时总是得到 usb.core.USBError: [Errno 75] Overflow
。但是,我可以使用 endpoint.read(64)
从设备读取数据,这似乎工作正常。我找不到有关此溢出错误的信息。
如果有任何帮助,这就是 print(device)
显示的内容:
DEVICE ID c251:2201 on Bus 002 Address 010 =================
bLength : 0x12 (18 bytes)
bDescriptorType : 0x1 Device
bcdUSB : 0x200 USB 2.0
bDeviceClass : 0x0 Specified at interface
bDeviceSubClass : 0x0
bDeviceProtocol : 0x0
bMaxPacketSize0 : 0x40 (64 bytes)
idVendor : 0xc251
idProduct : 0x2201
bcdDevice : 0x100 Device 1.0
iManufacturer : 0x1 LASER Driver
iProduct : 0x2 LASER Driver IJS
iSerialNumber : 0x3 0001A0000000
bNumConfigurations : 0x1
CONFIGURATION 1: 100 mA ==================================
bLength : 0x9 (9 bytes)
bDescriptorType : 0x2 Configuration
wTotalLength : 0x22 (34 bytes)
bNumInterfaces : 0x1
bConfigurationValue : 0x1
iConfiguration : 0x0
bmAttributes : 0xc0 Self Powered
bMaxPower : 0x32 (100 mA)
INTERFACE 0: Human Interface Device ====================
bLength : 0x9 (9 bytes)
bDescriptorType : 0x4 Interface
bInterfaceNumber : 0x0
bAlternateSetting : 0x0
bNumEndpoints : 0x1
bInterfaceClass : 0x3 Human Interface Device
bInterfaceSubClass : 0x0
bInterfaceProtocol : 0x0
iInterface : 0x4 HID
ENDPOINT 0x81: Interrupt IN ==========================
bLength : 0x7 (7 bytes)
bDescriptorType : 0x5 Endpoint
bEndpointAddress : 0x81 IN
bmAttributes : 0x3 Interrupt
wMaxPacketSize : 0x40 (64 bytes)
bInterval : 0x1
我有完全相同的问题,但使用其他 USB 设备,而不是激光控制器。
对我的情况有帮助的是 准确地 向端点写入 64 字节长的数据包,并附加适当数量的零。
我的意思是——在你的代码中,而不是发送三个字节:
endpoint.write(b'\x00\x90\x04')
尝试发送 64 字节长的数据包:
cmd = b'\x00\x90\x04'
packet_to_send = cmd + b'\x00' * (64 - len(cmd))
endpoint.write(packet_to_send)
我对 USB 还很陌生。我需要与激光控制器通信,为此我想使用 Python。我现在在 Ubuntu 20.04 机器上工作。我有这个代码:
import usb.core
import usb.util
device = usb.core.find(idVendor=0xC251, idProduct=0x2201)
if device is None:
raise RuntimeError('Device not found')
interface = device[0].interfaces()[0]
if device.is_kernel_driver_active(interface.bInterfaceNumber):
device.detach_kernel_driver(interface.bInterfaceNumber)
endpoint = device[0].interfaces()[0].endpoints()[0]
endpoint.write(b'\x00\x90\x04')
但我在尝试写作时总是得到 usb.core.USBError: [Errno 75] Overflow
。但是,我可以使用 endpoint.read(64)
从设备读取数据,这似乎工作正常。我找不到有关此溢出错误的信息。
如果有任何帮助,这就是 print(device)
显示的内容:
DEVICE ID c251:2201 on Bus 002 Address 010 =================
bLength : 0x12 (18 bytes)
bDescriptorType : 0x1 Device
bcdUSB : 0x200 USB 2.0
bDeviceClass : 0x0 Specified at interface
bDeviceSubClass : 0x0
bDeviceProtocol : 0x0
bMaxPacketSize0 : 0x40 (64 bytes)
idVendor : 0xc251
idProduct : 0x2201
bcdDevice : 0x100 Device 1.0
iManufacturer : 0x1 LASER Driver
iProduct : 0x2 LASER Driver IJS
iSerialNumber : 0x3 0001A0000000
bNumConfigurations : 0x1
CONFIGURATION 1: 100 mA ==================================
bLength : 0x9 (9 bytes)
bDescriptorType : 0x2 Configuration
wTotalLength : 0x22 (34 bytes)
bNumInterfaces : 0x1
bConfigurationValue : 0x1
iConfiguration : 0x0
bmAttributes : 0xc0 Self Powered
bMaxPower : 0x32 (100 mA)
INTERFACE 0: Human Interface Device ====================
bLength : 0x9 (9 bytes)
bDescriptorType : 0x4 Interface
bInterfaceNumber : 0x0
bAlternateSetting : 0x0
bNumEndpoints : 0x1
bInterfaceClass : 0x3 Human Interface Device
bInterfaceSubClass : 0x0
bInterfaceProtocol : 0x0
iInterface : 0x4 HID
ENDPOINT 0x81: Interrupt IN ==========================
bLength : 0x7 (7 bytes)
bDescriptorType : 0x5 Endpoint
bEndpointAddress : 0x81 IN
bmAttributes : 0x3 Interrupt
wMaxPacketSize : 0x40 (64 bytes)
bInterval : 0x1
我有完全相同的问题,但使用其他 USB 设备,而不是激光控制器。 对我的情况有帮助的是 准确地 向端点写入 64 字节长的数据包,并附加适当数量的零。
我的意思是——在你的代码中,而不是发送三个字节:
endpoint.write(b'\x00\x90\x04')
尝试发送 64 字节长的数据包:
cmd = b'\x00\x90\x04'
packet_to_send = cmd + b'\x00' * (64 - len(cmd))
endpoint.write(packet_to_send)