![](/img/trans.png)
[英]fread/ftell apparently broken under Windows, works fine under Linux
[英]usb bulk transfer timeout under Linux while it works under Windows
[編輯:我找到了原因,見下文]
問題:
我使用 Python(PyUSB 和 libusb-win32)為 Windows 中的設備創建了一個“驅動程序”。 雖然該軟件在 Windows 下的多台 PC 上無縫運行,但使用我的 Linux (Kubuntu 18.10) 測試筆記本電腦,在第二次 512 字節批量傳輸之后,每次長度為 512 字節的批量寫入序列超時。
有趣:我也嘗試過使用 VirtualBox。 事實證明,在同一台 Linux 主機上通過 VirtualBox 使用 Windows 來賓,仍然出現相同的錯誤。 所以這不是因為
問題:
在 Linux 下會發生什么在 Windows 下不會發生導致超時 [Errno 110]?
更多信息,以防萬一:
for chunk in chunks: # chunks: array of bytearrays with 512 bytes each
self.write(0x01,chunk)
time.sleep(0.003)
[編輯]我發現這僅發生在我使用 xhci 的測試筆記本電腦上,而不是使用 ehci 的第二台 Linux 測試機器上的原因。 所以這可能是由 xhci 引起的。 我還沒有解決方法,但這至少給出了一個解釋。
事實證明,設備每個數據包請求的字節數較少,可以在dmesg
找到所需的字節數(64),正如問題中已經寫的那樣。 由於 xhci 不正式支持,Linux 決定忽略該請求。 Windows 似乎采用了它,並按照請求的數據包大小拆分了較大的數據包。 因此,解決方案是在傳輸之前手動將數據拆分為 64 字節大小的數據包。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.