You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python Libusb读取电子板数据时遭遇USBTimeoutError超时错误的解决方案咨询

使用Python Libusb读取电子板数据时遭遇USBTimeoutError超时错误的解决方案咨询

我来帮你分析下这个USB超时问题,先梳理下你的场景:你在Windows的VSCode环境下用Python结合Libusb库读取电子板数据,结果遇到了USBTimeoutError,下面是具体的排查方向和解决方案:


可能的原因及排查步骤:

1. 设备权限与驱动问题(Windows下最常见)

Windows对USB设备的访问权限管控比较严格,而且Libusb需要设备使用WinUSB驱动才能正常通信,如果你用的是设备自带的驱动,很可能会导致无法正常读写。

  • 你可以用Zadig工具(Windows下替换USB驱动的常用工具),把你的设备(Vendor ID 0x04d8,Product ID 0xf2a6)的驱动替换成WinUSB。
  • 替换后记得重启VSCode或者重新运行你的脚本,确保驱动生效。

2. 端点配置错误

看你的代码里定义的ENDPOINT_IN = 0和ENDPOINT_OUT = 1,这大概率有问题!USB端点的地址是带方向标识的:

  • 输入端点(IN,设备到主机)的地址通常是0x80 + 端点号,比如端点号为0的话,正确的IN端点地址应该是0x80;
  • 输出端点(OUT,主机到设备)的地址是端点号本身,比如端点号1就是0x01。
    你直接用0和1作为端点地址,会导致找不到正确的读写端点,进而触发超时。
  • 建议先确认设备的实际端点信息:可以用Libusb自带的lsusb工具(或Windows下的USBView工具)查看设备的端点配置,找到正确的IN/OUT端点地址后,修正代码里的ENDPOINT_IN和ENDPOINT_OUT值。

3. 设备初始化不完整

你的openPixelSensor函数只是找到了设备、获取了配置和端点,但缺少关键的初始化操作:

  • 有些USB设备需要先执行设备重置才能正常通信,你可以在找到设备后添加activeDev.reset();
  • 还需要声明设备接口,加上usb.util.claim_interface(activeDev, INTERFACE)(记得用完后用usb.util.release_interface(activeDev, INTERFACE)释放接口,避免设备被占用);
  • 你的代码里定义了INTEGRATION_TIMES和REFERENCE_CURRENTS,但没有发送这些配置指令给设备——设备可能还没进入可输出数据的状态,直接读取自然会超时。你需要先通过OUT端点发送对应的配置命令,比如设置集成时间和参考电流,再去读取数据。

4. 超时时间设置不合理

你的getReadings里超时设为1000ms(1秒),如果设备本身输出数据的间隔更长,或者初始化需要时间,这个超时可能太短。可以先尝试把超时时间调大,比如改成timeout=5000(5秒),看看是否还会超时。

5. 库版本或后端兼容性问题

你手动指定了libusb-1.0.dll的路径,要确保这个dll和你的Python版本(32位/64位)匹配,否则会出现兼容性问题。另外,也可以试试使用PyUSB的默认后端,去掉手动指定dll路径的代码,直接让库自动查找合适的后端:

  • 注释掉backend = usb.backend.libusb1.get_backend(...)这一行,同时修改usb.core.find的调用,去掉backend参数。

修正后的代码示例(包含初始化步骤)

这里给你一个调整后的代码模板,你可以根据设备官方手册的通信协议修改配置指令部分:

import usb.core, usb.util, numpy as np

# Needed variables for the sensor:
VENDOR_ID = 0x04d8
PRODUCT_ID = 0xf2a6
INTERFACE = 0
# 请替换成USBView查到的实际端点地址,示例为0x80(IN)和0x01(OUT)
ENDPOINT_IN = 0x80
ENDPOINT_OUT = 0x01
INTEGRATION_TIMES = {"1ms": 0x00, "2ms": 0x01, "4ms": 0x02, "8ms": 0x03, "16ms": 0x04, "32ms": 0x05,
                "64ms": 0x06, "128ms": 0x07, "256ms": 0x08, "512ms": 0x09, "1024ms": 0x0A}
REFERENCE_CURRENTS = {"20nA": 0x80, "80nA": 0x90,
                "320nA": 0xA0, "1280nA": 0xB0, "5120nA": 0xC0}

def openPixelSensor():
    """
    Prepare USB libraries, locate Coher Sense KISA device, initialize device
    """
    activeDev = usb.core.find(idVendor=VENDOR_ID, idProduct=PRODUCT_ID)

    # If device was found do platform specific configuration
    if activeDev is not None:
        # 重置设备
        activeDev.reset()
        # 声明接口
        usb.util.claim_interface(activeDev, INTERFACE)
        
        # 获取配置和端点
        configuration = activeDev.get_active_configuration()
        interface = configuration[(INTERFACE, 0)]
        endpointIn = interface[ENDPOINT_IN]
        endpointOut = interface[ENDPOINT_OUT]
        
        # 发送初始化配置指令(请根据设备手册修改指令格式)
        # 示例:设置集成时间为16ms,参考电流为320nA
        config_cmd = bytearray([0x01, INTEGRATION_TIMES["16ms"], REFERENCE_CURRENTS["320nA"]])
        activeDev.write(endpointOut.bEndpointAddress, config_cmd, timeout=1000)
        
        return activeDev, endpointIn, endpointOut
    else:
        print("设备未找到,请检查连接和驱动")
        return None

def getReadings(pixelsensor):
    """
    Get the 8 sensor values from Coher Sense KISA device
    """
    try:
        data = pixelsensor[0].read(endpoint=pixelsensor[1].bEndpointAddress,
                                   size_or_buffer=pixelsensor[1].wMaxPacketSize, timeout=5000
                                   )
        values = []
        for i in range(0, 8):
            values.append(int.from_bytes(
                data[(4+2*i):(6+2*i)], byteorder='little'))
        print(values)
        return values
    except usb.core.USBTimeoutError:
        print("读取超时,请检查端点配置、设备状态或驱动")
        return None
    finally:
        # 释放接口,避免设备被占用
        usb.util.release_interface(pixelsensor[0], INTERFACE)

result = openPixelSensor()
if result:
    getReadings(result)

额外提示

  • 一定要仔细查看你的电子板(Coher Sense KISA)的官方手册,确认设备的通信协议:比如需要发送什么初始化指令、端点地址、数据包格式等,这些信息是解决问题的核心;
  • 如果替换驱动后还是有问题,可以尝试以管理员身份运行VSCode,确保拥有足够的设备访问权限。

备注:内容来源于stack exchange,提问作者user30043662

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.13 19:35:30