我注意到在Windows XP和7(分别是2台不同的计算机)上我可以设法得到“如果你将它连接到高速USB 2.0端口,这个设备可以更快地执行”通知如果我连接电缆就弹出非常缓慢(或者用一只手挣扎一下)。如果我用双手足够快或正常连接,则没有通知。在任何一种情况下,所有这些设备似乎都能正常工作。
我认为发生的事情是,在慢速/笨拙的连接期间,线路之间的接触被中断了足够的时间,USB控制器认为它不是2.0而是更慢。但为什么这么认为呢?或者为什么它不只是说“你连接电缆都不好,请拔下电源并再试一次”?
我注意到在Windows XP和7(分别是2台不同的计算机)上我可以设法得到“如果你将它连接到高速USB 2.0端口,这个设备可以更快地执行”通知如果我连接电缆就弹出非常缓慢(或者用一只手挣扎一下)。如果我用双手足够快或正常连接,则没有通知。在任何一种情况下,所有这些设备似乎都能正常工作。
我认为发生的事情是,在慢速/笨拙的连接期间,线路之间的接触被中断了足够的时间,USB控制器认为它不是2.0而是更慢。但为什么这么认为呢?或者为什么它不只是说“你连接电缆都不好,请拔下电源并再试一次”?
Answers:
该消息指的是协商12Mbit / s的旧全速(FS)数据速率,而不是480Mbit / s的高速(HS)数据速率。从USB2端口获取此效果一定非常困难。USB2.0 HS协议在设备和主机之间的相当复杂的协商之后建立,因为最初每个HS设备充当FS设备。
正常流程如下:
具有HS功能的器件在通过1-1.5kΩ电阻到3.3V获得VBUS信号后上拉D +线。就像FS设备一样。
主机端口检测到D + =高电平,在最小100ms去抖动延迟后,主机在总线上置位USB_RESET状态,用45Ω驱动器将D +和D-线驱动到地,持续10或50ms。
如果设备是FS,它什么都不做,等待直到USB_RESET结束。
如果器件是HS,它将使用HS驱动器(18mA源)驱动D-高约1ms。这将产生一个幅度约为800mV(18ma至45Ω负载)的脉冲,称为“Chirp-K”;
在检测到Chirp-K的END时,如果主机能够进入HS模式,它会将此信号驱回(相同的18mA进入自己的45Ω负载),现在大约50μs。如果它是FS主机,它将忽略Chirp-K,并继续作为FS。
然后,如果主机能够进行HS模式,则将其驱动器切换为D +线,形成“Chirp-J”,再次持续50μs;
主机在USB_RESET状态的整个持续时间内重复这种交替的50μs模式(集线器端口上10ms,根集线器端口上50ms);
在三个交替的chirp-K / J之后,设备识别出主机是HS,并且自身切换到HS模式。这意味着在器件端打开HS端接,这使得总线电阻达到22Ω,并且啁啾信号幅度降至400mV,达到标准HS信号电平。
主机继续进行HS帧起始(SOF)分组,并以HS模式开始枚举过程。
现在,任何人都猜测摆动的哪一部分确实打破了这个协议,并让主机将端口标记为FS。
FS
是“全速”(USB 1.0,12 Mbit / s),HS
是“高速”(USB 2.0,480 Mbit / s),SS
将是“SuperSpeed”(USB 3.0,5 Gbit / s)。
当您插入USB2端口中的设备时,计算机首先尝试使用USB2数据协议协商连接。
当失败时,它会再次尝试使用USB1数据协议。
我最好的猜测是,在USB2协商期间,物理连接(由于摆动触点)不稳定。因此即使该设备是USB2设备,它也会回归到USB1。
足够有趣的Windows确实意识到该设备应该具有USB2速度(从驱动程序获取的信息),因此Windows得出结论,您插入的USB端口是一个缓慢的USB1端口。Windows似乎没有检查端口本身是否支持USB2。
这就是为什么你得到一些有误导性的错误信息。
PS我自己尝试使用Windows 10机器:同样的效果。
可能是你插入它的速度足够慢以至于Windows已经完成了控制器的握手过程,那时USB 2.0通信所需的联系人没有接触到。这可能导致Windows将USB 2.0设备误认为1.1设备,因为标记为仅在USB 2.0及更高版本上存在的轨道上没有响应。