回答:
アイドル状態を開始および終了するとき、極性が重要であり、D +およびD-ラインを交換すると問題が発生します。
USBデータはNRZコーディングされており、「1」は物理レベルの変化なしで表され、「ゼロ」は物理レベルの変化で表されます(下図を参照)。したがって、(たとえば、D +とD-を交換することにより)信号を反転しても、データ送信中に機能的な変更は発生しません。ただし、データ送信の前後に問題が発生し、デバイスとの通信が停止する可能性があります。
ホストには、各データラインに15kΩプルダウン抵抗が含まれています。デバイスが接続されていない場合、これは両方のデータラインをいわゆる「シングルエンドゼロ」状態(USBのドキュメントではSE0)に引き下げ、接続のリセットまたは切断を示します。USBデバイスは、1.5kΩの抵抗を使用してデータラインの1つをHighにします。これにより、ホストのプルダウン抵抗の1つが無効になり、データラインが「J」と呼ばれるアイドル状態のままになります。USB 1.xの場合、データラインの選択は、デバイスが可能な信号レートを示します。全帯域幅のデバイスはD +を高くし、低帯域幅のデバイスはD-を高くします。
データはNRZIエンコードされていますが、同期シーケンスとEoPは固定状態(J / K / SE0)で定義されています。D +とD-が切り替えられると、J状態はKで切り替えられ、SE0はSE0(両方のラインがロー)のままです。そのため、同期シーケンスとEoPは反転時に不正確になります。USB 1.xでは、D +とD-を交換すると、全帯域幅のデバイスが低帯域幅として認識され、逆も同様です。そのため、デバイスはホストと同じ速度で通信することさえしません。
EOP(end-of-packet)と呼ばれるUSBパケットの終わりは、SE0の2ビット時間(D +とD-が両方とも最大以下)と1ビット時間のJ状態を駆動する送信機によって示されます。この後、トランスミッターはD + / D-ラインの駆動を停止し、前述のプルアップ抵抗によりJ(アイドル)状態に保持されます。
D + / D-スワップドライバーを使用すると、ホストには正しい(SE0、SE0、J)の代わりにシーケンス(SE0、SE0、K)が表示されます。その場合、ホストはパケットの終わりを認識できず、問題が発生する可能性があります。
デバイスとホストがUSB仕様に厳密に従っている場合、D +ピンとD-ピンを交換するとエラーが発生します。ホストの設計者がこのような障害モードを予測し、それに対する互換性を組み込んでいると考えられます。しかし、そのような交換されたケーブルが実際に機能するかどうかにかかわらず、それは確かに仕様に準拠しません。
別のメンバーのAndrew Kohlsmithは、USBハブのピンが誤って交換されたときにこれを経験しました。この問題は、接続されたデバイスが表示されないこととして現れました。USBデバイスは電源が入っていることを示しますが、ハブの上流側のコンピューター(ホストに正しく配線されている)によってまったく認識されませんでした。
編集:コメントした人に感謝します。役立つメモから強調と詳細を追加しました。
d +とd-が交換された場合にのみ、デバイスが低速としてネゴシエートするのを見てきました。これは、フルスピード(12mbps)デバイスとVIAチップセットベースのポートを使用していました。