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

Linux下USB Bulk传输超时[Errno 110]问题排查(Windows正常)

USB批量传输超时问题排查记录

问题描述

我在Windows上用Python结合PyUSB和libusb-win32开发了一款设备驱动,在多台Windows PC上运行都没问题,但换到我的Kubuntu 18.10测试笔记本时,遇到了奇怪的超时问题:每次发送512字节的批量写入序列,第二次传输后就会触发[Errno 110] 超时错误。更有意思的是,同一Linux主机上的Windows虚拟机也出现了完全相同的错误。

关键现象与补充信息

  • 时间间隔对比:Windows下Wireshark显示两次批量写入的时间差第一次是6ms,后续每次5ms;Linux下代码里设的是3ms的sleep,哪怕把睡眠时间翻倍也没用。
  • 内核日志提示:dmesg里有报错bulk endpoint ## has invalid maxpacket 64(涉及端点0x01、0x08、0x81),但设备本身只有一种配置。
  • 接口差异:测试笔记本只有USB 3.0接口,Windows PC同时有USB 3.0和2.0接口,所有接口都试过,问题只在Linux笔记本上出现。
  • 抓包差异:Wireshark显示Linux下设备每次批量写入后会返回空批量包,Windows下没捕获到这个现象,怀疑是USBPcap无法抓取Windows的握手包,但不确定这个空包是否属于URB_BULK out的响应。
  • 后端尝试:试过libusb0、libusb1、OpenUSB这几个后端,都没能解决超时问题。
  • 场景特殊性:传输FPGA固件时才会出问题,在执行多块512字节传输前,通过相同端点进行少量字节通信是完全正常的。
  • 问题代码片段:超时出现在以下循环的第二次迭代:
for chunk in chunks: # chunks: array of bytearrays with 512 bytes each
    self.write(0x01,chunk)
    time.sleep(0.003)

已查明的根因

经过进一步测试排查,发现问题只出现在使用xhci控制器的测试笔记本上,换成使用ehci控制器的Linux测试机后,完全没有超时问题。目前可以确定是xhci控制器的兼容性问题导致的这个批量传输超时,但还没找到具体的解决办法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:20:35