USB — это не «просто последовательный порт», а полноценная шина с хостом, устройствами, перечислением и протоколом. Поэтому «подключить USB к микроконтроллеру» сложнее, чем кажется.
Что нужно, чтобы устройство заработало: контроллер USB (в ESP32-S3, STM32, RP2040 он есть), правильная разводка линий D+ и D− (это дифференциальная пара, 90 Ом), питание и согласование.
Как это работает по шагам: хост видит подключение по подтяжке D+ к 3.3 В, сбрасывает устройство, читает дескрипторы (кто ты, какой класс, какие конечные точки), загружает драйвер. Только после этого начинается обмен.
Классы, которые нужны чаще всего: CDC (виртуальный COM-порт), HID (клавиатура/мышь), MSC (флешка), DFU (прошивка).
Практические варианты:
— USB-UART мост (CH340, CP2102, FT232): микроконтроллер общается по UART, мост делает USB. Просто, дёшево, медленно.
— Нативный USB: RP2040, STM32F4, ESP32-S3. Быстрее, можно HID/MSC, но нужен стек и аккуратная разводка.
— USB Host: читать флешки и клавиатуры. Требует отдельного контроллера (MAX3421, CH376) или мощного МК.
Типичные грабли: неправильная разводка D+/D− (перепутаны), нет резисторов 22–27 Ом последовательно, плохая земля, нет конденсатора по питанию, «дешёвый кабель только для зарядки» (без линий данных).
И ещё: USB не даёт гарантированной задержки. Для точной синхронизации лучше Ethernet или отдельный триггер.
USB нужен почти в каждом устройстве, но это не UART: без понимания перечисления ничего не работает.
Посмотри на свою плату: есть ли на ней отдельная микросхема USB-UART? Если да — узнай, какая (CH340/CP2102), и поставь драйвер.
Проверь себя
Почему дешёвый USB-кабель может не работать для прошивки?
В кабеле «только для зарядки» нет линий данных D+/D−. Питание есть, обмена нет — компьютер не видит устройство.
-
Wikipedia: USB
USB: уровни и протокол
-
Wikipedia: Universal asynchronous receiver-transmitter
отличие от UART