Я слышал, что 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.