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

FEIG CPR30+ NFC读卡器PyUSB调用NotImplementedError问题求助

问题原因及解决办法

核心原因分析

  1. 驱动绑定不兼容:你安装的FEIG官方专用驱动是针对厂商Demo开发的,并非libusb兼容的WinUSB/libusb-win32驱动。PyUSB基于libusb后端时,必须让设备绑定到WinUSB驱动才能正常访问端点、执行USB操作,否则libusb无法获取设备操作权限,触发NotImplementedError。
  2. PyUSB使用方式错误:直接调用设备对象(dev)的write()/read()是旧版用法,当前标准流程是先配置设备、获取对应接口和端点,再通过端点执行读写操作。
  3. Windows权限限制:普通用户权限下,可能无法直接操作USB设备底层接口,导致方法调用失败。

解决步骤

1. 替换驱动为WinUSB

用Zadig工具将FEIG CPR30+的驱动替换为WinUSB:

  • 下载Zadig工具,运行后点击Options -> List All Devices。
  • 在列表中找到FEIG CPR30+设备(名称可能含"FEIG"或"CPR30+")。
  • 右侧驱动选择框选WinUSB,点击Replace Driver完成替换(替换后官方Demo可能无法使用,需恢复时可在设备管理器换回原驱动)。

2. 修正PyUSB代码逻辑

不要直接操作设备对象,按标准USB操作流程编写代码:

import usb.core
import usb.util

# 替换为你的设备实际ID
VENDOR_ID = 0x0FE6
PRODUCT_ID = 0x811E

# 查找设备
dev = usb.core.find(idVendor=VENDOR_ID, idProduct=PRODUCT_ID)
if not dev:
    print("设备未找到")
    exit()

# 卸载内核驱动(如果设备绑定了厂商驱动)
if dev.is_kernel_driver_active(0):
    try:
        dev.detach_kernel_driver(0)
    except usb.core.USBError as e:
        print(f"卸载内核驱动失败: {str(e)}")

# 设置设备配置
try:
    dev.set_configuration()
except usb.core.USBError as e:
    print(f"设置配置失败: {str(e)}")

# 获取激活的配置和目标接口
cfg = dev.get_active_configuration()
# 替换为设备实际的接口编号(可通过打印cfg查看)
interface = cfg[(0, 0)]

# 查找读写端点
ep_out = usb.util.find_descriptor(
    interface,
    custom_match=lambda e: usb.util.endpoint_direction(e.bEndpointAddress) == usb.util.ENDPOINT_OUT
)
ep_in = usb.util.find_descriptor(
    interface,
    custom_match=lambda e: usb.util.endpoint_direction(e.bEndpointAddress) == usb.util.ENDPOINT_IN
)

if not ep_out or not ep_in:
    print("未找到有效读写端点")
    exit()

# 测试通信(需替换为FEIG读卡器的实际命令格式,参考官方协议)
try:
    test_cmd = b'\x02\x00\x00\x00\x00\x05\xFF\x00\x00\x00\x00'
    ep_out.write(test_cmd)
    # 读取响应,长度根据设备协议调整
    resp = ep_in.read(64)
    print(f"收到响应: {resp}")
except usb.core.USBError as e:
    print(f"通信出错: {str(e)}")

# 释放设备资源
usb.util.dispose_resources(dev)

3. 提升运行权限

右键点击Python脚本或终端,选择以管理员身份运行,规避Windows权限限制导致的操作失败。

4. 尝试官方SDK(最优方案)

FEIG提供了针对其NFC读卡器的专用SDK(如libFeigNFC),相比PyUSB直接操作USB,官方SDK已封装好所有通信协议和设备操作逻辑,能彻底避免底层USB操作的兼容性问题。可联系FEIG技术支持获取对应Python绑定或C SDK的封装示例。

额外提示

  • 查看设备详细信息:运行print(dev.get_active_configuration())可输出设备的配置、接口、端点信息,帮助确认接口和端点编号是否正确。
  • 恢复原驱动:若需使用官方Demo,可在设备管理器找到FEIG设备,右键选择更新驱动程序 -> 浏览我的电脑以查找驱动程序,选择官方驱动文件即可。

内容的提问来源于stack exchange,提问作者ArtyLee

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 00:43:17