Чи добре в USB-кабелі міняти провід D + і D?


54

Я чув, що D + і D- - це диференціальні сигнали, чи не важливо, якщо я підміняю їх під час підключення USB-пристрою до комп'ютера?


Цікаве питання ... Дійсний для всіх дійсних диференціальних протоколів .. як МОЖЕ!
Swanand

Відповіді:


58

Підсумок

Під час входу та виходу з режиму очікування важлива полярність, а зміна ліній D + і D - спричинить проблеми.

Передача даних

Дані USB кодуються NRZ таким чином, що "Один" представлений без зміни фізичного рівня, а "Нуль" представлений зміною фізичного рівня (див. Малюнок нижче). Тому інвертування сигналу (наприклад, шляхом заміни D + і D-) не призводить до функціональних змін під час передачі даних. Але можуть бути проблеми до і після передачі даних, які можуть порушити зв’язок із пристроєм.

Вихід із стану очікування

Хост включає в себе спадні резистори 15 кОм на кожному рядку даних. Якщо пристрій не підключено, це виводить обидві лінії даних низько в так званий стан "односторонній нуль" (SE0 в документації USB) і вказує на скидання або відключення з'єднання. Пристрій USB піднімає одну з ліній передачі даних високим резистором 1,5 кОм. Це переважає один із резисторів, що випадають, у хості та залишає лінії даних у режимі очікування, що називається "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 (кінець пакету), позначається передавачем, що веде 2 бітні рази SE0 (D + і D - обидва нижче максимуму) і 1 бітний час стану J. Після цього передавач перестає приводити в дію лінії D + / D, і вищезгадані підтягуючі резистори утримують його у стані J (в режимі очікування).

З драйвером, що змінюється D + / D, хост побачить послідовність (SE0, SE0, K) замість правильної (SE0, SE0, J). Потім хост може не розпізнати кінець пакету, що може спричинити проблеми.

введіть тут опис зображення

Висновок

Якщо пристрій та хост суворо дотримуються специфікацій USB, заміна D + та D-контактів призведе до збою. Можна вважати, що дизайнер хоста передбачив такий режим відмови, і створив сумісність для нього. Але незалежно від того, чи буде такий замінений кабель функціональним на практиці, він, безумовно, не дотримуватиметься специфікацій.

Інший учасник, Ендрю Колсмітт, пережив це, коли випадково помінялися шпильки USB-концентратора. Проблема проявилася як не підключені пристрої. USB-пристрій показав би, що він працює від живлення, але комп'ютер його не розпізнав на верхній стороні концентратора (який правильно підключений до хоста).

Джерело: wikipedia

Редагувати: дякую тим, хто коментував. Я додав акцент та деталі з ваших корисних записок.


2
Слід зазначити, що хост розрізняє низьку / повну швидкість, за якою лінією підтягнувся. Якщо ви поміняєте місцями D + / D- лінії, пристрій навіть не буде спілкуватися з тією ж швидкістю, що і хост. Крім того, поки дані кодуються NRZI, послідовність синхронізації та EoP визначаються в термінах J / K / SE0 і стануть неправильними при інверсії.
avakar

2
Я можу сказати з досвіду, що заміна D + / D- призводить до нефункціонального USB-інтерфейсу. Мені довелося переробити деякі прототипи, в яких був вбудований USB-концентратор. Не так весело.
akohlsmith

@avakar Дякую за деталі. Я думаю, що відповідь було висвітлено більшу частину цього коротко, але я спробую додати більше деталей, щоб було зрозуміліше.
travisbartley

@Andrew Kohlsmith Це корисна інформація. Якщо ви можете згадати, у мене є кілька питань до вас. У пристрою чи маточині відбулася заміна штифтів? Як виявилася помилка? Коли ви підключили пристрій, чи його не визнано чи не визнано несправним? Як діагностували проблему? Будь-які деталі допоможуть, я спробую додати вашу інформацію до відповіді.
travisbartley

2
@ trav1s Я поміняв D + / D- на стороні концентратора. Проблема проявилася тим, що пристрій не з’являється. USB-ключ показав би, що він працює від живлення, але його комп'ютер зовсім не розпізнав на верхній стороні концентратора (який правильно підключений до хоста). Діагностика, про яку мені соромно писати, я витратив багато часу, думаючи, що це проблема конфігурації концентратора / програмного забезпечення. Врешті-решт я простежив дроти, але це зробив останнім часом, тому що я був впевнений, що USB - це як Ethernet і може автоматично поміняти штифти. Я помилявся. :-)
akohlsmith

1

Я бачив, як пристрої домовляються про низьку швидкість лише тоді, коли міняються d + і d-. Це було з повним швидкісним (12 Мбіт / с) пристроєм та портом на основі чіпсети VIA.


2
Це підтверджує те, що @ trav1s сказав про USB 1.x.
Вайбхав Гарг
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.