Перейти к содержанию

Почему компьютер не видит USB-устройство?

Обновлено Редакция GAW

Хост USB узнаёт о новом устройстве не по питанию, а по подтяжке линии данных. По спецификации USB 2.0 полноскоростное устройство подключает резистор 1,5 кОм от D+ к источнику 3,0–3,6 В, низкоскоростное — от D−. Хост замечает поднятую линию, ждёт не меньше 100 мс, сбрасывает устройство и читает его дескрипторы. Сбой на любом шаге выглядит по-разному.

Что видно на компьютереШаг, на котором сбойЧто проверить
Ничего, нет даже звука подключенияобнаружениеподтяжка D+ 1,5 кОм к 3,3 В, кабель с линиями данных, пайка разъёма
«Неизвестное устройство», сбой дескрипторачтение дескрипторовтактирование USB (у STM32F103 — HSE, PLL и 48 МГц, см. ответ про USB без кварца), прошивка, D+ и D− не перепутаны
Устройство появляется и пропадаетпитаниеток до 100 мА до конфигурирования, напряжение не ниже 4,40 В
Определяется, но без драйверакласс устройствакласс в дескрипторе, драйвер для своего VID/PID

Подтяжка и кабель

Подтяжка — первое, что проверяют на самодельной плате. Резистор должен питаться от VBUS: спецификация требует, чтобы без VBUS он не подавал ток в линию. На части плат STM32 Blue Pill стоит резистор подтяжки D+ неверного номинала — об этом и о замене резистора рассказано на странице платы. Ещё одна частая причина — кабель только для зарядки, без жил D+ и D−: устройство получает питание, но хост его не видит.

Дескрипторы и питание

Если хост заметил устройство, дальше он читает дескриптор USB. Ошибка в длине или полях дескриптора, неточная частота или зависание в обработчике дают «неизвестное устройство». Отдельная история — питание: до конфигурирования устройство вправе потреблять одну единичную нагрузку — 100 мА, и при больших бросках тока сбрасывается.

Разъёмы, линии и скорости USB собраны на странице USB.

Похожие вопросы

Почему в диспетчере устройств «Сбой запроса дескриптора устройства»?

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

Почему устройство пропадает при включении нагрузки?

До конфигурирования спецификация разрешает брать от порта одну единичную нагрузку — 100 мА, а функциям, потребляющим больше, нужно не меньше 4,75 В на разъёме. Если при включении реле или подсветки напряжение проседает, устройство сбрасывается и переподключается.

Можно ли подтянуть D+ к 5 В вместо 3,3 В?

Нет. Спецификация требует подтяжку 1,5 кОм к источнику 3,0–3,6 В, а высокий уровень на линии данных должен лежать в пределах 2,8–3,6 В. Подтяжка к 5 В выводит линию за эти пределы.

Источники

  1. USB-IF. Universal Serial Bus Specification, Revision 2.0 (пакет usb_20_20250603) — разд. 7.1.5 — полноскоростное устройство подтягивает D+, низкоскоростное — D−, резистором RPU = 1,5 кОм ± 5 % к источнику 3,0–3,6 В; напряжение подтяжки берут от VBUS, чтобы без VBUS резистор не питал линию; разд. 7.1.7.3 — после подключения хост выдерживает паузу не меньше 100 мс до первых запросов; разд. 7.2.1 — единичная нагрузка 100 мА, до конфигурирования устройство берёт не больше одной; разд. 7.2.2 — устройство должно отвечать на запросы конфигурации при 4,40 В на разъёме, функции с потреблением больше одной нагрузки — работать от 4,75 В; табл. 7-7 — высокий уровень на линии данных VOH от 2,8 до 3,6 В
  2. STMicroelectronics. DS5319 Rev 20. STM32F103x8, STM32F103xB datasheet — разд. 2.3.20 — интерфейс USB 2.0 full-speed (12 Мбит/с); рис. 2, примечание 2 — для работы USB должны быть включены HSE и PLL, USBCLK — 48 МГц
  3. Espressif. ESP32-C3-DevKitM-1 User Guide (esp-dev-kits, latest) — раздел Required Hardware — часть кабелей USB рассчитана только на зарядку: в них нет линий данных, и с ними плата не прошивается

Нашли ошибку?