使用PyUSB读取485B39设备电压信号时遇NotImplementedError求助
解决Windows 10下PyUSB调用
usb.util.claim_interface触发NotImplementedError的问题 针对设备ID29da:000a(DIGITAL ICP USB SIGNAL CONDITIONER Model 485B39)在Windows10+libusbK驱动环境下,调用usb.util.claim_interface抛出NotImplementedError的问题,提供以下排查和解决步骤:
一、确认驱动与PyUSB版本兼容性
- 升级PyUSB到最新稳定版:
pip install --upgrade pyusb
- 确保安装libusbK 3.0及以上版本,旧版libusbK与PyUSB高层API适配存在问题,可通过Zadig工具查看当前驱动版本。
二、调整代码逻辑,优先使用设备原生接口声明方法
Windows平台下,PyUSB的usb.util.claim_interface高层API可能存在兼容性问题,建议直接调用设备对象的claim_interface方法,同时先完成设备配置:
修改后的示例代码:
import usb.core import usb.util # 查找目标设备 dev = usb.core.find(idVendor=0x29da, idProduct=0x000a) if dev is None: raise ValueError("设备未找到,请检查连接和驱动") # 先设置设备配置(部分设备必须执行此步骤) try: dev.set_configuration() except usb.core.USBError as e: print(f"设置配置失败: {e}") # 先运行下方注释代码,确认实际接口编号后替换INTERFACE_NUM # for cfg in dev: # for intf in cfg: # print(f"接口编号: {intf.bInterfaceNumber}") INTERFACE_NUM = 0 # 替换为你实际查到的接口编号 # 尝试分离内核驱动 try: if dev.is_kernel_driver_active(INTERFACE_NUM): dev.detach_kernel_driver(INTERFACE_NUM) except usb.core.USBError as e: print(f"分离驱动失败: {e}") # 直接调用设备的claim_interface方法 try: dev.claim_interface(INTERFACE_NUM) print("接口声明成功") except NotImplementedError as e: print(f"接口声明失败: {e}") # 备选方案:调用libusb低级API try: from usb.backend.libusb1 import lib lib.libusb_claim_interface(dev.handle, INTERFACE_NUM) print("通过libusb低级API声明接口成功") except Exception as e: print(f"低级API调用失败: {e}")
三、排查设备权限与驱动配置
- 右键以管理员身份运行Python脚本,Windows下USB设备操作可能需要管理员权限。
- 重新用Zadig安装libusbK驱动时,勾选「Allow non-administrator access」选项,确保普通用户也能访问设备。
四、确认设备接口正确性
运行以下代码枚举设备所有接口和端点,确保使用的接口编号正确:
import usb.core dev = usb.core.find(idVendor=0x29da, idProduct=0x000a) for cfg in dev: print(f"配置编号: {cfg.bConfigurationValue}") for intf in cfg: print(f" 接口编号: {intf.bInterfaceNumber}, 设备类: {intf.bInterfaceClass}") for ep in intf: print(f" 端点地址: {hex(ep.bEndpointAddress)}, 方向: {'输入' if ep.bEndpointAddress & 0x80 else '输出'}")
若设备存在多个接口,尝试切换其他接口编号进行声明。
内容的提问来源于stack exchange,提问作者cazz
相关产品推荐
相关产品推荐

