Answers:
当进入和退出空闲状态时,极性很重要,交换D +和D-线会引起问题。
USB数据经过NRZ编码,物理级别不变表示“一个”,物理级别不变表示“零”(请参见下图)。因此,对信号进行反相(例如,通过交换D +和D-)不会导致数据传输过程中发生功能更改。但是在数据传输之前和之后可能存在一些问题,这些问题可能会导致与设备的通信中断。
主机在每条数据线上均包含15kΩ下拉电阻。如果未连接任何设备,这会将两条数据线拉低至所谓的“单端零”状态(USB文档中的SE0),并指示复位或断开连接。USB设备使用1.5kΩ电阻将数据线之一拉高。这会使主机中的一个下拉电阻器过载,并使数据线处于称为“ J”的空闲状态。对于USB 1.x,数据线的选择表明了设备能够支持的信号速率。全带宽设备将D +拉高,而低带宽设备将D-拉高。
虽然数据是NRZI编码的,但同步序列和EoP是根据固定状态(J / K / SE0)定义的。当切换D +和D-时,将用K切换J状态,并且SE0仍为SE0(均为低线)。因此,同步序列和EoP在反转时将变得不正确。在USB 1.x中,如果D +和D-被交换,则全带宽设备将被识别为低带宽,反之亦然。因此,设备甚至无法以与主机相同的速度进行通信。
USB数据包的末端称为EOP(数据包末端),由发送器驱动SE0的2位时间(D +和D−均低于最大值)和J状态的1位时间来表示。此后,发送器停止驱动D + / D-线,并且上述上拉电阻将其保持在J(空闲)状态。
使用D + / D-交换驱动程序,主机将看到序列(SE0,SE0,K),而不是正确的序列(SE0,SE0,J)。然后,主机可能无法识别数据包的结尾,这将导致问题。
如果设备和主机严格遵守USB规范,则交换D +和D-引脚将导致故障。可以想到的是,主机的设计者预见到了这种故障模式,并为此内置了兼容性。但是,无论这种交换电缆在实践中是否可以正常工作,它肯定不符合规范。
另一个成员Andrew Kohlsmith在不小心交换USB集线器的引脚时遇到了这种情况。该问题表现为未显示连接的设备。USB设备将显示它已通电,但集线器上游侧(正确连接到主机)的计算机根本无法识别它。
编辑:谢谢那些发表评论的人。我在您的有用注释中添加了重点和详细信息。
我已经看到设备仅在d +和d-交换时协商为低速。这是一个全速(12mbps)设备和一个基于VIA芯片组的端口。