2014-09-29 81 views
0

我正在使用Blackberry 10 os(Q5 mobile),尝试通过USB(/ dev/aap0)文件进行写入和读取,但无法传输大小为512字节的数据包,但成功传输了16KB (512 * 8 * 4)来自Blackbery(其纯粹的实验性,传输512字节的数据包32次,并在手机端读取一次,因此将数据包大小改为16KB(32 * 512),并且一切正常)但仍然无法弄清楚为什么会发生这种情况,为什么我可以与16KB数据包进行通信,而不是使用512字节数据包进行通信,因此我们将非常感谢此字段中的任何链接。USB黑莓TX和RX缓冲区大小

感谢, SUMIT

回答

1

我发现了一个类似的问题与USB通信工作时,从一台Linux机器到我的Nexus 5,我发现,从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

+0

尝试你可能会运行速度快,因此您的wMaxPacketSize大小512的数据包的每次传输后发送一个零长度数据包(ZLP)将512为了结束数据包大小等于或大于wMaxPacketSize的批量传输,则需要ZLP来结束传输。 – skylinedreamer 2014-11-21 14:08:05