在USB电缆中,可以互换D +和D-线吗?


Answers:


58

摘要

当进入和退出空闲状态时,极性很重要,交换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设备将显示它已通电,但集线器上游侧(正确连接到主机)的计算机根本无法识别它。

资料来源:维基百科

编辑:谢谢那些发表评论的人。我在您的有用注释中添加了重点和详细信息。


2
应当注意,主机通过拉起哪条线来区分低速/全速。如果交换D + / D-线,则设备甚至无法以与主机相同的速度进行通信。此外,虽然数据是NRZI编码的,但同步序列和EoP是根据J / K / SE0定义的,在反转时会变得不正确。
avakar 2013年

2
从经验上我可以说,交换D + / D-会导致USB接口无法正常工作。我必须重做一些内置有USB集线器的原型。没那么有趣。
akohlsmith

@avakar谢谢您的详细信息。我认为答案简要涵盖了大部分内容,但是我将尝试添加更多细节,以便更清晰。
travisbartley

@Andrew Kohlsmith这是有用的信息。如果您还记得,我有一些问题要问您。设备或集线器是否有插针交换?错误是如何显现的?当您连接设备时,是否未将其识别为故障?您是如何诊断问题的?任何详细信息都会有所帮助,我将尝试将您的信息添加到答案中。
travisbartley

2
@ trav1s我在集线器一侧交换了D + / D-。该问题表现为设备未出现。USB密钥将显示它已通电,但集线器上游侧(正确连接到主机)的计算机根本无法识别它。诊断我很尴尬,我花了很多时间认为这是集线器配置/软件问题。最后我找到了电线,但我最后做了,因为我确信USB就像以太网一样,可以自动交换引脚。我错了。:-)
akohlsmith 2013年

1

我已经看到设备仅在d +和d-交换时协商为低速。这是一个全速(12mbps)设备和一个基于VIA芯片组的端口。


2
这证实了@ trav1s关于USB 1.x的说法。
Vaibhav Garg 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.