2015-12-15 32 views
0

我正在使用USB設備的驅動程序和應用程序通過DFU更新固件。我的USB設備工作正常。之後,我嘗試更新設備的固件,並在下載固件時拔下USB電纜。按預期下載失敗。之後,我插入USB設備,它處於產品0xffff的DFU模式,因爲固件已損壞。我嘗試再次開始更新,IOUSBDevice :: DeviceRequest的每個調用都會返回0xe000404f錯誤(kIOUSBPipeStalled - 管道已停止,錯誤需要清除)。IOUSBDevice的DeviceRequest在OS X上返回0xe000404f

我用USB Prober進行了檢查,並且在DFU模式下的設備沒有任何端點。我不確定它是如何工作的,但它看起來像調用DeviceRequest時使用管道零點。因此,也許我應該調用管道零的ClearPipeStall來處理固件已損壞的DFU模式下的設備?我該怎麼做?如果我的假設錯了,我該如何解決這個問題?在DFU模式下插入設備後,我不執行任何I/O操作,我只是得到pid/vid並照常查找IOUSBDevice對象和IOUSBInterface(DFU接口)對象。

在El Capitan上,我使用了IOUSBHostInterface :: deviceRequest(),它也返回一個錯誤(但錯誤代碼不同,我丟失了代碼,因爲我在我的Mac上安裝了小牛)。

回答

0

kIOUSBPipeStalled錯誤的一個可能原因是您的DFU引導加載程序處於奇怪狀態,它無法在端點0上完成任何控制傳輸,或者它正在使用STALL包進行響應。 STALL數據包通常意味着傳輸不被設備支持。

您可以嘗試使用硬件USB協議分析器(例如Beagle 12)來查看總線上實際發生的情況。

我不認爲調用ClearPipeStall將有助於解決此問題,但我不確定。