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

电器工程 USB 沟通 信号 电缆
2022-01-12 02:23:07

听说D+和D-是差分信号,连接USB设备到电脑的时候调换一下有关系吗?

2个回答

概括

进入和退出空闲状态时,极性很重要,调换D+和D-线会出问题。

数据传输

USB 数据采用NRZ 编码,因此“一”表示物理电平没有变化,“零”表示物理电平有变化(见下图)。因此,反转信号(例如,通过交换 D+ 和 D-)不会导致数据传输过程中的功能变化。但是在数据传输前后可能会出现问题,这可能会导致与设备的通信中断。

退出空闲状态

主机在每条数据线上包括 15 kΩ 下拉电阻。当没有连接设备时,这会将两条数据线拉低至所谓的“单端零”状态(USB 文档中的 SE0),并指示重置或断开连接。USB 设备使用 1.5 kΩ 电阻将其中一条数据线拉高。这会压倒主机中的一个下拉电阻器,并使数据线处于称为“J”的空闲状态。对于 USB 1.x,数据线的选择表明了设备的信号速率;全带宽设备将 D+ 拉高,而低带宽设备将 D- 拉高。

虽然数据是 NRZI 编码的,但同步序列和 EoP 是根据固定状态 (J/K/SE0) 定义的。当D+和D-切换时,J状态与K切换,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 芯片组的端口。