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

树莓派读取自定义USB HID设备时出现重复报告的排查求助

树莓派读取自定义USB HID设备时出现重复报告的问题

设备与环境概述

  • 树莓派运行Raspberry Pi OS(内核版本5.15.32),同时在自定义Linux(内核5.15.61)和Ubuntu 20.04 LTS桌面系统中测试,结果一致
  • 目标自定义USB HID设备支持两种工作模式:
    • 标准HID模式:发送标准HID报告
    • 自定义模式:发送约1KB的自定义报告,需发送特定功能报告启用
  • Windows系统下,使用python hidapi发送功能报告启用自定义模式后,可通过hid.device.read()以全速(约4250报告/秒)读取所有自定义报告,且报告含report_number字段可确保无遗漏

问题现象

树莓派上使用相同Python代码(采用libusb后端的python hidapi包,hidraw后端速度过慢)时出现异常:

  • 初始阶段报告顺序正常(启动时丢失部分报告属预期情况)
  • 数秒后开始出现连续块的重复报告,以report_number为例,序列如下:
    1,2,...,578,  238,239,...,816,  476,477,...,1054, and so on
    
    即每次获取约578条连续报告,但起始点为之前已接收过的历史报告(示例中回溯了340条)
  • 尝试过libusb Python绑定、C语言hidapi库,均出现相同的report_number重复模式

排查过程

  • 使用wireshark/tshark、usbmon监听USB通信:
    1. 打开设备并发送功能报告启用自定义模式
    2. 记录USB通信发现:使用cython-hidapi打开设备后,设备驱动从usbhid切换为usbfs,无需显式读取设备就会出现重复报告
    3. 启用usbmon进一步调试时,日志消息导致系统速度变慢、报告丢失,但不再出现回溯重复情况
  • 当前使用的驱动信息:
    pi@raspberrypi:~ $ lsusb -t
    /:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/1p, 480M
        |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/4p, 480M
            |__ Port 1: Dev 5, If 0, Class=Hub, Driver=hub/2p, 480M
                |__ Port 1: Dev 6, If 0, Class=Human Interface Device, Driver=usbhid, 480M
    
    pi@raspberrypi:~ $ lspci -k
    00:00.0 PCI bridge: Broadcom Inc. and subsidiaries BCM2711 PCIe Bridge (rev 20)
            Kernel driver in use: pcieport
    01:00.0 USB controller: VIA Technologies, Inc. VL805 USB 3.0 Host Controller (rev 01)
            Subsystem: VIA Technologies, Inc. VL805 USB 3.0 Host Controller
            Kernel driver in use: xhci_hcd
    
  • 怀疑问题源于设备驱动,模式类似环形缓冲区中入队和出队指针的“竞争”

请求帮助

恳请提供排查建议、调试方向或同类问题参考

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 17:31:04