Если в диспетчере устройств или в выводе утилиты диагностики вы видите строку USB Class 02 Subclass 02 Protocol 01, перед вами устройство класса CDC (Communications Device Class) с подклассом ACM (Abstract Control Model) — проще говоря, виртуальный COM-порт через USB. Именно так определяются 3G/4G-модемы, платы Arduino с штатным USB-стеком, мобильные телефоны в режиме модема и многие программаторы.
Эта комбинация кодов — не ошибка, а штатный идентификатор из спецификации USB. Однако пользователи чаще всего сталкиваются с ней, когда устройство определяется системой, но порт не появляется или драйвер не устанавливается. Разберём, что означают эти цифры, какие устройства их используют и как устранить типичные проблемы.
Расшифровка кодов Class 02, Subclass 02, Protocol 01
Каждое USB-устройство при подключении сообщает хосту набор дескрипторов, среди которых — коды класса, подкласса и протокола. Операционная система по ним подбирает подходящий драйвер.
- 🔌 Class 02h — Communications Device Class, устройства связи: модемы, сетевые адаптеры, телефоны.
- 📡 Subclass 02h — Abstract Control Model, модель управления, исторически описывающая поведение классического модема.
- ⚙️ Protocol 01h — протокол AT-команд (набор команд Hayes), то есть управление устройством текстовыми командами через последовательный канал.
- 💾 Вместе эта тройка описывает CDC ACM — стандартный виртуальный последовательный порт поверх USB.
Важный нюанс: те же коды могут быть указаны не в дескрипторе устройства, а в дескрипторе интерфейса. Сложные составные устройства (например, смартфон, который одновременно является модемом и накопителем) объявляют несколько интерфейсов с разными классами.
Class 02 / Subclass 02 / Protocol 01 = CDC ACM, стандартный виртуальный COM-порт через USB с управлением AT-командами.
Какие устройства используют CDC ACM
Список техники, которая определяется с этой комбинацией кодов, шире, чем кажется. Проверьте, нет ли среди подключённого оборудования одного из таких кандидатов.
- 📱 Мобильные телефоны и смартфоны в режиме модема или отладки.
- 🛰️ USB-модемы 3G/4G/LTE, включая «свистки» операторов связи.
- 🔧 Платы разработки: Arduino Leonardo, Micro, Due, платы на STM32 и ESP32-S2/S3 с нативным USB.
- 🖨️ Программаторы, отладчики и промышленные контроллеры с последовательным интерфейсом.
- 📟 Кассовое и банковское оборудование, сканеры, работающие через виртуальный COM-порт.
Отличить CDC ACM от переходников USB-UART на чипах FTDI, CH340, CP210x просто: переходники используют vendor-specific класс FFh и требуют фирменного драйвера, тогда как CDC ACM — открытый стандарт, поддержка которого встроена в большинство ОС.
Как проверить идентификатор устройства в системе
В Windows откройте Диспетчер устройств, найдите устройство, перейдите на вкладку «Сведения» и выберите свойство «ИД оборудования» или «Класс устройства». Там будут строки вида USB\Class_02&SubClass_02&Prot_01.
В Linux достаточно одной команды в терминале:
lsusb -v | grep -A 5 "bDeviceClass"
Также полезен вывод dmesg сразу после подключения: ядро сообщит, какой драйвер привязан к устройству. Для CDC ACM в Linux это модуль cdc_acm, создающий узел /dev/ttyACM0 (или с другим номером).
В Linux проверьте, загружен ли модуль: команда lsmod | grep cdc_acm. Если вывод пуст — выполните sudo modprobe cdc_acm и переподключите устройство.
Установка драйвера в Windows и Linux
В современных версиях Windows (начиная с Windows 10) драйвер usbser.sys для CDC ACM встроен в систему и подхватывается автоматически — устройство появляется как COM-порт без дополнительных действий. В старых версиях, например Windows 7, мог потребоваться INF-файл от производителя, который просто «привязывает» стандартный драйвер к конкретному VID/PID устройства.
⚠️ Внимание: не устанавливайте «драйверы CDC ACM» со сторонних сайтов-каталогов. Для этого класса нужен только штатный системный драйвер или INF-файл от производителя вашего конкретного устройства — загруженные из неизвестных источников установщики часто содержат вредоносное ПО.
В Linux и macOS драйвер входит в состав системы, установка не требуется. Если порт не появляется, проблема почти всегда в правах доступа или в самом устройстве, а не в отсутствии драйвера.
☑️ Диагностика CDC ACM устройства
Типичные проблемы и их решение
Самая частая жалоба — устройство определяется, но COM-порт не появляется либо появляется и пропадает. Причины обычно лежат в одной из нескольких областей.
| Симптом | Вероятная причина | Что проверить |
|---|---|---|
| Порт не появляется вовсе | Кабель только для зарядки, без линий данных | Заменить кабель на заведомо полноценный |
| Жёлтый восклицательный знак | Не привязан системный драйвер | Обновить драйвер вручную, указав usbser |
| Порт появляется и исчезает | Нестабильное питание, дребезг контакта | Другой порт, хаб с питанием, другой кабель |
| В Linux нет /dev/ttyACM0 | Не загружен модуль cdc_acm | modprobe cdc_acm, смотреть dmesg |
| Порт есть, но нет ответа на AT-команды | Неверная скорость или занятость порта другой программой | Закрыть лишние терминалы, подобрать baud rate |
Отдельный случай — платы Arduino Leonardo и Micro перезагружаются при открытии порта на скорости 1200 бод: это штатный механизм входа в bootloader, а не неисправность. Если «пропадающий» порт наблюдается именно на такой плате, проверьте, не открывает ли какая-то программа порт с этой скоростью.
Почему устройство видно, но не отвечает на AT-команды
Виртуальный COM-порт CDC ACM не имеет «жёсткой» скорости, как аппаратный UART, — параметр baud rate передаётся устройству через управляющие запросы, и прошивка может его игнорировать. Однако само устройство может требовать определённую скорость или аппаратное управление потоком (DTR/RTS). Попробуйте в терминальной программе включить DTR — многие прошивки начинают отвечать только после его установки.
CDC ACM против других USB-классов
Понимание отличий помогает не перепутать проблему. Если ваше устройство определилось с другим классом, инструкции из этой статьи могут не подойти.
- 🧷 Class 02 / Subclass 06 / Protocol 00 — CDC ECM, сетевой адаптер Ethernet через USB, а не COM-порт.
- 🌐 Class 02 / Subclass 0D — CDC NCM, более современный вариант сетевого интерфейса.
- 💽 Class 08 — Mass Storage, флеш-накопитель; модемы часто сначала определяются именно так, пока не сработает переключение режима.
- 🔑 Class FF — vendor-specific, нужен фирменный драйвер производителя чипа.
Особого упоминания заслуживают USB-модемы: многие из них при первом подключении представляются CD-ROM с драйверами (класс Mass Storage), и только после установки переключаются в режим CDC. В Linux это переключение выполняет утилита usb_modeswitch — если модем «застрял» в режиме накопителя, проверьте её работу.
⚠️ Внимание: не перепрошивайте модем или плату ради «исправления» идентификатора класса. Коды Class/Subclass/Protocol зашиты в дескрипторах прошивки устройства, и неудачная прошивка способна превратить устройство в нерабочее состояние. Сначала исчерпайте обратимые проверки: кабель, порт, драйвер, права доступа.
Чтобы узнать номер COM-порта в Windows без диспетчера устройств, выполните в командной строке: mode — система перечислит все доступные последовательные порты.
Работа с устройством через терминал
После появления порта обмен данными ведётся через любую терминальную программу: PuTTY, minicom, screen или монитор порта в Arduino IDE. Для модема можно отправить базовую AT-команду и проверить ответ.
screen /dev/ttyACM0 115200
Команда AT должна вернуть OK, а ATI — сведения о модели устройства. Если ответа нет — проверьте, не занят ли порт другим процессом (в Linux это видно через lsof /dev/ttyACM0), и включено ли аппаратное управление потоком в настройках терминала.
В Windows номер порта выше COM9 иногда вызывает проблемы в старом ПО. Номер можно вручную изменить в свойствах порта в диспетчере устройств, на вкладке параметров порта — кнопка «Дополнительно».
В 9 из 10 случаев «проблема с Class 02 Subclass 02» решается заменой кабеля, установкой штатного драйвера usbser или добавлением пользователя в группу dialout — без прошивок и стороннего софта.
Часто задаваемые вопросы
USB Class 02 Subclass 02 Protocol 01 — это вирус или шпионское устройство?
Нет, это стандартный идентификатор из официальной спецификации USB. Он лишь говорит, что устройство работает как виртуальный последовательный порт. Однако если такое устройство появилось в системе без вашего ведома и вы не подключали ничего нового — стоит проверить список подключённого оборудования.
Почему в Windows 7 устройство требует драйвер, а в Windows 10/11 — нет?
Полноценная автоматическая привязка драйвера usbser.sys к произвольным CDC ACM устройствам появилась в более новых версиях Windows. В старых системах требовался INF-файл от производителя, который лишь указывает системе использовать встроенный драйвер для конкретных VID/PID.
Чем CDC ACM отличается от переходника USB-TTL на CH340?
CDC ACM — открытый стандарт USB-IF с драйвером в составе ОС. CH340, FTDI и CP210x используют vendor-specific класс и собственные драйверы. С точки зрения прикладной программы оба выглядят как COM-порт, но настройка драйверов различается.
Устройство определяется, но порт называется не COM, а ttyUSB — это нормально?
Если в Linux появился /dev/ttyUSB0 вместо /dev/ttyACM0, значит устройство обслуживается драйвером usbserial (например, для чипов FTDI/CH340), а не cdc_acm. Это другое семейство устройств, но для прикладных программ разницы практически нет.
Можно ли изменить Class/Subclass/Protocol в своём устройстве?
Эти коды задаются в дескрипторах прошивки устройства. Для собственных разработок на микроконтроллерах с USB-стеком их можно изменить в исходном коде прошивки, но для готовых фирменных устройств вмешательство в прошивку рискованно и лишает гарантии.