Czy w kablu USB można zamieniać przewody D + i D-?

54

Słyszałem, że D + i D- to sygnały różnicowe, czy to ważne, czy zamienię je podczas podłączania urządzenia USB do komputera?

Yan King Yin
źródło
Interesujące pytanie ... Ważne dla wszystkich ważnych protokołów różnicowych .. jak CAN!
Swanand

Odpowiedzi:

58

Podsumowanie

Przy wchodzeniu i wychodzeniu ze stanu bezczynności polaryzacja jest ważna, a zamiana linii D + i D- spowoduje problemy.

Transmisja danych

Dane USB są kodowane przez NRZ, tak że „Jeden” jest reprezentowany przez brak zmiany poziomu fizycznego, a „Zero” reprezentowany jest przez zmianę poziomu fizycznego (patrz rysunek poniżej). Dlatego odwrócenie sygnału (na przykład poprzez zamianę D + i D-) nie powoduje żadnych zmian funkcjonalnych podczas transmisji danych. Mogą jednak wystąpić problemy przed i po transmisji danych, które mogą zakłócić komunikację z urządzeniem.

Wyjście ze stanu bezczynności

Host zawiera oporniki obniżające 15 kΩ na każdej linii danych. Gdy żadne urządzenie nie jest podłączone, powoduje to obniżenie obu linii danych do tak zwanego stanu „single-ended zero” (SE0 w dokumentacji USB) i wskazuje połączenie resetowane lub rozłączone. Urządzenie USB ciągnie jedną z linii danych wysoko za pomocą rezystora 1,5 kΩ. To obezwładnia jeden z oporników rozwijanych w hoście i pozostawia linie danych w stanie bezczynności o nazwie „J”. W przypadku USB 1.x wybór linii danych wskazuje, jakie prędkości sygnału jest zdolne do urządzenia; urządzenia o pełnej przepustowości ciągną D + wysoko, podczas gdy urządzenia o niskiej przepustowości ciągną D-high.

Podczas gdy dane są kodowane przez NRZI, sekwencja synchronizacji i EoP są zdefiniowane w kategoriach stałych stanów (J / K / SE0). Kiedy D + i D- są przełączane, stan J jest przełączany za pomocą K, a SE0 jest nadal SE0 (obie linie niskie). Tak więc sekwencja synchronizacji i EoP staną się niepoprawne podczas inwersji. W USB 1.x, jeśli D + i D- są zamienione, urządzenia o pełnej przepustowości są rozpoznawane jako o niskiej przepustowości i odwrotnie. Tak więc urządzenie nie będzie nawet komunikować się z tą samą prędkością co host.

Wejście w stan bezczynności

Koniec pakietu USB, zwany EOP (koniec pakietu), jest wskazywany przez nadajnik sterujący 2-bitowym czasem SE0 (D + i D-oba poniżej maks.) I 1-bitowym czasem stanu J. Następnie nadajnik przestaje sterować liniami D + / D-, a wspomniane rezystory podciągające utrzymują go w stanie J (bezczynności).

W przypadku sterownika zamienionego D + / D-, host zobaczy sekwencję (SE0, SE0, K) zamiast prawidłowej (SE0, SE0, J). Host może wtedy nie rozpoznać końca pakietu, co może powodować problemy.

wprowadź opis zdjęcia tutaj

Wniosek

Jeśli urządzenie i host ściśle przestrzegają specyfikacji USB, zamiana pinów D + i D- spowoduje awarię. Można sobie wyobrazić, że projektant hosta przewidział taki tryb awarii i wbudował dla niego kompatybilność. Ale niezależnie od tego, czy taki zamieniony kabel byłby funkcjonalny w praktyce, z pewnością nie byłby zgodny ze specyfikacjami.

Inny członek, Andrew Kohlsmith, doświadczył tego, gdy przypadkowo zamieniono piny koncentratora USB. Problem pojawił się, gdy podłączone urządzenia się nie wyświetlały. Urządzenie USB pokazywałoby, że jest zasilane, ale w ogóle nie zostało rozpoznane przez komputer po stronie huba (który był prawidłowo podłączony do hosta).

Źródło: wikipedia

Edycja: dziękuję tym, którzy skomentowali. Dodałem akcent i szczegóły z twoich pomocnych notatek.

Travisbartley
źródło
2
Należy zauważyć, że host różnicuje niską / pełną prędkość, o którą linię podciągnęły. Jeśli zamienisz linie D + / D-, urządzenie nie będzie nawet komunikować się z tą samą prędkością co host. Ponadto, podczas gdy dane są kodowane przez NRZI, sekwencja synchronizacji i EoP są zdefiniowane w kategoriach J / K / SE0 i staną się niepoprawne podczas inwersji.
avakar
2
Mogę mówić z doświadczenia, że ​​zamiana D + / D- powoduje niefunkcjonalny interfejs USB. Musiałem przerobić niektóre prototypy z wbudowanym hubem USB. Nie tak fajnie.
akohlsmith,
@avakar Dziękuję za szczegóły. Myślę, że odpowiedź na to pytanie pokrótce omówiła większość, ale postaram się dodać więcej szczegółów, aby było bardziej jasne.
travisbartley
@Andrew Kohlsmith Jest to przydatna informacja. Jeśli pamiętasz, mam do ciebie kilka pytań. Czy urządzenie lub koncentrator ma zamienione styki? Jak pojawił się błąd? Czy po podłączeniu urządzenia nie zostało ono rozpoznane lub nie zostało rozpoznane jako nieprawidłowe działanie? Jak zdiagnozowałeś problem? Wszelkie dane mogłyby pomóc, postaram się dodać twoje informacje do odpowiedzi.
travisbartley,
2
@ trav1s zamieniłem D + / D- po stronie piasty. Problem objawił się, gdy urządzenie się nie wyświetlało. Klucz USB wskazywałby, że jest zasilany, ale w ogóle nie został rozpoznany przez komputer po stronie huba (który został poprawnie podłączony do hosta). Diagnoza Jestem zawstydzony, że mogę pisać, spędziłem dużo czasu myśląc, że to problem z konfiguracją koncentratora / oprogramowaniem. W końcu prześledziłem przewody, ale zrobiłem to, ponieważ byłem przekonany, że USB jest jak Ethernet i może automatycznie zamieniać piny. Myliłem się. :-)
akohlsmith,
1

Widziałem, jak urządzenia negocjują małą prędkość tylko wtedy, gdy zamieniono d + i d-. Było to z urządzeniem o pełnej prędkości (12 Mb / s) i portem opartym na chipsecie VIA.

Dean Franks
źródło
2
To potwierdza to, co @ trav1s powiedział o USB 1.x.
Vaibhav Garg