Интерфейс USB
USB — шина с одним ведущим: хост опрашивает устройства, подключённые звездой через хабы, по паре D+ и D− идут данные, по VBUS — питание 5 В. Ниже — распиновки всех разъёмов от Type-A до Type-C, питание от 100 мА до USB PD, определение скорости, перечисление и подключение к микроконтроллеру по спецификациям USB-IF.
Обновлено Редакция GAW
Содержание
- Версии USB и скорости: от 1,5 Мбит/с до 80 Гбит/с
- Как устроена шина USB: хост, хабы и 127 устройств
- Распиновка USB: Type-A, Type-B, Mini-B и Micro-B
- Распиновка USB Type-C
- Питание по USB: 5 В, 100, 500 и 900 мА
- Type-C: резисторы на CC и ток 1,5 и 3 А
- USB Power Delivery: 9, 15, 20 В и до 240 Вт
- Сигналы USB 2.0: D+ и D−, состояния J, K и SE0
- Как хост определяет скорость: 15 кОм, 1,5 кОм и chirp
- Разводка платы: 90 Ом и никаких ответвлений
- Перечисление: как компьютер узнаёт устройство
- Защита порта USB: ESD, VBUS и ферриты
- USB в микроконтроллерах
- Типичные ошибки
USB (Universal Serial Bus) — последовательная шина для подключения устройств к компьютеру, а теперь и друг к другу. Обменом всегда управляет хост: он по очереди опрашивает устройства, и те передают данные только в ответ на его запросы. Устройства подключаются звездой через хабы, а по тому же кабелю, что и данные, идёт питание 5 В. Первая спецификация вышла в январе 1996 года, USB 2.0 — в апреле 2000-го, и почти всё, что нужно разработчику платы с USB, до сих пор определяет именно она.
Спецификации выпускает USB Implementers Forum (USB-IF): основная USB 2.0, USB 3.2 и USB4 для высоких скоростей, отдельные документы по разъёмам Micro-USB и Type-C, по зарядке (Battery Charging 1.2) и по питанию повышенной мощности (USB Power Delivery). Все цифры ниже — из этих документов и из документации производителей микросхем, ссылки в конце статьи.
Коротко
- Скорости: USB 2.0 — 1,5, 12 и 480 Мбит/с (Low, Full и High Speed), USB 3.2 — 5, 10 и 20 Гбит/с, USB4 — 20, 40 и 80 Гбит/с.
- Разъёмы: у Type-A и Type-B четыре контакта (VBUS, D−, D+, GND), у Mini-B и Micro-B пять — добавлен ID, у Type-C 24 контакта и вилка вставляется любой стороной.
- Питание: 5 В; USB 2.0 — 100 мА до конфигурирования и до 500 мА после, USB 3.x — 150 и 900 мА; Type-C — до 3 А при 5 В; USB PD — до 100 Вт, в режиме EPR — до 240 Вт.
- Type-C: потребитель ставит на CC1 и CC2 по резистору 5,1 кОм на землю, иначе источник Type-C не включит VBUS.
- Скорость устройства USB 2.0 задаёт подтяжка 1,5 кОм к 3,0–3,6 В: на D+ — Full Speed, на D− — Low Speed; на High Speed устройство переходит во время сброса.
- Топология: один хост, до 127 устройств, до 7 ярусов — не больше 5 хабов между хостом и устройством.
Версии USB и скорости: от 1,5 Мбит/с до 80 Гбит/с
Номер версии спецификации и скорость — разные вещи, и с этого начинается путаница. Спецификация USB 2.0 описывает три скорости: Low Speed (1,5 Мбит/с) для мышей и клавиатур, Full Speed (12 Мбит/с) из USB 1.x и добавленную в 2000 году High Speed (480 Мбит/с). Устройство Full Speed полностью соответствует USB 2.0, поэтому надпись «USB 2.0» на модуле с STM32F103 не означает 480 Мбит/с.
| Скорость | Название в спецификациях | Появилась | Как называть по USB-IF |
|---|---|---|---|
| 1,5 Мбит/с | Low Speed | USB 1.0, 1996 | — |
| 12 Мбит/с | Full Speed | USB 1.0, 1996 | — |
| 480 Мбит/с | High Speed | USB 2.0, 2000 | — |
| 5 Гбит/с | SuperSpeed: USB 3.0 = USB 3.1 Gen 1 = USB 3.2 Gen 1 | USB 3.0, 2008 | USB 5Gbps |
| 10 Гбит/с | USB 3.1 Gen 2 = USB 3.2 Gen 2; USB 3.2 Gen 1x2 — две линии по 5 Гбит/с | USB 3.1, 2013 | USB 10Gbps |
| 20 Гбит/с | USB 3.2 Gen 2x2 — две линии по 10 Гбит/с; USB4 20Gbps | USB 3.2, 2017 | USB 20Gbps |
| 40 Гбит/с | USB4 40Gbps | USB4, 2019 | USB 40Gbps |
| 80 Гбит/с | USB4 Version 2.0 | 2022 | USB 80Gbps |
С USB 3.x названия менялись трижды. USB 3.0 ввёл SuperSpeed — 5 Гбит/с по отдельным парам TX и RX. USB 3.1 переименовал эту скорость в USB 3.1 Gen 1 и добавил Gen 2 — 10 Гбит/с. USB 3.2 поглотил прежние редакции: 5 Гбит/с стали Gen 1, 10 Гбит/с — Gen 2, а работа по двум линиям через Type-C дала Gen 2x2 — 20 Гбит/с. По руководству USB-IF, USB 3.0 и USB 3.1 Gen 1 — синонимы. Теперь USB-IF рекомендует писать на упаковке просто скорость — USB 5Gbps, 10Gbps, 20Gbps, 40Gbps, 80Gbps, — а названия вроде «USB 3.2» и «SuperSpeed Plus» в рекламе и на коробках не использовать.
Битовая скорость — не скорость передачи файлов. Gen 1 кодирует данные кодом 8b/10b: из 5 Гбит/с на байты приходится 500 Мбайт/с, а за вычетом пакетов, подтверждений и управления потоком приложению остаётся около 450 Мбайт/с или меньше. Gen 2 использует код 128b/132b: около 1,2 Гбайт/с на линии и около 1,1 Гбайт/с полезных (USB 3.2, разд. 4.4.11).
USB 3.x и USB4 не заменяют USB 2.0, а работают параллельно с ним: пара D+/D− остаётся в каждом кабеле и разъёме, а скоростные пары добавлены отдельно. Поэтому устройство USB 3.x с хостом USB 2.0 работает — на скорости USB 2.0. USB4 работает только через Type-C и совместим с USB 3.2, USB 2.0 и Thunderbolt 3.
Как устроена шина USB: хост, хабы и 127 устройств
USB — не равноправная шина, как CAN, а дерево с одним хозяином. Хост — контроллер в компьютере — содержит корневой хаб с портами. К портам подключают устройства или хабы, к хабам — следующие устройства. Каждый кабель соединяет ровно два порта: нисходящий порт хоста или хаба (DFP, downstream facing port) и восходящий порт устройства (UFP, upstream facing port). Спецификация называет это многоярусной звездой.
Ограничения задаёт USB 2.0 (разд. 4.1.1 и 7.1.16):
- Адрес — 7 бит. К одному хост-контроллеру — до 127 устройств, включая хабы. Адрес 0 зарезервирован для только что подключённого устройства, пока хост не назначит ему свой.
- Не больше 7 ярусов вместе с корневым хабом: между хостом и устройством — не больше пяти хабов. Составное устройство — хаб со встроенной функцией — занимает два яруса.
- Кабель — не больше 26 нс задержки и не больше 5,2 нс на метр, то есть около 5 м. Вместе с пятью хабами это шесть кабелей, порядка 30 м от хоста до самого дальнего устройства.
Конечные точки и типы передач
Устройство для хоста — набор конечных точек (endpoint): буферов с номером от 0 до 15 и направлением IN (к хосту) или OUT (от хоста). Нулевая точка — управляющая, она есть у каждого устройства, через неё идёт перечисление и настройка. Остальные точки работают в одном из четырёх режимов:
| Тип передачи | Для чего | Гарантии | Пакет данных, не больше |
|---|---|---|---|
| Управляющая (control) | настройка, запросы к устройству | доставка с повторами | 8 байт (LS), 8–64 (FS), 64 (HS) для нулевой точки |
| Массивная (bulk) | файлы, потоки без жёстких сроков | доставка с повторами, полоса — по остатку | 64 байта (FS), 512 (HS); у Low Speed запрещена |
| Прерывание (interrupt) | клавиатуры, мыши, датчики | опрос с заданным периодом | 8 байт (LS), 64 (FS), 1024 (HS) |
| Изохронная (isochronous) | звук, видео | постоянная полоса, без повторов | 1023 байта за кадр (FS), 1024 за микрокадр (HS); у Low Speed запрещена |
Хост опрашивает точки по расписанию: на Full Speed время делится на кадры по 1 мс, на High Speed — на микрокадры по 125 мкс. Период опроса точки прерывания — от 1 до 255 мс на Full Speed и от 10 до 255 мс на Low Speed. Устройству Low Speed разрешены только две точки сверх нулевой, Full Speed — до 15 точек IN и 15 точек OUT.
Роли портов, OTG и Type-C
В классических разъёмах роль задаёт форма: Type-A — всегда сторона хоста, Type-B, Mini-B и Micro-B — сторона устройства, поэтому соединить два хоста стандартным кабелем нельзя. Смартфону же нужно быть то устройством, то хостом для флешки. Дополнение On-The-Go (OTG) решает это выводом ID в гнезде Micro-AB: вилка Micro-A замыкает ID на землю, и её сторона становится A-устройством — она подаёт VBUS и начинает сеанс хостом. Роли затем можно поменять протоколом HNP, а B-устройство может попросить включить VBUS протоколом SRP.
В Type-C вывода ID нет: роли определяют резисторы на выводах CC, о которых ниже. Порт с двумя ролями (DRP) поочерёдно изображает то источник, то потребитель, пока не встретит партнёра.
Распиновка USB: Type-A, Type-B, Mini-B и Micro-B
Во всех разъёмах USB 2.0 номер контакта и сигнал совпадают: 1 — VBUS, 2 — D−, 3 — D+, а земля — 4-й контакт у Type-A и Type-B и 5-й у Mini-B и Micro-B, где на 4-м месте стоит ID. Сигнальные контакты в разъёме утоплены глубже, поэтому при подключении первыми соединяются VBUS и GND, а D+ и D− — после них, когда общий провод уже на месте (USB 2.0, разд. 7.2.4.1).
| Контакт | Type-A, Type-B | Mini-B, Micro-B | Назначение |
|---|---|---|---|
| 1 | VBUS | VBUS | питание +5 В |
| 2 | D− | D− | дифференциальная пара USB 2.0 |
| 3 | D+ | D+ | дифференциальная пара USB 2.0 |
| 4 | GND | ID | у Mini-B и Micro-B — признак вилки A или B |
| 5 | — | GND | общий провод |
| корпус | экран | экран | соединяется с оплёткой кабеля |
Чтобы не перепутать сторону, помните: у вилки при взгляде на её торец порядок зеркальный. В вилке Type-A, если держать её контактами вверх, слева четвёртый контакт (GND), справа первый (VBUS); в вилке Micro-B широкой стороной вверх слева пятый контакт. При распайке гнезда на плату нумерацию берите из даташита конкретного разъёма: у угловых и вертикальных гнёзд расположение выводов на плате разное, а нумерация контактов — по спецификации.
По износостойкости разъёмы заметно различаются: Type-A и Type-B рассчитаны на 1500 циклов подключения, Micro-USB и Type-C — на 10 000.
Вывод ID в Mini-B и Micro-B
Вывод ID нужен устройствам OTG, чтобы понять, какая вилка вставлена. В вилке Micro-A он соединён с GND, в вилке Micro-B не подключён или соединён с землёй через сопротивление не меньше 100 кОм; устройство OTG считает вилку вилкой A, если сопротивление между ID и землёй меньше 10 Ом (Micro-USB 1.01, разд. 4.2). Обычному устройству с гнездом Micro-B вывод ID не нужен: его оставляют свободным. Переходник OTG для подключения флешки к телефону — это вилка Micro-A с замкнутым на землю ID: телефон видит вилку A и включает режим хоста. Спецификация Battery Charging 1.2 использует ID и для зарядных адаптеров ACA: они сообщают о себе определёнными сопротивлениями между ID и землёй.
Цвета проводов в кабеле USB
Таблица 6-1 спецификации USB 2.0 приводит расцветку проводов, но называет её типовой (Typical Wiring Assignment), а не обязательной:
| Провод | Цвет | Сечение по USB 2.0 |
|---|---|---|
| VBUS | красный | 28–20 AWG |
| D− | белый | 28 AWG, витая пара с D+ |
| D+ | зелёный | 28 AWG |
| GND | чёрный | 28–20 AWG |
| Экран | — | фольга, оплётка и неизолированный дренажный провод 28 AWG |
Перед тем как паять кабель, проверьте тестером, какой провод к какому контакту вилки идёт: расцветка — лишь рекомендация, спецификация её не требует. Провода питания в кабеле разрешено делать толще сигнальных — до 20 AWG: спецификация ограничивает падение напряжения на съёмном кабеле 125 мВ по VBUS и столько же по GND. Кабелю Full и High Speed нужна витая пара с волновым сопротивлением 90 Ом, а кабелю, рассчитанному только на Low Speed, витая пара не обязательна, но его задержка — не больше 18 нс.
Разъёмы USB 3.x
У разъёмов USB 3.x к четырём контактам USB 2.0 добавлены пять контактов SuperSpeed: передающая и приёмная пары и отдельная земля для них, GND_DRAIN. Нумерация по USB 3.1 Legacy Cable and Connector Specification:
| Контакт | Standard-A (хост) | Standard-B (устройство) | Контакт Micro-B |
|---|---|---|---|
| 1–4 | VBUS, D−, D+, GND | VBUS, D−, D+, GND | 1–5: VBUS, D−, D+, ID, GND |
| 5 | SSRX− | SSTX− | 6: SSTX− |
| 6 | SSRX+ | SSTX+ | 7: SSTX+ |
| 7 | GND_DRAIN | GND_DRAIN | 8: GND_DRAIN |
| 8 | SSTX− | SSRX− | 9: SSRX− |
| 9 | SSTX+ | SSRX+ | 10: SSRX+ |
TX и RX названы со стороны того, кому принадлежит разъём: у Standard-A — со стороны хоста, у Standard-B и Micro-B — со стороны устройства. Поэтому в кабеле SSTX хоста приходит на SSRX устройства. Вилки и гнёзда Standard-A версий 2.0 и 3.x подходят друг к другу в обе стороны, а у Standard-B и Micro-B совместимость односторонняя: в гнездо USB 3.x входит вилка USB 2.0, а вилка USB 3.x в гнездо USB 2.0 не входит. Пластик разъёма Standard-A USB 3.x рекомендовано делать синим (Pantone 300C).
Распиновка USB Type-C
Гнездо Type-C — 24 контакта в два ряда по 12 на центральном язычке. Ряды симметричны относительно центра: при повороте вилки на 180° контакт A1 встаёт на место B1, A5 — на место B5 и так далее. Напротив каждого контакта питания и земли стоит такой же, поэтому для питания ориентация вилки безразлична, а сигнальные контакты меняются местами.
| Контакты | Сигнал | Назначение |
|---|---|---|
| A1, A12, B1, B12 | GND | земля, все четыре соединяют на плате |
| A4, A9, B4, B9 | VBUS | питание: 5 В, после договорённости USB PD — до 48 В; все четыре соединяют |
| A6, B6 | D+ | USB 2.0; в гнезде A6 соединяют с B6 |
| A7, B7 | D− | USB 2.0; в гнезде A7 соединяют с B7 |
| A5, B5 | CC1, CC2 | канал конфигурации: подключение, ориентация, ток, обмен USB PD |
| A8, B8 | SBU1, SBU2 | дополнительные линии для альтернативных режимов; без надобности не подключают |
| A2, A3; B11, B10 | TX1+, TX1−; RX1+, RX1− | первая пара линий USB 3.2 и USB4 |
| B2, B3; A11, A10 | TX2+, TX2−; RX2+, RX2− | вторая пара линий |
В вилке Type-C пара D+/D− только одна — контакты A6 и A7, контактов B6 и B7 в вилке нет. Поэтому в гнезде контакты D+ обоих рядов соединяют между собой, D− — тоже: тогда USB 2.0 работает при любой ориентации вилки и мультиплексор не нужен. Перемычки делают у самого гнезда: спецификация ограничивает длину такого ответвления 3,5 мм. Скоростные пары так соединить нельзя — их коммутирует мультиплексор или контроллер в зависимости от ориентации.
Провод CC в кабеле тоже один. Второй вывод CC вилки — это VCONN: от него питается электроника в самой вилке — микросхема электронной маркировки (e-marker) или усилители активного кабеля. VCONN не проходит через кабель насквозь, его напряжение — 3,0–5,5 В. Все полнофункциональные кабели USB 3.2 и USB4 и все кабели на ток больше 3 А обязаны иметь электронную маркировку.
Кроме полнофункционального, спецификация определяет гнездо только для USB 2.0 — без линий TX и RX, это 16 контактов, — и вилку только для питания: у неё 9 контактов, CC, VBUS и GND. Длина кабеля C–C в спецификации — ориентир по электрическим требованиям: до 4 м для USB 2.0, около 2 м для 5 Гбит/с, 1 м для 10 Гбит/с и 0,8 м для USB4 на 40 Гбит/с. Обычный кабель рассчитан на ток 3 А, кабель с маркировкой — на 5 А; для режима EPR кабель маркируется на 5 А и 50 В.
Питание по USB: 5 В, 100, 500 и 900 мА
VBUS — нормированное питание 5 В. Исходный текст USB 2.0 требовал от порта с полным питанием 4,75–5,25 В; поправка VBUS Max Limit, принятая вслед за Type-C, подняла верхнюю границу до 5,50 В, и тот же диапазон 4,75–5,50 В записан в USB 3.2. Устройство должно работать и при меньшем напряжении на своём конце кабеля: по USB 2.0 — перечисляться при 4,40 В и работать на полной мощности при 4,75 В, по USB 3.2 — работать от 4,00 В.
Ток считают единицами нагрузки (unit load): 100 мА у USB 2.0 и 150 мА у USB 3.x. После подключения и до конфигурирования устройство берёт не больше одной единицы, а после того, как хост выбрал конфигурацию, — сколько заявлено в дескрипторе, но не больше пяти единиц у USB 2.0 и шести у USB 3.x.
| Режим | USB 2.0 | USB 3.x, одна линия |
|---|---|---|
| Единица нагрузки | 100 мА | 150 мА |
| До конфигурирования | 100 мА | 150 мА |
| После конфигурирования | до 500 мА | до 900 мА (1,5 А в двухлинейном режиме через Type-C) |
| Приостановка (suspend) | 2,5 мА | 2,5 мА |
| Напряжение на порту с полным питанием | 4,75–5,50 В | 4,75–5,50 В |
| Минимум на входе устройства | 4,40 В (4,75 В на полной мощности) | 4,00 В |
Сколько тока нужно после конфигурирования, устройство сообщает в поле bMaxPower дескриптора конфигурации: в единицах по 2 мА у USB 2.0 (50 = 100 мА) и по 8 мА на скоростях SuperSpeed. Если хост не может дать столько, он не выберет эту конфигурацию.
Ток приостановки — 2,5 мА для всех устройств, кроме настроенных хабов с питанием от шины: им можно 12,5 мА. Раньше маломощным устройствам разрешалось лишь 500 мкА, предел подняла поправка Suspend Current. В этот ток входит и ток через подтягивающие резисторы.
Бросок тока при подключении тоже нормирован. Устройство должно выглядеть для порта не тяжелее, чем 10 мкФ параллельно с 44 Ом, а по поправке Device Capacitance ёмкость на его VBUS — от 1 до 10 мкФ. Если по схеме нужно больше, ставят ограничение пускового тока. Хаб, наоборот, держит на нисходящих портах не меньше 120 мкФ с малым ESR, чтобы подключение одного устройства не просаживало соседние. Хост и хабы с собственным питанием обязаны иметь защиту от перегрузки: самовосстанавливающийся предохранитель или электронный ключ с порогом не выше 5 А.
Зарядные порты BC 1.2: SDP, CDP и DCP
Спецификация Battery Charging 1.2 разрешает брать больше 500 мА без перечисления, если порт сообщает, что он зарядный. Она различает три вида нисходящих портов:
| Порт | Данные | Ток | Как распознать |
|---|---|---|---|
| SDP — стандартный | есть | 2,5 мА без подключения, 100 мА до конфигурирования, 500 мА после (900 мА у SuperSpeed) | D+ и D− подтянуты к земле резисторами 15 кОм |
| CDP — зарядный с данными | есть | рассчитан на 1,5–5 А | в ответ на 0,5–0,7 В на D+ сам выдаёт 0,5–0,7 В на D− |
| DCP — выделенный зарядный | нет | рассчитан на 0,5–5 А | D+ и D− замкнуты между собой через сопротивление не больше 200 Ом |
Портативное устройство может брать от любого зарядного порта до 1,5 А. Распознавание проходит в два шага. На первом устройство подаёт на D+ напряжение 0,5–0,7 В и смотрит на D−: если там больше порога 0,25–0,4 В, порт зарядный — у DCP напряжение пришло через перемычку, у CDP его выставил сам порт. Иначе это SDP. На втором шаге напряжение подают на D− и смотрят на D+: у DCP оно вернётся через перемычку, у CDP — нет.
Отсюда простая практика: чтобы телефон с поддержкой BC 1.2 считал самодельный источник 5 В с гнездом Type-A зарядным портом DCP, контакты D+ и D− гнезда соединяют перемычкой. Спецификация отмечает, что некоторые фирменные зарядки вместо этого подтягивают D+ и D− к высокому уровню; устройство, которое сверяет напряжение на D− ещё и с верхним порогом, примет такую зарядку за обычный порт SDP.
Type-C: резисторы на CC и ток 1,5 и 3 А
Подключение по Type-C начинается не с VBUS, а с выводов CC. Источник — зарядка или порт хоста — подтягивает каждый свой вывод CC1 и CC2 к питанию резистором Rp или источником тока. Потребитель соединяет каждый свой вывод CC1 и CC2 с землёй резистором Rd = 5,1 кОм. В кабеле только один провод CC, поэтому соединятся одна пара выводов — какая, зависит от ориентации вилок. Источник видит, что напряжение на одном из его выводов CC упало, — Rp и Rd образовали делитель, — и узнаёт сразу и о подключении, и об ориентации. Только после этого он включает VBUS.
Сопротивление Rp сообщает потребителю, какой ток можно брать. Потребитель с Rd точностью ±10 % измеряет напряжение на своём выводе CC:
| Ток источника | Rp к 4,75–5,5 В | Rp к 3,3 В ± 5 % | Источник тока | Напряжение на CC при Rp к 5 В | Диапазон у потребителя |
|---|---|---|---|---|---|
| по умолчанию: 500 мА (USB 2.0) или 900 мА (USB 3.x) | 56 кОм ± 20 % | 36 кОм ± 20 % | 80 мкА ± 20 % | 0,42 В | 0,277–0,612 В |
| 1,5 А при 5 В | 22 кОм ± 5 % | 12 кОм ± 5 % | 180 мкА ± 8 % | 0,94 В | 0,746–1,164 В |
| 3,0 А при 5 В | 10 кОм ± 5 % | 4,7 кОм ± 5 % | 330 мкА ± 8 % | 1,69 В | 1,369–2,042 В |
Пример: зарядка с Rp = 22 кОм к 5 В. На CC потребителя В — диапазон 1,5 А, и плата может брать до 1,5 А, не дожидаясь конфигурирования. Если плате достаточно тока по умолчанию — по правилам USB 2.0, — напряжение на CC можно и не измерять: хватит самих резисторов. Rd с допуском ±20 % тоже разрешён, но тогда потребитель не может определять ток по напряжению.
У способов питания есть старшинство (Type-C, табл. 4-19): BC 1.2 главнее правил USB 2.0 и 3.2, ток Type-C 1,5 и 3 А главнее BC 1.2, а договорённость USB PD главнее всего. Порт Type-C, который поддерживает BC 1.2 и может дать 1,5 А, обязан объявить и ток Type-C 1,5 А.
Почему плата без резисторов 5,1 кОм не получает питание от кабеля C–C
Типичный случай — модуль с гнездом Type-C, у которого выводы CC1 и CC2 никуда не подключены. С кабелем USB-A — Type-C он работает: порт Type-A подаёт VBUS всегда, а в вилке Type-C такого кабеля уже стоит Rp 56 кОм к VBUS. С зарядкой Type-C и кабелем C–C — тишина: источник не видит Rd ни на одном выводе CC, а по спецификации его VBUS остаётся выключенным, пока потребитель не подключён (Type-C, разд. 4.4.2). Microchip в AN1953 объясняет, зачем так сделано: два соединённых кабелем источника не начнут гнать ток навстречу друг другу.
Лечится двумя резисторами по 5,1 кОм — от CC1 к земле и от CC2 к земле. Именно двумя отдельными:
- Один резистор только на CC1 — плата заработает лишь при одной ориентации вилки: перевернули — и провод CC попал на вывод без Rd.
- Оба вывода CC на одном резисторе — спецификация требует независимых терминаторов на CC1 и CC2. С электронно маркированным кабелем к объединённым выводам подключится ещё и нагрузка Ra из вилки (0,8–1,2 кОм), и источник может принять её за кабель без потребителя и не включить VBUS.
Обратная задача — подключить старое устройство с гнездом Micro-B к компьютеру или зарядке с гнездом Type-C. Для этого есть кабель Type-C — Micro-B, и спецификация требует ставить Rd 5,1 кОм прямо в его вилку Type-C, так что на плате устройства менять ничего не нужно.
USB Power Delivery: 9, 15, 20 В и до 240 Вт
USB Power Delivery (USB PD) — протокол договорённости о питании. Источник и потребитель обмениваются сообщениями по проводу CC кодом BMC на скорости 300 кбит/с. Источник присылает список возможностей — фиксированные напряжения с допустимым током и регулируемые диапазоны, — потребитель запрашивает один вариант, источник подтверждает и переключает напряжение. До договорённости на VBUS только 5 В, а без запроса потребителя источник выше не поднимает.
Какие напряжения обязан предлагать источник, зависит от его мощности PDP (PD Power) — так называемые правила мощности (USB PD 3.2, табл. 3.1):
| Мощность источника | 5 В | 9 В | 15 В | 20 В |
|---|---|---|---|---|
| до 15 Вт | PDP / 5 В | — | — | — |
| 15–27 Вт | 3 А | PDP / 9 В | — | — |
| 27–45 Вт | 3 А | 3 А | PDP / 15 В | — |
| 45–100 Вт | 3 А | 3 А | 3 А | PDP / 20 В, до 5 А |
Например, зарядка на 65 Вт обязана предложить 5, 9 и 15 В по 3 А и 20 В при 3,25 А. Ток больше 3 А разрешён только с кабелем, маркированным на 5 А: с обычным кабелем источник ограничит мощность 60 Вт. Диапазон до 100 Вт называется стандартным (SPR, Standard Power Range).
Расширенный диапазон EPR (Extended Power Range) появился в USB PD 3.1 и поднимает мощность до 240 Вт фиксированными напряжениями 28, 36 и 48 В при токе до 5 А (табл. 3.5). Для него нужны и источник, и потребитель, и кабель с поддержкой EPR.
| Мощность источника EPR | 28 В | 36 В | 48 В |
|---|---|---|---|
| 100–140 Вт | PDP / 28 В | — | — |
| 140–180 Вт | 5 А | PDP / 36 В | — |
| 180–240 Вт | 5 А | 5 А | PDP / 48 В |
Кроме фиксированных напряжений, есть регулируемые. Программируемый источник PPS выдаёт напряжение с шагом 20 мВ в диапазонах 5–11, 5–16 или 5–21 В и работает с ограничением тока. Источник AVS регулирует напряжение с шагом 100 мВ: 9–15 или 9–20 В в стандартном диапазоне и 15–28, 15–36 или 15–48 В в расширенном.
Сигналы USB 2.0: D+ и D−, состояния J, K и SE0
На Low и Full Speed пара D+/D− работает как дифференциальная линия, но с логическими уровнями относительно земли. Передатчик выдаёт низкий уровень не выше 0,3 В и высокий 2,8–3,6 В; приёмник различает разность 200 мВ, пока синфазное напряжение остаётся в пределах 0,8–2,5 В. Кроме дифференциального приёмника, у каждой линии есть одиночный с порогом между 0,8 и 2,0 В — он нужен, чтобы видеть состояние SE0, когда обе линии в нуле.
| Состояние | Full Speed | Low Speed | Где встречается |
|---|---|---|---|
| J | D+ выше D− | D− выше D+ | покой шины (Idle) |
| K | D− выше D+ | D+ выше D− | начало пакета, сигнал пробуждения |
| SE0 | обе линии ниже 0,8 В | то же | конец пакета, сброс, отключение |
| SE1 | обе линии высокие | то же | передатчик не должен его создавать |
Состояния J и K у Low Speed инвертированы относительно Full Speed — смысл задаёт тот вариант подтяжки, с которым подключилось устройство. Данные кодируются NRZI: ноль — смена состояния J на K или обратно, единица — состояние сохраняется. Длинная серия единиц оставила бы линию без переходов, и приёмник потерял бы синхронизацию, поэтому после шести единиц подряд передатчик вставляет ноль (bit stuffing), а приёмник его выбрасывает.
Каждый пакет начинается полем синхронизации SYNC — у Low и Full Speed это KJKJKJKK, у High Speed — 32 символа, — и заканчивается сигналом EOP: SE0 длиной около двух битов, затем J. Отдельной тактовой линии нет, приёмник подстраивается по переходам. Отсюда требования к точности частоты: на High Speed ±500 ppm, на Full Speed ±0,25 %, а на Low Speed — ±1,5 %. Для Low Speed спецификация прямо допускает керамический резонатор, а ATmega32U4 и V-USB работают на Low Speed даже от внутреннего RC-генератора; Full Speed без кварца обычно не обходится.
High Speed устроен иначе. Передатчик работает как источник тока 17,78 мА, который направляет ток в одну из линий, а каждая линия нагружена резисторами 45 Ом на землю с обоих концов. Получается 400 мВ ± 10 % на одной линии и около нуля на другой. Приёмник High Speed считает разность меньше 100 мВ тишиной, а больше 150 мВ — сигналом. Отключение устройства хост замечает по амплитуде в конце пакета: без нагрузки на дальнем конце она растёт, и порог срабатывания — 525–625 мВ.
Как хост определяет скорость: 15 кОм, 1,5 кОм и chirp
Нисходящий порт хоста или хаба подтягивает обе линии к земле резисторами 15 кОм; поправка к USB 2.0 разрешает от 14,25 до 24,8 кОм. Устройство подтягивает одну из линий к напряжению 3,0–3,6 В резистором 1,5 кОм: Full Speed — линию D+, Low Speed — линию D−. Хаб видит, какая линия поднялась, и узнаёт и о подключении, и о скорости.
Напряжение на подтянутой линии в покое — делитель из 1,5 кОм и 15 кОм:
Спецификация требует от свободной линии в покое 2,7–3,6 В. Ещё два правила для подтяжки (USB 2.0, разд. 7.1.5 и 7.2.1):
- Подтяжка питается от VBUS или включается по нему. Без VBUS она не должна давать ток в линию, а после пропадания VBUS устройство обязано её обесточить не позже чем через 10 с. У платы с собственным питанием подтяжку включает вывод микроконтроллера после того, как он увидел VBUS (ST, AN4879).
- Эквивалентное сопротивление подтяжки — не меньше 900 Ом. Устройствам с несъёмным кабелем разрешена и иная схема терминации, если уровни в покое укладываются в норму.
Как устройство переходит на High Speed
Устройство High Speed подключается как Full Speed — с подтяжкой 1,5 кОм на D+. Дальнейшее происходит во время сброса, когда хаб держит на линии SE0 не меньше 10 мс (USB 2.0, разд. 7.1.7.5):
- Устройство видит SE0 и отвечает сигналом chirp K: направляет ток в линию D− не меньше чем на 1 мс, и этот chirp должен закончиться не позже 7 мс от начала сброса.
- Хаб High Speed замечает chirp и отвечает чередованием chirp K и chirp J длительностью по 40–60 мкс.
- Увидев последовательность K-J-K-J-K-J, устройство не позже чем через 500 мкс отключает подтяжку 1,5 кОм и включает оконечные резисторы 45 Ом — связь переходит на 480 Мбит/с.
- Если хаб не ответил — например, это хаб USB 1.1, — устройство остаётся на Full Speed.
Уровни chirp выше обычных: chirp J — 700–1100 мВ, chirp K — от −500 до −900 мВ, потому что оконечные резисторы устройства в этот момент ещё не включены и ток идёт через нагрузку только одного конца.
Разводка платы: 90 Ом и никаких ответвлений
Кабель USB 2.0 — витая пара с дифференциальным волновым сопротивлением 90 Ом ± 15 % и синфазным 30 Ом ± 30 %. Дорожки от микросхемы до разъёма тоже должны иметь номинальное дифференциальное сопротивление 90 Ом, а их задержка входит в общий бюджет: до 3 нс на плате хоста и до 1 нс на плате устройства (USB 2.0, разд. 7.1.16).
Конкретные правила дают производители микросхем. Texas Instruments в SPRAAR7 для своих процессоров с USB 2.0, например AM335x, задаёт дифференциальное сопротивление 81–99 Ом, типичную общую длину дорожек 4000 mil (около 10 см) и наибольшую — 12 000 mil (30 см), разницу длин внутри пары — не больше 50 mil (1,3 мм) и не больше четырёх переходных отверстий на каждый проводник. Общие правила того же документа:
- пара идёт рядом, симметрично и параллельно, длины выравнивают у того конца, где возникла разница;
- под парой — сплошной полигон земли; пересекать разрезы в нём нельзя, а если без этого никак, рядом с местом пересечения ставят конденсатор-перемычку не больше 1 мкФ между двумя полигонами;
- никаких ответвлений и контрольных точек на паре — каждая из них становится отражающим отрезком;
- до других сигналов — не меньше 30 mil (0,76 мм), до тактовых — 50 mil (1,27 мм); пару не проводят под кварцами, генераторами, импульсными стабилизаторами, крепёжными отверстиями и магнитными компонентами;
- изгибы плавные: угол между соседними отрезками больше 135°, то есть поворот не больше чем на 45°;
- к гнезду Type-A, которое ставится в отверстия, подходят с нижнего слоя, чтобы вывод разъёма не стал ответвлением; к гнезду Micro-B, которое паяется на поверхность, — по верхнему слою, без переходных отверстий;
- защиту от ESD и фильтры ставят у самого разъёма, по возможности так, чтобы пара проходила сквозь корпус защиты без изгибов.
Спецификация USB 2.0 не советует ставить ферритовые бусины на D+ и D− устройств Full Speed и настойчиво не советует на High Speed. Если на линии стоят конденсаторы для замедления фронтов, их общая ёмкость вместе с трансивером и дорожкой — не больше 75 пФ. Последовательные резисторы, если микросхема их требует, — у ATmega32U4 это 22 Ом ± 5 % — входят в выходное сопротивление передатчика: у передатчика Full Speed вместе с ними должно получиться 28–44 Ом.
Перечисление: как компьютер узнаёт устройство
Перечисление (enumeration) — разговор хоста с новым устройством через нулевую конечную точку, после которого система знает, что это и какой драйвер ему нужен. По USB 2.0 (разд. 9.1.2) он идёт так:
- Подключение. Подтяжка поднимает D+ или D−, хаб замечает это и сообщает хосту. Устройство находится в состоянии Powered.
- Сброс. Хост ждёт не меньше 100 мс, пока устройство вставлено до конца и питание установилось, и сбрасывает порт — SE0 не меньше 10 мс. Во время сброса устройство и хаб договариваются о High Speed. После сброса устройство в состоянии Default отвечает по адресу 0 и берёт не больше 100 мА (150 мА у USB 3.x).
- Первый дескриптор. Хост читает дескриптор устройства и узнаёт размер пакета нулевой точки: 8, 16, 32 или 64 байта у Full Speed, 8 у Low Speed, 64 у High Speed.
- Адрес. Запросом SET_ADDRESS хост назначает устройству адрес от 1 до 127. На ответ у устройства 50 мс, на переход к новому адресу — ещё 2 мс.
- Описание. Хост читает полный дескриптор устройства с идентификаторами VID и PID, дескриптор конфигурации с интерфейсами и конечными точками, строки с названием производителя, изделия и серийным номером.
- Конфигурация. По VID, PID и классам интерфейсов система выбирает драйвер, и хост выполняет SET_CONFIGURATION. Устройство переходит в состояние Configured и может брать ток, заявленный в bMaxPower.
Если на шине больше 3 мс тишины, устройство начинает переход в приостановку, а не позже чем через 10 мс тишины должно брать не больше тока приостановки. Чтобы этого не случилось во время работы, хост каждую миллисекунду шлёт пакет начала кадра SOF, а порт с устройством Low Speed в каждом кадре выдаёт ему короткий сигнал keep-alive.
Классы устройств
Класс говорит системе, каким стандартным драйвером обслуживать интерфейс. Коды классов назначает USB-IF:
| Класс | Код | Для чего | Конечные точки |
|---|---|---|---|
| Audio | 01h | звуковые карты, микрофоны | изохронные |
| CDC (Communications) | 02h и 0Ah для данных | виртуальный COM-порт (ACM), модемы, сетевые адаптеры | точка уведомлений, обычно прерывание, и пара точек данных, обычно bulk |
| HID | 03h | клавиатуры, мыши, джойстики, устройства с обменом короткими отчётами | interrupt IN обязательна, interrupt OUT — по желанию |
| Mass Storage | 08h | флешки, картридеры | пара bulk; команда — в обёртке CBW из 31 байта |
| Hub | 09h | хабы | точка прерывания для сообщений об изменениях на портах |
| Vendor Specific | FFh | всё нестандартное | любые, драйвер — от производителя или libusb |
Для самодельного устройства удобнее всего HID: драйвер уже есть в любой ОС, а через отчёты можно передавать произвольные данные небольшими порциями. CDC ACM даёт виртуальный COM-порт тоже без своего драйвера — настройки порта вроде скорости приходят от хоста запросом SetLineCoding. Mass Storage превращает устройство в диск.
VID и PID
Дескриптор устройства содержит два 16-битных идентификатора: VID (idVendor) назначает USB-IF, PID (idProduct) — сам производитель. VID стоит 6000 долларов разово или выдаётся вместе с членством в USB-IF (5000 долларов в год); отдельно платится лицензия на логотип USB. Для любительских и мелкосерийных проектов Objective Development, автор V-USB, раздаёт общие пары на своём VID 0x16C0 — например, 0x05DC для устройств своего класса через libusb, 0x05DF для HID и 0x05E1 для CDC ACM — при условии, что устройство отличается от других по строке производителя с вашим доменом или адресом почты.
Защита порта USB: ESD, VBUS и ферриты
Разъём USB — то место, которого касаются пальцами, и к нему подключают кабели, заряженные статикой. Выводы USB у микроконтроллеров вроде STM32 рассчитаны на 2 кВ по модели человеческого тела (ST, AN4879) — это уровень защиты микросхемы при сборке, а не изделия. Изделие испытывают по IEC 61000-4-2:
| Уровень IEC 61000-4-2 | Контактный разряд | Воздушный разряд | Пиковый ток |
|---|---|---|---|
| 1 | 2 кВ | 2 кВ | 7,5 А |
| 2 | 4 кВ | 4 кВ | 15 А |
| 3 | 6 кВ | 8 кВ | 22,5 А |
| 4 | 8 кВ | 15 кВ | 30 А |
Для D+ и D− ставят сборки с малой ёмкостью. Пример — USBLC6-2SC6 от ST: две линии данных и защита VBUS в одном корпусе SOT23-6L, ёмкость линии на землю — 2,5 пФ типично и не больше 3,5 пФ, разница ёмкостей линий — 0,015 пФ, ток утечки при 5,25 В — не больше 150 нА. Сборка выдерживает уровень 4 по IEC 61000-4-2 (±8 кВ контактным разрядом, ±15 кВ воздушным) и рассчитана на USB 2.0 вплоть до 480 Мбит/с. Линия I/O1 проходит через выводы 1 и 6, I/O2 — через 3 и 4, вывод 5 — к VBUS, вывод 2 — к земле. ST в AN4879 предлагает для USB эту сборку или USBLC6-2P6 в корпусе поменьше, а для VBUS — дополнительный TVS-диод ESDA7P60-1U1M.
Ставят защиту как можно ближе к разъёму и соединяют короткими дорожками. В даташите USBLC6-2 есть расчёт: дорожка длиной 10 мм и шириной 0,5 мм — это около 6 нГн, и при разряде с фронтом 1 нс она добавляет к напряжению ограничения около 144 В. Две такие дорожки — к линии и к земле — поднимают выброс с 31 В до более чем 300 В.
VBUS со стороны хоста защищают от перегрузки и короткого замыкания: самовосстанавливающимся предохранителем или электронным ключом с ограничением тока. Со стороны устройства главное правило USB 2.0 — никогда не отдавать ток в VBUS восходящего порта. Если у платы есть своё питание, VBUS либо служит только для обнаружения подключения — через делитель на вход микроконтроллера, у STM32 напряжение на нём должно быть ниже 4 В (AN4879), — либо развязывается от внутренней шины 5 В диодом Шоттки или ключом.
Ферриты. Ферритовую бусину ставят в цепь VBUS, а не на линии данных: FTDI в даташите FT232R включает её последовательно в питание от USB, чтобы помехи схемы не уходили по кабелю к хосту, и подбирает по потребляемому току. На D+ и D− ферриты спецификация не рекомендует; для подавления синфазных помех на скоростных парах применяют синфазные фильтры (CMF), рассчитанные на такие линии, — правила их разводки есть в SPRAAR7.
Экран. Экран кабеля соединён с корпусом вилки. Спецификация требует, чтобы экран и корпус прибора были соединены, а схему заземления оставляет разработчику — по общим правилам электромагнитной совместимости и защиты от статики. Корпус гнезда на плате не оставляют висящим в воздухе.
USB в микроконтроллерах
Есть три пути подключить микроконтроллер к USB: встроенный контроллер USB, программная реализация на выводах общего назначения и отдельный мост USB–UART.
STM32F103 и плата Blue Pill
У STM32F103 встроенный контроллер USB Full Speed, только в роли устройства. D− — вывод PA11, D+ — PA12; частоту 48 МГц для USB даёт PLL, и тактировать его нужно через вход HSE — от кварца или внешнего генератора, а внутренний RC-генератор HSI для USB не годится (DS5319, AN4879). Согласующие резисторы встроены в выводы, внешних последовательных резисторов не нужно. А вот подтяжки 1,5 кОм на D+ внутри нет: её ставят снаружи, к напряжению 3,0–3,6 В. Буфер пакетов USB у STM32F103 — 512 байт, и он общий с контроллером CAN, поэтому одновременно USB и CAN на этом микроконтроллере не работают.
На многих платах Blue Pill вместо 1,5 кОм на D+ стоит резистор R10 на 10 или 4,7 кОм (STM32-base). Посчитаем напряжение на D+ в покое с подтяжкой хоста 15 кОм:
| Подтяжка | Напряжение на D+ | Требование USB 2.0 |
|---|---|---|
| 1,5 кОм | 3,3 · 15 / 16,5 = 3,0 В | от 2,7 В |
| 4,7 кОм | 3,3 · 15 / 19,7 = 2,5 В | ниже нормы |
| 10 кОм | 3,3 · 15 / 25 = 2,0 В | на верхней границе порога 0,8–2,0 В приёмника хоста |
С 10 кОм уровень на D+ попадает в зону, где порог одиночного приёмника конкретного хоста может оказаться и выше, и ниже, — поэтому одни компьютеры плату видят, а другие нет. Лечится заменой R10 на 1,5 кОм или резистором параллельно ему между PA12 и 3,3 В: к 10 кОм — 1,8 кОм (вместе 1,53 кОм), к 4,7 кОм — 2,2 кОм (1,50 кОм). Ещё одна особенность Blue Pill: вывод 5 В платы соединён с VBUS разъёма напрямую, без защиты, поэтому одновременно питать её от USB и от внешнего источника 5 В нельзя.
ATmega32U4: USB в 8-битном AVR
ATmega16U4 и ATmega32U4 — микроконтроллеры AVR со встроенным контроллером USB 2.0 Full Speed или Low Speed в роли устройства. У контроллера 832 байта двухпортовой памяти на конечные точки: нулевая — до 64 байт, одна точка до 256 байт и пять до 64 байт, с двойной буферизацией. Подтяжки встроены: бит LSM регистра UDCON выбирает D+ или D−, бит DETACH отключает устройство от шины программно.
Что нужно снаружи по даташиту:
- Последовательные резисторы 22 Ом ± 5 % на D+ и D−.
- Конденсатор 1 мкФ ± 10 % на выводе UCAP: это выход встроенного стабилизатора 3,3 В для буферов USB, который питается от UVCC. Благодаря ему сам микроконтроллер может работать от 5 В.
- Кварц для Full Speed. Контроллеру нужна частота 48 МГц ± 0,25 % от PLL, а на вход PLL — 8 МГц, поэтому подходят кварцы 8 и 16 МГц, последний — через делитель на 2. Без кварца, от внутреннего RC-генератора, работает только Low Speed.
- Конденсатор 10 мкФ на VBUS производитель настоятельно рекомендует.
Дорожки от разъёма к выводам — как можно короче, одинаковой длины, рядом и без лишних переходных отверстий.
V-USB: программный Low Speed на любом AVR
V-USB от Objective Development реализует устройство USB Low Speed программно, на любом AVR без контроллера USB: нужно не меньше 2 Кбайт флеш-памяти, 128 байт ОЗУ и тактовая частота от 12 МГц. Готовые модули есть для 12, 12,8, 15, 16, 16,5, 18 и 20 МГц; варианты на 12,8 и 16,5 МГц рассчитаны на внутренний RC-генератор с точностью около 1 %, а 16,5 МГц от RC получают, например, ATtiny25, ATtiny45 и ATtiny85 со встроенной PLL. Код драйвера занимает примерно 1150–1400 байт.
Схема простая: D+ — на вход прерывания INT0, у которого высший приоритет, подтяжка 1,5 кОм на D− (это Low Speed), последовательные резисторы 68 Ом. Главная тонкость — уровни: USB ждёт на D+ и D− 3,3 В, а AVR часто питается от 5 В. В примерах V-USB три решения: питать AVR от стабилизатора LDO 3,3 В — ближе всего к спецификации; ограничить уровни линий стабилитронами на 3,6 В, обязательно маломощными, иначе подтяжка не поднимет D− выше 2,5 В; или понизить питание двумя последовательными кремниевыми диодами примерно до 3,6 В.
Ограничения следуют из Low Speed: пакеты не больше 8 байт и только управляющие передачи и прерывания. Bulk-точки спецификация устройствам Low Speed запрещает, поэтому примеры CDC на V-USB формально её нарушают — Linux, например, принудительно превращает такие точки в точки прерывания. Надёжнее делать на V-USB устройство HID или устройство своего класса с драйвером через libusb. Лицензия — GPL 2 или GPL 3 по выбору либо коммерческая.
Мосты USB–UART: CH340, CP2102, FT232R
Самый простой путь — оставить микроконтроллеру UART, а USB отдать мосту. Вся работа с USB — перечисление, драйвер, буферы — на стороне моста, а компьютер видит виртуальный COM-порт.
- CH340 (WCH) — Full Speed, скорость UART от 50 бит/с до 2 Мбит/с. CH340G, T и R нужен кварц 12 МГц, CH340C, N, K, E, X и B обходятся встроенным генератором. При питании 5 В вывод V3 соединяют с конденсатором 100 нФ, при 3,3 В — с VCC. VID:PID по умолчанию — 1A86:7523.
- CP2102 (Silicon Labs) — Full Speed, встроенный трансивер без внешних резисторов, встроенный генератор и стабилизатор 3,3 В, EEPROM на 1024 байта для идентификаторов и строк; UART до 1 Мбит/с. Для новых разработок производитель рекомендует CP2102N. VID:PID — 10C4:EA60.
- FT232R (FTDI) — встроенные последовательные резисторы и подтяжка 1,5 кОм на D+, стабилизатор 3V3OUT до 50 мА, уровни UART задаёт VCCIO от 1,8 до 5,25 В, скорость от 300 бод до 3 Мбод. VID:PID — 0403:6001.
Эти мосты не используют стандартный класс CDC, им нужен драйвер производителя; в Linux это модули ch341, cp210x и ftdi_sio. Сравнение мостов, автосброс Arduino через DTR и подключение к микроконтроллеру разобраны в статье об интерфейсе UART.
Типичные ошибки
| Симптом | Вероятная причина | Что проверить |
|---|---|---|
| От кабеля USB-A — Type-C плата работает, от зарядки Type-C с кабелем C–C — нет | нет резисторов 5,1 кОм на CC1 и CC2 | при выключенном питании между каждым выводом CC и землёй — 5,1 кОм |
| Type-C работает только при одной ориентации вилки | Rd стоит только на одном выводе CC; D+ и D− подключены только к A6 и A7 | второй резистор; перемычки A6–B6 и A7–B7 |
| «Устройство USB не опознано», ошибки чтения дескриптора | перепутаны D+ и D−: хаб видит подтяжку не на той линии; нет подтяжки или она неверная; неточный кварц | в покое у устройства Full Speed на D+ около 3,0 В, на D− около нуля; частота кварца по настройкам PLL |
| Плату видят не все компьютеры | подтяжка 10 или 4,7 кОм вместо 1,5 кОм, как на Blue Pill | заменить резистор или добавить параллельный |
| Ошибки обмена на High Speed, устройство отваливается | ответвления на паре, контрольные точки, разрыв полигона под парой, ферриты на D+ и D− | разводку по правилам выше |
| Сбои и наводки при подключении длинным кабелем | не соединены земля или экран | GND и корпус гнезда; синфазное напряжение линий на Full Speed должно оставаться в пределах 0,8–2,5 В |
| Компьютер отключает порт при подключении | бросок тока: на VBUS устройства больше 10 мкФ без ограничения; потребление больше заявленного | ёмкость на VBUS; поле bMaxPower |
| Греется порт или внешний источник, когда подключены оба | два источника 5 В соединены через VBUS, устройство отдаёт ток в порт хоста | развязка диодом Шоттки или ключом, VBUS — только для обнаружения подключения |
| Заряжается, но не появляется в системе | в кабеле нет проводов D+ и D− | другой кабель; у Type-C спецификация прямо определяет вилку только для питания |
| Устройство на V-USB определяется через раз | на D+ и D− уровни 5 В вместо 3,3 В | стабилитроны на 3,6 В или питание AVR от 3,3 В, как в схемах V-USB |
Как отладить
- Мультиметр, устройство подключено к хосту. VBUS — 4,75–5,5 В на разъёме хоста, на входе устройства — не меньше 4,4 В. У устройства Full Speed в покое на D+ около 3,0 В, на D− около нуля, у Low Speed — наоборот. Если на подтянутой линии меньше 2,7 В, проблема в подтяжке.
- Type-C без USB PD. При подключённом источнике напряжение на выводе CC потребителя показывает объявленный ток: около 0,42, 0,94 или 1,69 В при Rp к 5 В. Около нуля на обоих выводах — источник не подтягивает CC или провод CC оборван.
- Система. В Linux
lsusb -vпокажет дескрипторы, VID, PID и заявленный ток, аdmesg— ход перечисления и ошибки. В Windows то же видно в диспетчере устройств: «ИД оборудования» в свойствах устройства содержит VID и PID. - Анализатор. Логический анализатор с декодером USB справляется с Low Speed и Full Speed, если частота выборки в несколько раз выше битовой; его подключают к D+ и D− относительно GND. Для High Speed нужен аппаратный анализатор протокола USB.
Соседние темы: UART — интерфейс, который мосты USB–UART выводят на плату; RS-232 — для приборов с COM-портом; распиновки других разъёмов — в разделе «Распиновки», источники питания — в разделе «Питание». Остальные интерфейсы собраны в разделе интерфейсы.
Частые вопросы
Как распаяны контакты разъёмов USB Type-A и Micro-USB?
У Type-A и Type-B: 1 — VBUS (+5 В), 2 — D−, 3 — D+, 4 — GND. У Mini-B и Micro-B: 1 — VBUS, 2 — D−, 3 — D+, 4 — ID, 5 — GND. В гнезде Type-A, если смотреть спереди язычком вверх, контакты идут 1–4 слева направо, в гнезде Micro-B широкой стороной вверх — 1–5 слева направо. У вилки при взгляде на её торец порядок зеркальный.
Какого цвета провода в кабеле USB?
Спецификация USB 2.0 приводит типовую расцветку: VBUS — красный, D− — белый, D+ — зелёный, GND — чёрный, экран — оплётка с дренажным проводом. Это рекомендация, а не обязательное требование, поэтому перед пайкой проверьте тестером, какой провод к какому контакту вилки идёт.
Зачем на USB Type-C резисторы 5,1 кОм на CC1 и CC2?
По ним источник узнаёт, что к нему подключили потребителя. Зарядка или хост с гнездом Type-C держит VBUS выключенным, пока не увидит резистор 5,1 кОм к земле на одном из своих выводов CC. Поэтому плата без этих резисторов питается от кабеля USB-A — Type-C, где подтяжка уже стоит в вилке, но не от кабеля Type-C — Type-C. Резисторов два, по одному на CC1 и CC2: какой вывод соединится с проводом CC, зависит от того, какой стороной вставлена вилка.
Какая скорость у USB 2.0?
USB 2.0 знает три скорости: Low Speed 1,5 Мбит/с, Full Speed 12 Мбит/с и High Speed 480 Мбит/с. Надпись USB 2.0 не гарантирует 480 Мбит/с: мышь работает на 1,5 Мбит/с, а встроенный USB у STM32F103 и ATmega32U4 — на 12 Мбит/с. Полезная скорость обмена ниже битовой: часть времени уходит на служебные поля пакетов и протокол.
Какой ток можно брать от порта USB?
До конфигурирования — 100 мА у USB 2.0 и 150 мА у USB 3.x, после — до 500 и 900 мА. Зарядный порт по BC 1.2 отдаёт до 1,5 А, порт Type-C объявляет резисторами на CC 1,5 или 3 А при 5 В, а USB Power Delivery договаривается о напряжении до 20 В и мощности до 100 Вт, в расширенном диапазоне EPR — до 48 В и 240 Вт.
Чем USB 3.0 отличается от USB 3.1 Gen 1 и USB 3.2 Gen 1?
Ничем: это одна и та же скорость 5 Гбит/с, которую переименовывали с выходом новых редакций спецификации. USB 3.1 Gen 2 и USB 3.2 Gen 2 — 10 Гбит/с, USB 3.2 Gen 2x2 — 20 Гбит/с по двум линиям и только через Type-C. На упаковке USB-IF советует писать просто скорость: USB 5Gbps, USB 10Gbps, USB 20Gbps.
Источники
- USB-IF. Universal Serial Bus Specification, Revision 2.0, April 27, 2000, с поправками ECN — пакет 2025 года. Гл. 4 — топология; гл. 6 — разъёмы, табл. 6-1 — цвета проводов; гл. 7 — уровни, NRZI, подтяжки, chirp, питание; гл. 9 — перечисление и дескрипторы. ECN: Pull-up/pull-down Resistors, Suspend Current, VBUS Max Limit, Device Capacitance, Mini-B
- USB-IF. Universal Serial Bus Micro-USB Cables and Connectors Specification, Revision 1.01, April 4, 2007 — входит в пакет USB 2.0: табл. 4-2 — назначение контактов и вывод ID, рис. 4-7 и 4-10 — вилка и гнездо Micro-B
- USB-IF. Universal Serial Bus 3.2 Specification, Revision 1.1, June 2022 — разд. 11.4 — единица нагрузки 150 мА, падение напряжения, табл. 11-2
- USB-IF. USB 3.1 Legacy Cable and Connector Specification, Revision 1.0, September 22, 2017 — табл. 5-1 — совместимость вилок и гнёзд, табл. 5-2–5-4 — контакты Standard-A, Standard-B, Micro-B
- USB-IF. USB Type-C Cable and Connector Specification, Release 2.5, March 2026 — табл. 3-1, 3-2 — кабели; табл. 3-4, 3-5 — контакты; разд. 4.4.2 — VBUS; табл. 4-19 — приоритет способов питания; табл. 4-27, 4-28, 4-36 — Rp, Rd и напряжения на CC
- USB-IF. USB Power Delivery Specification, Revision 3.2, Version 1.2, March 17, 2026 — табл. 3.1 и 3.5 — правила мощности SPR и EPR; табл. 4.2–4.4 — PPS и AVS; табл. 5.9 — BMC 300 кбит/с
- USB-IF. Battery Charging Specification, Revision 1.2, with errata, March 15, 2012 — разд. 1.4 — SDP, CDP, DCP; разд. 3.2 — обнаружение зарядного порта; табл. 5-1–5-3
- USB-IF. Language Usage Guidelines: USB 3.1, USB 3.2, USB4, USB Data Performance (2024)
- USB-IF. Defined Class Codes; Device Class Definition for HID 1.11; CDC 1.2 (PSTN 1.2); Mass Storage Bulk-Only Transport 1.0
- USB-IF. Getting a Vendor ID
- STMicroelectronics. AN4879: Introduction to USB hardware and PCB guidelines using STM32 MCUs, Rev 10, January 2025
- STMicroelectronics. USBLC6-2: Very low capacitance ESD protection, DS4260 Rev 7, December 2021
- STMicroelectronics. STM32F103x8, STM32F103xB datasheet, DS5319 Rev 19, September 2023 — разд. 2.3 — USB, табл. 5 — выводы, табл. 45 — электрические параметры USB
- Texas Instruments. SPRAAR7J: High-Speed Interface Layout Guidelines, 2018, ред. 2023
- Microchip. AN1953: Introduction to USB Type-C, DS00001953A, 2015
- Atmel (Microchip). ATmega16U4/ATmega32U4 datasheet, Atmel-7766J, 04/2016 — гл. 21 — контроллер USB, типовые схемы, рекомендации по разводке
- Objective Development. V-USB: virtual USB port for AVR microcontrollers — usbdrv/Readme.txt, circuits/Readme.txt, usbdrv/USB-IDs-for-free.txt
- WCH. CH340 Datasheet, version 3C; Silicon Labs. CP2102/9 Data Sheet, Rev. 1.8; FTDI. FT232R Datasheet, FT_000053, version 2.16
- STM32-base. STM32F103C8T6 Blue Pill
- Linux kernel: drivers/usb/core/config.c, drivers/usb/serial — обработка bulk-точек у устройств Low Speed; идентификаторы VID:PID мостов USB–UART
Смотрите также
- ИнтерфейсыUART, RS-232, RS-485, I²C, SPI, CAN: уровни, схемы, выбор
- UARTКадр 8N1, скорость и допуск, TX и RX, уровни, USB–UART, AVR и STM32
- RS-232Уровни, распиновка DB9, нуль-модем, MAX3232, UART и AVR
- AVRATmega, ATtiny, AVR Dx/Ex: семейства, прошивка, инструменты
- Источники питанияСтабилизаторы, LDO, DC-DC, потери и выбор схемы
- РаспиновкиРазъёмы, микросхемы, модули: выводы и их назначение