在Linux上通过HIDAPI读取USB设备有时会导致数据丢失
我目前正在将使用USB设备的代码从Windows移植到Linux 我已经彻底测试了原始应用程序,我非常确定该设备运行良好。我在Linux上使用hidapi libusb实现了USB接口,有时设备返回的数据至少缺少一个字节 一旦发生这种情况,所有返回的值都会丢失那么多数据。为了使USB设备正确读取数据,我或多或少必须断开并重新连接USB设备。我开始认为,可能第一个字节有时返回为00,Linux会忽略它。它通常在连续读取时发生 例如: 我发送get寄存器状态,我希望有10个数据可用于USB读取。字节5是数据的编号 预期: 00 00 01 02 00 08 42(数据8) 00 00 01 02 00 09 42(数据9) 实际: 00 00 01 02 00 08 42(数据8) 00 02 00 09 42 ab(数据9) 数据9的数据包编号错误,因为它缺少一个字节。我试着改用hidapi-hidraw,但它的发生率明显降低。我已经检查了设备的hidraw(/dev/hidraw0)的hextump,它与我在应用程序中获得的数据一致。我尝试过使用内存泄漏检测工具,但没有检测到泄漏/损坏 这是Linux的问题(3.2.0-4-amd64)还是可能是设备的问题 我的应用程序的伪代码只是:在Linux上通过HIDAPI读取USB设备有时会导致数据丢失,linux,usb,libusb,hidapi,Linux,Usb,Libusb,Hidapi,我目前正在将使用USB设备的代码从Windows移植到Linux 我已经彻底测试了原始应用程序,我非常确定该设备运行良好。我在Linux上使用hidapi libusb实现了USB接口,有时设备返回的数据至少缺少一个字节 一旦发生这种情况,所有返回的值都会丢失那么多数据。为了使USB设备正确读取数据,我或多或少必须断开并重新连接USB设备。我开始认为,可能第一个字节有时返回为00,Linux会忽略它。它通常在连续读取时发生 例如: 我发送get寄存器状态,我希望有10个数据可用于USB读取。字节
我看到了一个非常类似的问题,导致通过USB音频设备传输的音频信号损坏。一些尝试的建议:1。查找设备上的USB芯片类型-谷歌查找已知问题。2.在读写设备之间增加一个小的延迟(比如20ms)。3.尝试另一台主机(PC)-它可能是由芯片或驱动程序(ehci.xhci,…)引起的。我面临同样的问题。你找到修复程序了吗?哦,我找到了修复程序,它是由操作系统引起的。我使用的是一个虚拟操作系统,它导致数据包丢失。