Если в диспетчере устройств или в выводе утилиты диагностики вы видите строку 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 — открытый стандарт, поддержка которого встроена в большинство ОС.

📊 С каким устройством CDC ACM вы столкнулись?
Arduino или плата разработки
USB-модем
Телефон в режиме модема
Промышленное/торговое оборудование

Как проверить идентификатор устройства в системе

В 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 устройства

Выполнено: 0 / 5

Типичные проблемы и их решение

Самая частая жалоба — устройство определяется, но COM-порт не появляется либо появляется и пропадает. Причины обычно лежат в одной из нескольких областей.

СимптомВероятная причинаЧто проверить
Порт не появляется вовсеКабель только для зарядки, без линий данныхЗаменить кабель на заведомо полноценный
Жёлтый восклицательный знакНе привязан системный драйверОбновить драйвер вручную, указав usbser
Порт появляется и исчезаетНестабильное питание, дребезг контактаДругой порт, хаб с питанием, другой кабель
В Linux нет /dev/ttyACM0Не загружен модуль cdc_acmmodprobe 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-стеком их можно изменить в исходном коде прошивки, но для готовых фирменных устройств вмешательство в прошивку рискованно и лишает гарантии.