2014-09-29 126 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