USB-порт не видит устройство; как исправить
USB-порт не видит устройство — как исправить?
USB-порт (Universal Serial Bus) представляет собой стандартный интерфейс кабельного соединения для персональных компьютеров. Он применяется для передачи цифровых данных на короткие расстояния. Два USB-порта позволяют разным устройствам установить связь друг с другом и совместно выполнять одну конкретную задачу. При необходимости, такие порты могут даже передавать электроэнергию (например, зарядка телефона через ноутбук).
Содержание статьи:
Применяются такие порты преимущественно для подключения периферии (клавиатуры, мышки), а также для приема или передачи данных посредством USB-накопителей.
Модуль поддержки USB устройств в Linux
USB устройства в настоящее время полностью поддерживаются в Linux. Большая часть изменений проявилась в ветке ядра 2.6, хотя определённая поддержка имелась даже в ядрах 2.2. Linux поддерживает как USB 2.0, так и ранние спецификации. Ввиду подключения на лету (горячего подключения), заложенной в самой природе USB, поддержка обычно производится посредством модулей ядра, которые могут загружаться или выгружаться по необходимости.
Команда lspci позволяет отобразить USB устройства:
Вывод команды показывает, что в системе имеются 3 USB контроллера.
С помощью команды lsmod можно отобразить загруженные USB модули:
PS/2 и USB [ править | править код ]
В настоящее время подавляющее большинство изготавливаемых компьютерных мышей и клавиатур имеют разъём USB, некоторые современные материнские платы (особенно миниатюрных форм-факторов) не имеют разъёма PS/2 или имеют только один разъём. Современные ноутбуки и нетбуки не имеют внешних разъёмов PS/2, и для подключения к ним мыши или внешней клавиатуры используется USB. Старые ноутбуки чаще всего имели один универсальный разъём.
Если USB-контроллер мышей и клавиатур поддерживает работу через интерфейс PS/2, то устройства (мыши и клавиатуры) можно подключить через пассивный переходник с разъёмом PS/2. Как правило, такой особенностью обладает большинство недорогих мышей и клавиатур.
Интерфейс PS/2 может использоваться не только для клавиатур и мышей, но и для других устройств, например, сканеров штрихкодов, позиционеров. Однако эти устройства в большинстве случаев эмулируют работу клавиатуры или мыши. Это позволяет избавиться от драйверов и сделать устройства платформонезависимыми.
В офисных условиях иногда предпочитают использовать клавиатуры и мыши PS/2, а не USB по соображениям безопасности: это позволяет полностью отключить порты USB и сделать невозможным подключение флешек и других потенциально опасных устройств.
Издеваемся над USB
В очередной раз втыкая скоростную USB флешку в порт USB 3.0, я увидел надпись «Это устройство может работать быстрее. «. Но подождите, я и так его воткнул в порт 3.0! Неужели контакт барахлит? И если так, то как флешка определяет, на какой скорости ей работать? Ведь современные ПК поддерживают целых три стандарта соединения — USB 1.1, 2.0 и 3.0. Можно ли «понизить» стандарт USB, насильно заставив устройство работать, к примеру, на USB 1.1? Не на все эти вопросы в сети удалось найти ответ, и я решил разобраться сам, по ходу столкнувшись с довольно неочевидными ситуациями.
Понижаем USB 3.0 до 2.0
Вы сейчас скажете — да что может быть проще, просто возьми USB 2.0 кабель — и будете совершенно правы. Если в кабеле или разъёме нет USB 3.0 контактов, у устройства не будет иного выхода, кроме как завестись на скорости USB 2.0:
Но отключение каких конкретно проводков приведёт к переключению на USB 2.0? Что будет, если отключить только один, или замкнуть соседние? Интересно же выйти за рамки стандарта и поэкспериментировать!
Для экспериментов я спаял USB-«маму» и USB-«папу» проводками на макетной плате:
На фотографии не просто так один проводок находится в воздухе. Выяснилось, что соединение прекрасно работает даже без одного из проводников SS_TX дифф. пары! (для пары SS_RX такой фокус уже не работает)
Более того, если отключить все USB 3.0 контакты, кроме SS_TX, девайс продолжает считать, что он подключен к USB 3.0 и вообще никак не обнаруживается в системе. Честно говоря, я был уверен, что соединение в этом случае переключится на 2.0 режим:
здесь отключены SS_RX-, SS_RX+ и SS_TX+
Итого делаем вывод, что USB 3.0 устройство проверяет наличие SuperSpeed соединения по линии SS_TX, причём трансивер настолько устойчив к ошибкам, что ему плевать на обрыв одной из линий пары. Для гарантированного переключения устройства на USB 2.0 нужно рвать обе линии: SS_TX- и SS_TX+.
Понижаем USB до 1.1
USB 2.0 всем хорош, да больно уж шустрый. Если вы когда-нибудь пытались заснифать его логическим анализатором, у вас либо очень крутой анализатор, либо вы нашли древний USB-хаб вроде такого:
Несмотря на то, что интернет пестрит вопросами «как понизить USB 2.0 до 1.1», простого решения я нигде не увидел:
Давайте глянем внимательнее! По стандарту USB, скорость работы согласуется на сигнальном уровне. Устройство поднимает уровень D- до 0.8в, а хост отвечает пилообразным сигналом:
То же самое видим на нашем «экспериментальном стенде» на осциллографе:
То есть, нужно сделать так, чтобы хост не увидел этого повышения напряжения. А значит — ставим диод в разрыв линии D- (Шоттки, чтобы минимизировать падение):
Ииии он успешно подавляет сигнал от устройства, не мешая обычной передаче данных:
И здесь я был уверен, что диод нарушит передачу данных по линии и ничего не заработает, но нет — я не смог найти ни одного устройства, которое не заработало через такой «переходник».
Собираем «даунгрейдер»
Как обобщение вышеописанных экспериментов, я сделал простенький пассивный переключатель USB режимов — 1.1/2.0/3.0
Моё стремление к простоте порой невозможно сдерживать. Захотелось всё реализовать на единственном трёхпозиционном переключателе, вот таком:
Первоначальная идея была — один ряд контактов переключает D- между:
- «диод» (USB 1.1)
- «пусто» (USB 3.0)
- «D-» (USB 2.0)
- «пусто» (USB 1.1)
- «SS_TX-» (USB 3.0)
- «пусто» (USB 2.0)
Теперь средний контакт переключается между крайними, а в среднем положении выключатель замыкает две пары независимых контактов. Идеально! Осталось припаять и готово:
TODO: развести печатную платку и сделать красиво
Всё, теперь можно быть уверенным, что флешка работает именно в 3.0 (2.0, 1.1) режиме, а иначе она просто не обнаружится в системе. В заключение, тестируем наш картридер в различных положениях выключателя.
почему-то скорость USB 1.1 не понравилась Crystal Disk Mark, и в результате теста он показал нули
Вопрос на засыпку
В USB 3.0 разъёме две пары контактов — USB 2.0 и USB 3.0, мы уже выяснили, что устройство (флешка, картридер) сначала лезет на контакты 3.0, а если не получается, переходит в 2.0 режим.
Что, если к 3.0 контактам подключить одно устройство, а к 2.0 контактам — другое? Какое из устройств увидит компьютер?
Попробуйте ответить в опросе ниже перед тем, как заглядывать под спойлер.
Для этого эксперимента, спаяем вместе USB 3.0 SATA-адаптер и USB 2.0 флешку:
UsbView — просмотр дерева USB устройств в графическом интерфейсе
Скорость USB разъёмов и устройств вы сможете узнать это с помощью такой программы, как UsbView, которая предоставляет очень подробную техническую информацию.
USBView — это небольшое приложение GTK, показывающее, как выглядит дерево устройств шины USB. Он показывает графическое представление устройств, которые в данный момент подключены, показывая топологию шины USB. Она также отображает информацию о каждом отдельном устройстве на шине.
Установка UsbView в Debian, Kali Linux, Linux Mint, Ubuntu и их производные:
Установка UsbView в Arch Linux, Manjaro, BlackArch и их производные:
Во время установки программа сообщит, что для её работы необходимо выполнить команду
либо в файл /etc/fstab добавить строку
Вместо этого можно обойтись тем, что запустить программу с правами суперпользователя:
На скриншоте показано, что компьютер имеет 2 xHCI хост контроллера, один из них версии 3.10:
К контроллеру версии 3.10 подключены два устройства, одно из устройств версии 3.00 (обратите внимание на строку «USB Version: 3.00»).
Список подключенных устройств Linux
В операционной системе Linux используется особенная философия управления. Все объекты, в том числе и устройства считаются файлами. При подключении какого-либо устройства к системе для него создается файл в каталоге /dev/.
Обычно, после того, как вы подключили любую USB флешку или другой накопитель к системе с установленным окружением рабочего стола, устройство автоматически монтируется в папку /media/имя_пользователя/метка_устройства/, а затем вы можете получить доступ к файлам из устройства в этой папке. Тем не менее, бывают ситуации, когда вам нужно вручную монтировать USB и тогда такой вариант не поможет.
Файлы всех устройств находятся в каталоге /dev/. Здесь вы можете найти файлы sda, hda, которые представляют из себя жесткий диск, а также файлы sda1 или hda1, которые позволяют получить доступ к разделам диска. Мы уже подробно рассматривали это все в статье работа с устройствами Linux. Вы можете посмотреть список всех устройств в каталоге /dev/ с помощью команды:
Теперь осталось понять какие из этих файлов устройств принадлежат USB устройствам и каким устройствам именно.
VMware PCI Passthrough (VMDirectPath): проброс USB контроллера в ВМ
Другой, менее удобный метод предоставления доступа из ВМ к физическому USB устройству – проброс целиком USB контроллера с ESXi хоста. Этот режим называется VMDirectPath. Для его использования чипсет сервера должен поддерживать Intel Directed I/O или AMD I/O Virtualization Technology (AMD IOMMU), и этот режим включен в настройках BIOS/UEFI.
Если на сервере установлен только один USB контроллер, при пробросе его в ВМ, вы не сможете использовать локально подключенные USB устройства хоста (клавиатуру, мышь). В этом случае лучше добавить в сервер дополнительный PCI USB контроллер.
Если на хосте имеется несколько USB контроллеров, вы можете идентифицировать подключенное USB устройство и номер контроллера через ESXi shell. Вывести список USB устройств:
lsusb -v | grep -e Bus -e iSerial
В выводе команду нужно найти строку USB накопителя, например:
Затем по номеру контроллера (Bus02 в этом случае) определяем root hub и его iSerial:
tail -f /var/log/vmkernel.log | grep -i USB
Если USB диск не определяется ESXi хостом, проверьте что служба запущена:
#chkconfig usbarbitrator —list.
Соответственно, мы получили номер USB контроллера, который нужно пробросить в ВМ.
- Чтобы пробросить физический USB контроллер, выберите ESXi хоста, на котором запущена ваша ВМ и перейдите в раздел Manage -> Settings -> PCI Devices -> Edit;
- В списке PCI устройств найдите и выберите нужный USB контроллер по его ID (в моем примере 00:1D.0, контроллер называется C610/X99 series chipset USB Enhanced Host Controller #1 Intel Corporation);
- Статус USB контролера должен смениться с Unavailable (This device is not currently available for VMs to use) на Available (This device available for VMs to use). Нажмите Ок.
- Для сохранения изменений нужно перезагрузить хост ESXi.
- После загрузки хоста, выключите ВМ и добавьте новое PCI устройство (New Device -> PCI Device -> Add). В выпадающем списке выберите ваш USB контроллер (например 0000:00:1D| Intel Corporation USB Chipset…).