在隨機的Win 10/11電腦上使用DFU設備時,連續的winusb控制傳輸失敗(TransferBufferLength=0)

Ping Wang 60 信譽點數
2026-04-13T02:32:44.7233333+00:00

我們依賴 winusb 透過控制傳輸來處理與我們專有的 DFU 設備的通訊。每當我執​​行單一獨立的指令,例如 DFU_CLRSTATUS 或 DFU_GETSTATUS 時,硬體反應完美無瑕。但一旦我嘗試連續執行多個指令,惡夢就開始了。如果我嘗試清除狀態然後立即取得狀態,交易就會完全失敗,後續呼叫只會回傳 TransferBufferLength=0。更令人抓狂的是,無論安裝的是 Win 10 還是 Win 11,這個故障只會在大樓裡少數幾台隨機的工作站上出現。請幫幫我!

Windows for business | Windows Server | 裝置和部署 | 設定應用程式群組
0 則留言 沒有留言

由問題作者接受的回答
熱情熄 心冷 5,575 信譽點數
2026-04-13T11:36:21.5166667+00:00

在業界你這樣的描述,一般會優先建議你檢查接地。

通訊最大的問題來自於干擾。

此回答有幫助嗎?

0 則留言 沒有留言

由問題作者接受的回答
Jason Nguyen Tran 29,785 信譽點數 獨立顧問
2026-04-13T03:46:19.6366667+00:00

根据您的描述,单个 DFU 命令(如 DFU_CLRSTATUS 或 DFU_GETSTATUS)可以正常工作,但将它们连续执行时会导致传输失败,随后调用返回 TransferBufferLength=0。由于该问题只出现在少数随机的 Windows 10/11 工作站上,这表明问题不仅仅在于您的代码,还可能与驱动程序堆栈或 USB 控制器的行为差异有关。

一个常见原因是时序问题:WinUSB 在处理连续的控制传输时并不总是稳定,尤其是在设备固件期望命令之间存在短暂延迟的情况下。在发送下一个命令之前增加短暂等待,或检查前一个命令的完成状态,通常可以让流程更加稳定。另一个因素是驱动或芯片组差异,一些 USB 主控制器对时序要求更严格,这也解释了为什么只有部分电脑会出现该问题。

同时,建议确认所有受影响的机器都已安装最新的 Windows 更新以及 WinUSB.sys 版本,因为旧版本在控制传输方面存在已知问题。使用更大的缓冲区运行 DFU 流程,或者在传输失败后显式重置管道(pipe),也有助于从 TransferBufferLength=0 的状态中恢复。如果问题仍然存在,您可以使用 USBPcap 等工具记录 USB 跟踪日志,以确认问题发生在主机端还是设备端。

希望以上回复能为您提供一些有用的思路。如果这些信息解决了您的问题,请考虑将其标记为“接受答案”,以便其他遇到相同问题的用户更容易找到解决方案。如果您需要进一步的帮助,欢迎随时留言。

Jason

此回答有幫助嗎?

0 則留言 沒有留言

0 個其他答案

排序依據: 最實用

您的回答

答案可由問題作者標示為「已接受」,而由仲裁者標示為「推薦」,這可協助使用者知道答案解決了作者的問題。