我正在使用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上安裝了小牛)。