Macos iObsDevice的DeviceRequest在OS X上返回0xe000404f

Macos iObsDevice的DeviceRequest在OS X上返回0xe000404f,macos,usb,device,iokit,dfu,Macos,Usb,Device,Iokit,Dfu,我正在开发USB设备的驱动程序和应用程序,以便通过DFU更新固件。我的USB设备工作正常。之后,我尝试更新设备的固件,下载固件时拔下usb电缆。按预期下载失败。之后,我插入usb设备,它在DFU模式下使用产品0xffff,因为固件已损坏。我尝试再次启动更新,每次调用IOUSBDevice::DeviceRequest都会返回0xe000404f错误(kIOUSBPipeStalled-管道已暂停,需要清除错误) 我已经用USB探测器检查过,DFU模式下的设备没有任何端点。我不确定它是如何工作的,

我正在开发USB设备的驱动程序和应用程序,以便通过DFU更新固件。我的USB设备工作正常。之后,我尝试更新设备的固件,下载固件时拔下usb电缆。按预期下载失败。之后,我插入usb设备,它在DFU模式下使用产品0xffff,因为固件已损坏。我尝试再次启动更新,每次调用IOUSBDevice::DeviceRequest都会返回0xe000404f错误(kIOUSBPipeStalled-管道已暂停,需要清除错误)

我已经用USB探测器检查过,DFU模式下的设备没有任何端点。我不确定它是如何工作的,但它看起来像是在调用DeviceRequest时使用了管道零。所以,也许我应该调用诸如ClearPipeStall of PipeZero之类的东西,以便在DFU模式下使用固件损坏的设备?我怎么做?如果我的假设是错误的,我如何解决这个问题?在将设备插入DFU模式后,我不执行任何I/O操作,我只获取pid/vid,并像往常一样找到IonbDevice对象和IonbInterface(DFU接口)对象


在El Capitan上,我使用IOUSBHostInterface::deviceRequest(),它还返回一个错误(但错误代码不同,我丢失了代码,现在无法获取,因为我在Mac上安装了Mavericks).

kIOUSBPipeStalled错误的一个可能原因是DFU引导加载程序处于奇怪的状态,它无法在端点0上完成任何控制传输,或者正在使用暂停数据包对其进行响应。暂停数据包通常意味着设备不支持传输

您可以尝试使用硬件USB协议分析器(如)查看总线上实际发生的情况

我不认为打电话给ClearPipeStall会有助于解决这个问题,但我不确定