为什么如果我笨拙地连接它,Windows 会显示“此设备可以运行得更快”的通知?

为什么如果我笨拙地连接它,Windows 会显示“此设备可以运行得更快”的通知?

我注意到,在 Windows XP 和 7 上(分别在两台不同的计算机上),如果我以非常慢的速度连接电缆(或者用一只手连接有点费劲),我就能设法让“如果将此设备连接到高速 USB 2.0 端口,其性能会更快”的通知弹出。如果我用双手快速或正常地连接,则不会出现通知。无论哪种情况,所有这些设备似乎都能正常运行。

我认为发生的情况是,在连接缓慢/笨拙时,电线之间的接触中断了足够长的时间,以至于 USB 控制器认为它不是 2.0,而是速度较慢。但它为什么会这样认为?或者为什么不直接说“您连接电缆的技术不好,请拔下插头再试一次”?

答案1

该消息指的是协商旧的全速 (FS) 数据速率 12 Mbit/s,而不是高速 (HS) 数据速率 480 Mbit/s。从 USB2 端口获得这种效果一定非常困难。USB2.0 HS 协议是在设备和主机之间经过相当复杂的协商后建立的,因为最初每个 HS 设备都充当 FS 设备。

正常流程如下:

  1. 支持 HS 的设备在收到 VBUS 信号后,会使用 1-1.5kΩ 电阻将 D+ 线拉高至 3.3V。就像 FS 设备所做的一样。

  2. 主机端口检测到 D+=high,经过至少 100ms 的去抖动延迟后,主机在总线上断言 USB_RESET 状态,并使用 45Ω 驱动器将 D+ 和 D- 线接地 10 或 50ms。

  3. 如果设备是 FS,它不执行任何操作并等待直到 USB_RESET 结束。

  4. 如果设备是 HS,它将使用 HS 驱动器(18mA 电源)驱动 D- 为高电平约 1ms。这将产生一个幅度约为 800mV(18ma 进入 45Ω 负载)的脉冲,称为“Chirp-K”;

  5. 检测到 Chirp-K END 后,如果主机支持 HS 模式,它会将此信号驱动回来(同样 18mA 电流进入自己的 45Ω 负载),持续时间约为 50µs。如果是 FS 主机,它会忽略 Chirp-K,并以 FS 模式继续运行。

  6. 然后,如果主机能够使用 HS 模式,它会将其驱动器切换到 D+ 线,形成“Chirp-J”,同样持续 50µs;

  7. 主机在整个 USB_RESET 状态期间重复这种交替的 50µs 模式(集线器端口上为 10ms,根集线器端口上为 50ms);

  8. 经过三次交替的 chirp-K/J 后,设备识别出主机为 HS,并自行切换到 HS 模式。这意味着在设备端打开 HS 终端,使总线路电阻降至 22Ω,而 chirp 信号幅度降至 400mV,达到标准 HS 信号电平。

  9. 主机继续处理 HS 帧起始(SOF)数据包,并在 HS 模式下启动枚举过程。

现在,任何人都无法猜测摆动的哪一部分确实破坏了该协议,并使得主机将端口标记为 FS。

答案2

当您将设备插入 USB2 端口时,计算机首先尝试使用 USB2 数据协议协商连接。
如果失败,它会再次尝试使用 USB1 数据协议。

我最好的猜测是,在 USB2 协商期间,物理连接(由于触点摆动)尚不稳定。因此,即使该设备是 USB2 设备,它也会退回到 USB1。

有趣的是,Windows 确实意识到该设备应该能够达到 USB2 的速度(它从驱动程序获得的信息),因此 Windows 得出结论,您插入的 USB 端口是一个速度较慢的 USB1 端口。Windows 似乎没有检查端口本身是否支持 USB2。
这就是您收到有点误导性的错误消息的原因。

PS:我刚刚在 Windows 10 机器上尝试过:效果是一样的。

答案3

可能是您插入的速度太慢,以至于 Windows 已经完成了与控制器的握手过程,而此时 USB 2.0 通信所需的触点尚未接触。这可能会导致 Windows 误将 USB 2.0 设备当作 1.1 设备,因为标记为仅存在于 USB 2.0 及更高版本的导轨上不会有响应。

相关内容