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

Интерфейс USB

USB — шина с одним ведущим: хост опрашивает устройства, подключённые звездой через хабы, по паре D+ и D− идут данные, по VBUS — питание 5 В. Ниже — распиновки всех разъёмов от Type-A до Type-C, питание от 100 мА до USB PD, определение скорости, перечисление и подключение к микроконтроллеру по спецификациям USB-IF.

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

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 SpeedUSB 1.0, 1996—
12 Мбит/сFull SpeedUSB 1.0, 1996—
480 Мбит/сHigh SpeedUSB 2.0, 2000—
5 Гбит/сSuperSpeed: USB 3.0 = USB 3.1 Gen 1 = USB 3.2 Gen 1USB 3.0, 2008USB 5Gbps
10 Гбит/сUSB 3.1 Gen 2 = USB 3.2 Gen 2; USB 3.2 Gen 1x2 — две линии по 5 Гбит/сUSB 3.1, 2013USB 10Gbps
20 Гбит/сUSB 3.2 Gen 2x2 — две линии по 10 Гбит/с; USB4 20GbpsUSB 3.2, 2017USB 20Gbps
40 Гбит/сUSB4 40GbpsUSB4, 2019USB 40Gbps
80 Гбит/сUSB4 Version 2.02022USB 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: хост, хабы и устройства по ярусамМногоярусная звезда USB. Ярус 1 — корневой хаб хоста. Самая длинная допустимая цепочка: хост, пять хабов и устройство на седьмом ярусе. К корневому хабу на втором ярусе подключено ещё одно устройство. Справа — ограничения: до 127 устройств, до семи ярусов, не больше пяти хабов между хостом и устройством, кабель около 5 м.ярус 1ярус 2ярус 3ярус 4ярус 5ярус 6ярус 7Хост (корневой хаб)Хаб 1Хаб 2Хаб 3Хаб 4Хаб 5УстройствоУстройстводо 127 устройств на контроллер:адрес 7 бит, хабы — тожеустройствадо 7 ярусов с корневым хабом:не больше 5 хабов междухостом и устройствомкабель: задержка до 26 нс,это около 5 м
Многоярусная звезда USB. Ярус 1 — корневой хаб хоста; самая длинная допустимая цепочка — пять хабов и устройство на седьмом ярусе.

Ограничения задаёт 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).

Распиновка гнёзд USB Type-A и Type-B, вид спередиГнездо Type-A, вид спереди, язычок вверху: под язычком слева направо контакты 1 VBUS, 2 D−, 3 D+, 4 GND; у вилки порядок зеркальный. Гнездо Type-B, вид спереди, скошенные углы вверху: над язычком слева 2 D−, справа 1 VBUS; под язычком слева 3 D+, справа 4 GND.Type-A (Standard-A)вид на гнездо, язычок вверху1VBUS2D−3D+4GNDу вилки порядок зеркальный: 4, 3, 2, 1Type-B (Standard-B)вид на гнездо, скосы вверху2D−1VBUS3D+4GND
Гнёзда Type-A и Type-B, вид спереди. Нумерация по чертежам спецификации USB 2.0: у Type-A контакты 1–4 под язычком слева направо, у Type-B — 2 и 1 над язычком, 3 и 4 под ним.
Распиновка гнёзд USB Mini-B и Micro-B, вид спередиГнёзда Mini-B и Micro-B, вид спереди, широкая сторона корпуса вверху. Контакты слева направо: 1 VBUS, 2 D−, 3 D+, 4 ID, 5 GND. У вилки при взгляде на её торец порядок зеркальный: 5, 4, 3, 2, 1.Mini-Bвид на гнездо, широкая сторона вверху123451VBUS2D−3D+4ID5GNDMicro-Bвид на гнездо, широкая сторона вверху123451VBUS2D−3D+4ID5GND
Гнёзда Mini-B и Micro-B, вид спереди, широкая сторона вверху: контакты 1–5 слева направо. Масштаб условный.
КонтактType-A, Type-BMini-B, Micro-BНазначение
1VBUSVBUSпитание +5 В
2D−D−дифференциальная пара USB 2.0
3D+D+дифференциальная пара USB 2.0
4GNDIDу 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–4VBUS, D−, D+, GNDVBUS, D−, D+, GND1–5: VBUS, D−, D+, ID, GND
5SSRX−SSTX−6: SSTX−
6SSRX+SSTX+7: SSTX+
7GND_DRAINGND_DRAIN8: GND_DRAIN
8SSTX−SSRX−9: SSRX−
9SSTX+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 и так далее. Напротив каждого контакта питания и земли стоит такой же, поэтому для питания ориентация вилки безразлична, а сигнальные контакты меняются местами.

Распиновка гнезда USB Type-C на 24 контакта, вид спередиГнездо USB Type-C, вид спереди. Верхний ряд слева направо: A1 GND, A2 TX1+, A3 TX1−, A4 VBUS, A5 CC1, A6 D+, A7 D−, A8 SBU1, A9 VBUS, A10 RX2−, A11 RX2+, A12 GND. Нижний ряд слева направо: B12 GND, B11 RX1+, B10 RX1−, B9 VBUS, B8 SBU2, B7 D−, B6 D+, B5 CC2, B4 VBUS, B3 TX2−, B2 TX2+, B1 GND. При повороте на 180° ряды меняются местами, поэтому вилка входит любой стороной. Линий TX и RX нет в гнезде только для USB 2.0.язычок: ряд A сверху, ряд B снизуGNDA1TX1+A2TX1−A3VBUSA4CC1A5D+A6D−A7SBU1A8VBUSA9RX2−A10RX2+A11GNDA12GNDB12RX1+B11RX1−B10VBUSB9SBU2B8D−B7D+B6CC2B5VBUSB4TX2−B3TX2+B2GNDB1питание VBUSземляUSB 2.0CC и SBUTX/RX — только USB 3.2 и USB4
Гнездо USB Type-C, вид спереди: ряд A сверху слева направо, ряд B снизу — от B12 до B1. В гнезде только для USB 2.0 (16 контактов) линий TX и RX нет.
КонтактыСигналНазначение
A1, A12, B1, B12GNDземля, все четыре соединяют на плате
A4, A9, B4, B9VBUSпитание: 5 В, после договорённости USB PD — до 48 В; все четыре соединяют
A6, B6D+USB 2.0; в гнезде A6 соединяют с B6
A7, B7D−USB 2.0; в гнезде A7 соединяют с B7
A5, B5CC1, CC2канал конфигурации: подключение, ориентация, ток, обмен USB PD
A8, B8SBU1, SBU2дополнительные линии для альтернативных режимов; без надобности не подключают
A2, A3; B11, B10TX1+, TX1−; RX1+, RX1−первая пара линий USB 3.2 и USB4
B2, B3; A11, A10TX2+, 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.0USB 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.

Цепи CC в USB Type-C: Rp у источника и Rd 5,1 кОм у потребителяИсточник подтягивает каждый из своих выводов CC1 и CC2 к +5 В резистором Rp: 56 кОм по умолчанию, 22 кОм для 1,5 А или 10 кОм для 3 А. Потребитель подключает каждый свой вывод CC1 и CC2 к земле резистором Rd 5,1 кОм. В кабеле только один провод CC; второй вывод CC вилки — это VCONN, сквозного провода нет. Источник включает VBUS, только когда на одном из его выводов CC появляется Rd.Источник (зарядка, хост)Кабель C–CПотребитель (устройство)+5 Включ VBUS+5 ВRp56, 22 или 10 кОм+5 ВRpVBUS включается, только когдана CC1 или CC2 появился RdVBUSVBUSCC1CC1CC2CC2GNDGNDпровод CCвторой CC — VCONN вилки,сквозного провода нетк питанию платыRd5,1 кОмRd5,1 кОм
Канал конфигурации Type-C. Rp источника задаёт, какой ток он может дать; Rd 5,1 кОм потребителя — признак подключения. Источник включает VBUS, только когда видит Rd.

Сопротивление Rp сообщает потребителю, какой ток можно брать. Потребитель с Rd точностью ±10 % измеряет напряжение на своём выводе CC:

UCC=Uп⋅RdRp+RdU_\text{CC} = U_\text{п} \cdot \frac{R_d}{R_p + R_d}
Ток источника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 В
Напряжение на CC потребителя USB Type-C и ток, который объявил источникШкала напряжения на выводе CC потребителя с Rd 5,1 кОм ± 10 %. От 0,28 до 0,61 В — ток по умолчанию, от 0,75 до 1,16 В — 1,5 А, от 1,37 до 2,04 В — 3 А. С Rp к 5 В получается 0,42 В при 56 кОм, 0,94 В при 22 кОм и 1,69 В при 10 кОм.Напряжение на CC потребителя, Rd = 5,1 кОм ± 10 %по умолчанию0,28–0,61 В1,5 А0,75–1,16 В3 А1,37–2,04 В00,5 В1,0 В1,5 В2,0 ВRp 56 кОм0,42 ВRp 22 кОм0,94 ВRp 10 кОм1,69 В
Напряжение на CC потребителя и объявленный ток по табл. 4-36 спецификации Type-C. Треугольники — что даёт Rp к 5 В вместе с Rd 5,1 кОм.

Пример: зарядка с Rp = 22 кОм к 5 В. На CC потребителя 5⋅5,1/(22+5,1)≈0,945 \cdot 5{,}1 / (22 + 5{,}1) \approx 0{,}94 В — диапазон 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.

Мощность источника EPR28 В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 SpeedLow SpeedГде встречается
JD+ выше D−D− выше D+покой шины (Idle)
KD− выше D+D+ выше D−начало пакета, сигнал пробуждения
SE0обе линии ниже 0,8 Вто жеконец пакета, сброс, отключение
SE1обе линии высокието жепередатчик не должен его создавать

Состояния J и K у Low Speed инвертированы относительно Full Speed — смысл задаёт тот вариант подтяжки, с которым подключилось устройство. Данные кодируются NRZI: ноль — смена состояния J на K или обратно, единица — состояние сохраняется. Длинная серия единиц оставила бы линию без переходов, и приёмник потерял бы синхронизацию, поэтому после шести единиц подряд передатчик вставляет ноль (bit stuffing), а приёмник его выбрасывает.

Вставка бита и кодирование NRZI в USB 2.0 Full SpeedФрагмент пакета Full Speed. Данные 0, семь единиц и 0: после шести единиц подряд передатчик вставляет ноль. При кодировании NRZI ноль меняет состояние линии между J и K, единица оставляет его прежним, поэтому вставленный ноль гарантирует переход. Для Full Speed состояние J — D+ выше D−, K — D− выше D+. Пакет заканчивается сигналом EOP: две битовых длительности обе линии в нуле (SE0), затем J.ДанныеПосле вставкиСостояние линии0111111100111111010шесть единиц подрядвставлен 0KKKKKKKJJKSE0JD+D−EOP: SE0, SE0, J0 — смена J и K, 1 — состояние сохраняетсяпокой — J
Фрагмент пакета Full Speed: после шести единиц вставлен ноль, NRZI превращает нули в смену состояния линии, пакет заканчивает EOP — два бита SE0 и J.

Каждый пакет начинается полем синхронизации 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−. Хаб видит, какая линия поднялась, и узнаёт и о подключении, и о скорости.

Подтягивающие резисторы USB 2.0 и определение скорости устройстваНисходящий порт хоста или хаба подтягивает D+ и D− к земле резисторами по 15 кОм. Устройство Full Speed или High Speed подтягивает D+ к 3,3 В резистором 1,5 кОм, устройство Low Speed — D−. В покое на подтянутой линии около 3,0 В, на другой — около нуля; по тому, какая линия поднялась, хаб узнаёт о подключении и скорости. Устройство High Speed после обмена сигналами chirp отключает подтяжку и включает оконечные резисторы 45 Ом.Full Speed и High Speed: подтяжка 1,5 кОм на D+Хост или хабнисходящий портУстройство Full Speedвосходящий портD+D−кабель: витая пара 90 ОмR115 кОмR215 кОм+3,3 ВR31,5 кОмв покое D+ ≈ 3,0 В, D− ≈ 0High Speed: после chirp R3 отключается,линии нагружены на 45 Ом с обеих сторонLow Speed: подтяжка 1,5 кОм на D−Хост или хабнисходящий портУстройство Low Speedвосходящий портD+D−кабель: витая пара 90 ОмR115 кОмR215 кОм+3,3 ВR31,5 кОмв покое D− ≈ 3,0 В, D+ ≈ 0
Подтяжки USB 2.0: 15 кОм на обеих линиях у хоста или хаба и 1,5 кОм к 3,3 В у устройства — на D+ для Full и High Speed, на D− для Low Speed.

Напряжение на подтянутой линии в покое — делитель из 1,5 кОм и 15 кОм:

UD+=3,3 В⋅1515+1,5=3,0 ВU_{D+} = 3{,}3\ \text{В} \cdot \frac{15}{15 + 1{,}5} = 3{,}0\ \text{В}

Спецификация требует от свободной линии в покое 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):

  1. Устройство видит SE0 и отвечает сигналом chirp K: направляет ток в линию D− не меньше чем на 1 мс, и этот chirp должен закончиться не позже 7 мс от начала сброса.
  2. Хаб High Speed замечает chirp и отвечает чередованием chirp K и chirp J длительностью по 40–60 мкс.
  3. Увидев последовательность K-J-K-J-K-J, устройство не позже чем через 500 мкс отключает подтяжку 1,5 кОм и включает оконечные резисторы 45 Ом — связь переходит на 480 Мбит/с.
  4. Если хаб не ответил — например, это хаб 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) он идёт так:

  1. Подключение. Подтяжка поднимает D+ или D−, хаб замечает это и сообщает хосту. Устройство находится в состоянии Powered.
  2. Сброс. Хост ждёт не меньше 100 мс, пока устройство вставлено до конца и питание установилось, и сбрасывает порт — SE0 не меньше 10 мс. Во время сброса устройство и хаб договариваются о High Speed. После сброса устройство в состоянии Default отвечает по адресу 0 и берёт не больше 100 мА (150 мА у USB 3.x).
  3. Первый дескриптор. Хост читает дескриптор устройства и узнаёт размер пакета нулевой точки: 8, 16, 32 или 64 байта у Full Speed, 8 у Low Speed, 64 у High Speed.
  4. Адрес. Запросом SET_ADDRESS хост назначает устройству адрес от 1 до 127. На ответ у устройства 50 мс, на переход к новому адресу — ещё 2 мс.
  5. Описание. Хост читает полный дескриптор устройства с идентификаторами VID и PID, дескриптор конфигурации с интерфейсами и конечными точками, строки с названием производителя, изделия и серийным номером.
  6. Конфигурация. По VID, PID и классам интерфейсов система выбирает драйвер, и хост выполняет SET_CONFIGURATION. Устройство переходит в состояние Configured и может брать ток, заявленный в bMaxPower.

Если на шине больше 3 мс тишины, устройство начинает переход в приостановку, а не позже чем через 10 мс тишины должно брать не больше тока приостановки. Чтобы этого не случилось во время работы, хост каждую миллисекунду шлёт пакет начала кадра SOF, а порт с устройством Low Speed в каждом кадре выдаёт ему короткий сигнал keep-alive.

Классы устройств

Класс говорит системе, каким стандартным драйвером обслуживать интерфейс. Коды классов назначает USB-IF:

КлассКодДля чегоКонечные точки
Audio01hзвуковые карты, микрофоныизохронные
CDC (Communications)02h и 0Ah для данныхвиртуальный COM-порт (ACM), модемы, сетевые адаптерыточка уведомлений, обычно прерывание, и пара точек данных, обычно bulk
HID03hклавиатуры, мыши, джойстики, устройства с обменом короткими отчётамиinterrupt IN обязательна, interrupt OUT — по желанию
Mass Storage08hфлешки, картридерыпара bulk; команда — в обёртке CBW из 31 байта
Hub09hхабыточка прерывания для сообщений об изменениях на портах
Vendor SpecificFFhвсё нестандартноелюбые, драйвер — от производителя или 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Контактный разрядВоздушный разрядПиковый ток
12 кВ2 кВ7,5 А
24 кВ4 кВ15 А
36 кВ8 кВ22,5 А
48 кВ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 к гнезду USB Type-C с питанием от шиныГнездо USB Type-C для USB 2.0: выводы CC1 и CC2 через отдельные резисторы 5,1 кОм соединены с землёй, контакты D+ (A6 и B6) и D− (A7 и B7) соединены попарно. У гнезда стоит сборка защиты USBLC6-2SC6: линии D+ и D− проходят через её выводы 1–6 и 3–4, вывод 5 — к VBUS, вывод 2 — к земле. VBUS с конденсатором 4,7 мкФ питает стабилизатор 3,3 В, от которого работает STM32F103. D+ подключена к PA12 и подтянута к 3,3 В резистором 1,5 кОм, D− — к PA11; последовательные резисторы не нужны.J1USB Type-Cгнездо USB 2.0VBUSA4, A9, B4, B9CC1A5CC2B5D+A6, B6D−A7, B7GNDA1, A12, B1, B12C14,7 мкФR15,1 кОмR25,1 кОмD1USBLC6-2SC6136452DA1LDO 3,3 В+3,3 В+3,3 ВR31,5 кОмPA12 (USB_DP)PA11 (USB_DM)3332VDDSTM32F103DD1, корпус LQFP48VSS
STM32F103 с питанием от USB и гнездом Type-C: два резистора 5,1 кОм на CC, контакты A6–B6 и A7–B7 соединены у гнезда, USBLC6-2SC6 у разъёма, подтяжка 1,5 кОм на PA12. Выводы SBU не подключены, конденсаторы стабилизатора и кварц не показаны.

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

Как отладить

  1. Мультиметр, устройство подключено к хосту. VBUS — 4,75–5,5 В на разъёме хоста, на входе устройства — не меньше 4,4 В. У устройства Full Speed в покое на D+ около 3,0 В, на D− около нуля, у Low Speed — наоборот. Если на подтянутой линии меньше 2,7 В, проблема в подтяжке.
  2. Type-C без USB PD. При подключённом источнике напряжение на выводе CC потребителя показывает объявленный ток: около 0,42, 0,94 или 1,69 В при Rp к 5 В. Около нуля на обоих выводах — источник не подтягивает CC или провод CC оборван.
  3. Система. В Linux lsusb -v покажет дескрипторы, VID, PID и заявленный ток, а dmesg — ход перечисления и ошибки. В Windows то же видно в диспетчере устройств: «ИД оборудования» в свойствах устройства содержит VID и PID.
  4. Анализатор. Логический анализатор с декодером 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.

Источники

  1. 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
  2. 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
  3. USB-IF. Universal Serial Bus 3.2 Specification, Revision 1.1, June 2022 — разд. 11.4 — единица нагрузки 150 мА, падение напряжения, табл. 11-2
  4. 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
  5. 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
  6. 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 кбит/с
  7. USB-IF. Battery Charging Specification, Revision 1.2, with errata, March 15, 2012 — разд. 1.4 — SDP, CDP, DCP; разд. 3.2 — обнаружение зарядного порта; табл. 5-1–5-3
  8. USB-IF. Language Usage Guidelines: USB 3.1, USB 3.2, USB4, USB Data Performance (2024)
  9. 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
  10. USB-IF. Getting a Vendor ID
  11. STMicroelectronics. AN4879: Introduction to USB hardware and PCB guidelines using STM32 MCUs, Rev 10, January 2025
  12. STMicroelectronics. USBLC6-2: Very low capacitance ESD protection, DS4260 Rev 7, December 2021
  13. STMicroelectronics. STM32F103x8, STM32F103xB datasheet, DS5319 Rev 19, September 2023 — разд. 2.3 — USB, табл. 5 — выводы, табл. 45 — электрические параметры USB
  14. Texas Instruments. SPRAAR7J: High-Speed Interface Layout Guidelines, 2018, ред. 2023
  15. Microchip. AN1953: Introduction to USB Type-C, DS00001953A, 2015
  16. Atmel (Microchip). ATmega16U4/ATmega32U4 datasheet, Atmel-7766J, 04/2016 — гл. 21 — контроллер USB, типовые схемы, рекомендации по разводке
  17. Objective Development. V-USB: virtual USB port for AVR microcontrollers — usbdrv/Readme.txt, circuits/Readme.txt, usbdrv/USB-IDs-for-free.txt
  18. WCH. CH340 Datasheet, version 3C; Silicon Labs. CP2102/9 Data Sheet, Rev. 1.8; FTDI. FT232R Datasheet, FT_000053, version 2.16
  19. STM32-base. STM32F103C8T6 Blue Pill
  20. Linux kernel: drivers/usb/core/config.c, drivers/usb/serial — обработка bulk-точек у устройств Low Speed; идентификаторы VID:PID мостов USB–UART