Modem 2 CDC ACM 3 CDC NCM SS: разбираемся в интерфейсах USB-модема

Вывод команды lsusb или usb-devices в Linux, где у USB-модема видны строки вида «2 CDC ACM», «3 CDC NCM» и «SS», — это не ошибка, а описание режима работы устройства: модем представляется системе сразу несколькими логическими интерфейсами. Каждая из этих аббревиатур обозначает конкретный класс USB-устройства, и понимание их роли — ключ к тому, чтобы модем определялся корректно и выдавал интернет.

Такая картина типична для современных 4G/LTE-модемов Huawei, ZTE и аналогичных устройств, которые после переключения из режима «виртуальный CD-ROM» переходят в композитный режим с несколькими интерфейсами. Ниже разберём, что означает каждая запись, как проверить, что система видит модем правильно, и что делать, если нужный интерфейс не поднялся.

Что означают CDC ACM, CDC NCM и SS в описании модема

Аббревиатура CDC расшифровывается как Communications Device Class — стандартный класс USB-устройств связи. Внутри него существует несколько подклассов, и модем может экспонировать сразу несколько из них одновременно.

  • 📟 CDC ACM (Abstract Control Model) — эмуляция последовательного порта. Через него модем принимает AT-команды, а в системе появляются устройства вида /dev/ttyUSB* или /dev/ttyACM*.
  • 🌐 CDC NCM (Network Control Model) — сетевой интерфейс. Модем выглядит как виртуальная сетевая карта (например, wwan0 или usb0), и данные передаются через неё, а не через PPP.
  • SS (SuperSpeed) — указание на работу в режиме USB 3.x. Это не отдельный интерфейс, а характеристика скоростного режима подключения устройства.
  • 💾 Дополнительно часто встречается Mass Storage — виртуальный CD-ROM с драйверами или microSD-картридер.

Цифры перед названиями классов в выводе usb-devices — это номера интерфейсов (interface numbers) внутри USB-конфигурации. Один физический модем может содержать 5–8 таких интерфейсов, и это нормально.

Как проверить, как система видит модем

Первый шаг диагностики — посмотреть, определилось ли устройство и какие драйверы привязались к его интерфейсам. Для этого используются стандартные утилиты, входящие в большинство дистрибутивов Linux.

lsusb

usb-devices | grep -A 8 -i modem

ls /dev/ttyUSB* /dev/ttyACM* 2>/dev/null

ip link show

В выводе usb-devices обратите внимание на строки Driver=. Для ACM-интерфейсов там должно быть cdc_acm или option, для NCM — cdc_ncm (вместе со вспомогательным cdc_wdm). Если вместо драйвера указано none, интерфейс не подхвачен системой, и работать он не будет.

Дополнительно проверьте появление сетевого интерфейса командой ip link: NCM-интерфейс обычно отображается как wwan0, usb0 или похожее имя. Его наличие означает, что модем готов к настройке соединения.

Почему модем определяется как CD-ROM, а не как модем

Многие USB-модемы при первом подключении включаются в режиме виртуального CD-ROM — так задумано для автоматической установки драйверов в Windows. В этом режиме интерфейсов CDC ACM и NCM в системе нет вообще, и интернет через устройство получить невозможно.

Переключение в рабочий режим выполняет утилита usb_modeswitch (в большинстве дистрибутивов она установлена и срабатывает автоматически через правила udev). Если автопереключение не произошло, проверьте следующее:

  • 🔍 Установлен ли пакет usb-modeswitch и usb-modeswitch-data в вашем дистрибутиве.
  • 🔌 Попробуйте переподключить модем в другой порт, желательно напрямую, без USB-хаба.
  • 📋 Изучите вывод dmesg на предмет ошибок переключения режима.
  • 🆔 Сравните VID:PID устройства в lsusb с базой usb_modeswitch — для неизвестных идентификаторов правило переключения может отсутствовать.

⚠️ Внимание: ручное переключение режима командами usb_modeswitch выполняйте только с параметрами, соответствующими VID:PID именно вашего устройства. Параметры для чужой модели могут не сработать или перевести модем в непредвиденное состояние. Точные значения ищите в базе usb-modeswitch-data или документации к устройству.

📊 В каком режиме определяется ваш USB-модем в Linux?
Только CD-ROM / Mass Storage
CDC ACM (ttyUSB/ttyACM), но без сети
CDC NCM + сетевой интерфейс, всё работает
Модем вообще не определяется

Настройка подключения через CDC NCM

Если NCM-интерфейс поднялся и сетевая карта появилась, подключение обычно настраивается через NetworkManager и ModemManager. Эти службы автоматически обнаруживают модем, отправляют нужные AT-команды через ACM-порт и активируют передачу данных через NCM.

Проверьте, что ModemManager видит устройство:

mmcli -L

mmcli -m 0

Вторая команда выводит подробный статус модема: оператора, уровень сигнала, состояние регистрации в сети. Если модем в списке есть, создать соединение можно через графический апплет NetworkManager (тип соединения — «Мобильная широкополосная связь») или командой nmcli. APN уточняйте у своего оператора — именно неправильный APN чаще всего мешает установке соединения при исправном модеме.

☑️ Проверка готовности модема к работе

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

После активации соединения сетевому интерфейсу обычно назначается адрес автоматически. Проверить наличие адреса и маршрутов можно командами ip addr show wwan0 и ip route.

Типичные проблемы и их диагностика

Что делать, если часть цепочки работает, а интернета нет? Симптомы обычно указывают на конкретное звено.

СимптомВероятная причинаЧто проверить
Модем виден только как CD-ROMНе сработало переключение режимаusb-modeswitch, правила udev, вывод dmesg
ttyUSB есть, сетевого интерфейса нетДрайвер cdc_ncm не привязалсяСтроки Driver= в usb-devices, lsmod | grep cdc
Интерфейс есть, соединение не устанавливаетсяНеверный APN или нет регистрации в сетиmmcli -m 0 — статус регистрации, настройки APN
Соединение есть, но низкая скоростьМодем работает не в SS-режиме или слабый сигналlsusb -t (скорость порта), уровень сигнала в mmcli
Модем отваливается периодическиЭнергосбережение USB отключает портНастройки autosuspend для USB в системе

Отдельно стоит ситуация, когда модем физически подключён к порту USB 3.x, но в lsusb -t виден на скорости 480M (USB 2.0). Возможные причины — длинный или некачественный кабель, хаб без поддержки SuperSpeed, особенности порта. Для стабильной работы подключайте модем напрямую в порт компьютера.

⚠️ Внимание: не изменяйте прошивку модема и не отправляйте ему AT-команды смены композиции интерфейсов без точной документации на вашу модель. Некоторые команды необратимо меняют конфигурацию устройства, и вернуть исходный режим бывает сложно.

Зачем модему одновременно ACM и NCM

ACM-порты используются для служебного обмена: отправки AT-команд, получения уровня сигнала, SMS, USSD-запросов. NCM-интерфейс — это «труба» для интернет-трафика, работающая эффективнее старого PPP через последовательный порт. Разделение ролей позволяет управлять модемом и передавать данные параллельно, без конфликтов.

Работа с AT-командами через ACM-порт

Через /dev/ttyUSB* или /dev/ttyACM* можно вручную опросить модем терминальной программой, например minicom или socat. Базовые команды вроде AT (проверка связи), ATI (информация об устройстве) и AT+CSQ (уровень сигнала) стандартизированы и безопасны — они только читают данные.

Имейте в виду: если порт уже занят ModemManager, терминал не сможет открыть его одновременно. Либо остановите ModemManager на время отладки, либо используйте его собственный интерфейс mmcli, который покрывает большинство задач без прямого доступа к порту.

FAQ: частые вопросы

Что значит «SS» рядом с модемом в выводе lsusb -t?

Это обозначение режима SuperSpeed — модем подключён по USB 3.x. Если вместо SS вы видите 480M, устройство работает в режиме USB 2.0, что может ограничивать скорость на быстрых LTE-подключениях.

Нужны ли отдельные драйверы для CDC NCM в Linux?

Обычно нет: модули cdc_ncm, cdc_wdm и cdc_acm входят в состав ядра Linux и загружаются автоматически. Проверить их наличие можно командой lsmod | grep cdc.

Модем определяется, но ModemManager его не видит. Что делать?

Проверьте, запущена ли служба (systemctl status ModemManager), и перезапустите её. Также убедитесь, что интерфейсы модема заняты правильными драйверами — ModemManager работает только с корректно инициализированными портами.

Можно ли использовать модем без ModemManager?

Да, возможны ручные варианты: отправка AT-команд через терминал и настройка сетевого интерфейса вручную. Однако этот путь сильно зависит от модели модема, и универсальной инструкции не существует — ориентируйтесь на документацию конкретного устройства.

Почему у модема несколько ttyUSB-портов, какой из них использовать?

Модемы часто экспонируют несколько последовательных портов с разным назначением: AT-команды, диагностика, GPS. Какой из портов отвечает на AT-команды, проще всего проверить опросом через mmcli или по документации модели.