我正在使用Blackberry 10 os(Q5 mobile),尝试通过USB(/ dev / aap0)文件进行写入和读取,我无法传输大小为512字节的数据包但成功传输了16KB(512 * 8 * 4)从Blackbery到Blackbery(它纯粹是实验性的,转移512字节数据包32次,在手机端读取一次,因此将数据包大小更改为16KB(32 * 512)并且一切正常),但仍然无法弄清楚为什么会发生这种情况,为什么我可以与16KB数据包进行通信而不是512字节数据包,这个领域的任何链接都将受到高度赞赏。
感谢, SUMIT
答案 0 :(得分:1)
我在使用从Linux机器到Nexus 5的USB通信时遇到了类似的问题。我发现从Linux机器到Nexus的批量传输只有在我使用16KB的缓冲区才能读取Java方面。然后我发现了这个:
当你要求libusb提交大于16kb的批量转移时,libusb将其分解为许多较小的转移。这是因为usbfs内核接口只接受最大16kb的传输。子传输一次全部提交,以便内核可以在硬件级别排队,从而最大化总线吞吐量。
在传统平台上,这会在传输提前完成时导致问题。在此事件中,内核将终止该子转移中的所有其他数据包(但不会终止任何后续数据包)。 libusb会注意到这个事件并立即取消任何已排队的子传输,但libusb通常不够快,并且在libusb取消它们之前已经开始了以下子传输。
据说,最近的Linux内核和libusb版本修复了这个问题。
链接(libusb警告):http://www.cs.unm.edu/~hjelmn/libusb_hotplug_api/caveats.html