USB 枚举 - Windows - 异常端口重置

USB 枚举 - Windows - 异常端口重置

我正在通过运行长期测试来测试自定义 USB 数据记录器硬件。由于 USB 通信问题,我的测试在 15 个小时后一直失败,所以我决定进行调查。我运行 Wireshark 来记录所有 USB 流量,看看是否能发现什么。流量速率仅为每秒 2 或 3 个数据包,因此效果很好。

在我的设置中,我将 3 个类似的设备连接到同一个 USB 总线,没有其他设备。我的基本设置没有连接任何测试设备,如下所示

USB树

我的所有测试设备都连接到第一个空闲的集线器,这样就不会捕获其他流量。我注意到在枚举期间,会向集线器发出中断传输。然后,集线器会用两个字节的数据进行响应。它们出现在帧 42、55、65、83、93、103、121、129、135、145 和 155 中。所有这些都是对请求的响应。有人能告诉我如何解释这些字节吗?

第 26 帧中发出的请求如下所示 No. Time Source Destination Protocol Length Info 26 18.934026 host 2.1.1 USB 27 URB_INTERRUPT in

Frame 26: 27 bytes on wire (216 bits), 27 bytes captured (216 bits) on interface \.\USBPcap2, id 0 USB URB [Source: host] [Destination: 2.1.1] USBPcap pseudoheader length: 27 IRP ID: 0xfffffa8004886010 IRP USBD_STATUS: USBD_STATUS_CANCELED (0xc0010000) URB Function: URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER (0x0009) IRP information: 0x00, Direction: FDO -> PDO 0000 000. = Reserved: 0x00 .... ...0 = Direction: FDO -> PDO (0x0) URB bus id: 2 Device address: 1 Endpoint: 0x81, Direction: IN URB transfer type: URB_INTERRUPT (0x01) Packet Data Length: 0 [Response in: 42] [bInterfaceClass: Hub (0x09)]

第 42 帧中的相应响应如下所示 No. Time Source Destination Protocol Length Info 42 18.934026 2.1.1 host USB 29 URB_INTERRUPT in

Frame 42: 29 bytes on wire (232 bits), 29 bytes captured (232 bits) on interface \.\USBPcap2, id 0 USB URB [Source: 2.1.1] [Destination: host] USBPcap pseudoheader length: 27 IRP ID: 0xfffffa8004886010 IRP USBD_STATUS: USBD_STATUS_SUCCESS (0x00000000) URB Function: URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER (0x0009) IRP information: 0x01, Direction: PDO -> FDO 0000 000. = Reserved: 0x00 .... ...1 = Direction: PDO -> FDO (0x1) URB bus id: 2 Device address: 1 Endpoint: 0x81, Direction: IN URB transfer type: URB_INTERRUPT (0x01) Packet Data Length: 2 [Request in: 26] [Time from request: 0.000000000 seconds] [bInterfaceClass: Hub (0x09)] Leftover Capture Data: 0400

更大的问题是,在帧 160 中发出了一个请求。直到帧 369069 才得到答复,该帧在测试开始后约 15 小时到达。这些响应帧导致 USB 端口重置,从而导致我的 USB 通信中断。

当我扩展我的 PC 软件来检查此类重置时,我想知道是什么原因导致了如此长的延迟,以及我是否应该等待集线器响应之后再开始任何其他活动?

相关内容