2014-04-22 88 views
0

我在Windows主機端使用WinUSB與我的WINUSB USB設備進行通信。 我的USB設備是全速設備。 我能夠獲得設備句柄並執行OUT和IN數據傳輸。WinUSB批量輸入傳輸在傳輸大小大於最大數據包大小時失敗

我正面臨FS WinUSB設備上Bulk IN傳輸的問題。當我做一個從PC到設備的數據循環返回到PC時,從1到64的大小工作正常。當我傳輸65個字節時,前64個字節可以在PC中讀回。但最後一個字節丟失。

任何人都可以面對同樣的問題或可以提出一些解決方案嗎?

問候, Nisheedh

+0

你知道你的設備是否真的將65個字節發送回計算機?你有USB邏輯分析儀或示波器嗎? –

回答

0

首先,你應該讀出MAXIMUM_TRANSFER_SIZE。對於發送,WinUSB 「如果需要將緩衝區劃分爲適當大小的塊」source)。

同時檢查的WinUsb_ReadPipe的備註:

如果由設備返回的數據比一個最大傳送 長度越大,了WinUSB劃分請求轉換成最大 傳送長度的較小的請求並提交他們連續地。如果傳輸長度爲 而不是端點最大數據包大小的倍數(可通過WINUSB_PIPE_INFORMATION結構的MaximumPacketSize成員獲取 ),則WinUSB會將傳輸大小增加到MaximumPacketSize的下一個 倍數。

USB數據包大小不會影響讀取請求的傳輸。 如果設備響應的數據包對於客戶端 緩衝區來說太大,則讀取請求的行爲對應於管道上設置的 策略的類型。 如果管道的策略類型爲 ALLOW_PARTIAL_READS,則WinUSB會將剩餘數據添加到下一次傳輸的開始 。如果ALLOW_PARTIAL_READS未設置,則讀取 請求失敗。有關策略類型的更多信息,請參閱WinUSB 管道策略修改的功能。

檢查您的設置以及是否使用第二次傳輸發送最後一個字節。 您還應該測試實際寫入/讀取的字節數。