Почему компьютер не видит 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 В выводит линию за эти пределы.
Источники
- 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 В
- STMicroelectronics. DS5319 Rev 20. STM32F103x8, STM32F103xB datasheet — разд. 2.3.20 — интерфейс USB 2.0 full-speed (12 Мбит/с); рис. 2, примечание 2 — для работы USB должны быть включены HSE и PLL, USBCLK — 48 МГц
- Espressif. ESP32-C3-DevKitM-1 User Guide (esp-dev-kits, latest) — раздел Required Hardware — часть кабелей USB рассчитана только на зарядку: в них нет линий данных, и с ними плата не прошивается
Нашли ошибку?