Я чув, що D + і D- - це диференціальні сигнали, чи не важливо, якщо я підміняю їх під час підключення USB-пристрою до комп'ютера?
Я чув, що D + і D- - це диференціальні сигнали, чи не важливо, якщо я підміняю їх під час підключення USB-пристрою до комп'ютера?
Відповіді:
Під час входу та виходу з режиму очікування важлива полярність, а зміна ліній 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-пристрій показав би, що він працює від живлення, але комп'ютер його не розпізнав на верхній стороні концентратора (який правильно підключений до хоста).
Редагувати: дякую тим, хто коментував. Я додав акцент та деталі з ваших корисних записок.
Я бачив, як пристрої домовляються про низьку швидкість лише тоді, коли міняються d + і d-. Це було з повним швидкісним (12 Мбіт / с) пристроєм та портом на основі чіпсети VIA.