Модем Huawei E3331 идентифицируется в системе по паре идентификаторов VID 12d1 и PID, которые меняются в зависимости от активного режима работы — HiLink или Stick. При первом подключении к USB-порту устройство часто представляется как виртуальный CD-ROM с драйверами, а после переключения режима (mode switching) появляются сетевые интерфейсы или COM-порты. Понимание этого механизма критично для настройки под любым ОС и роутером.

Процесс определения запускается ядром ОС сразу после подачи питания на USB-шину. Хост-контроллер считывает дескрипторы устройства, сравнивает Vendor ID (12d1 для Huawei) и Product ID с внутренней базой драйверов. Если подходящий драйвер найден — устройство привязывается к нему; если нет — оно остается в состоянии «Unknown Device» или висит как массовый накопитель. В Windows это видно в «Диспетчере устройств», в Linux — через lsusb и dmesg.

Режимы работы и их влияние на определение

Главная особенность Huawei E3331 — наличие двух кардинально разных прошивок: HiLink (веб-интерфейс, виртуальная Ethernet-карта) и Stick (классический модем с AT-командами, RAS/NDIS). Режим прошивки жестко задает набор PID, под которыми модем «светится» на шине. Перепрошивка с HiLink на Stick и обратно возможна, но требует разблокировки загрузчика и смены PID через сервисные команды.

В режиме HiLink модем после переключения выдает PID 1f01 (или 14db для старых ревизий) и поднимает виртуальный сетевой адаптер CDC Ethernet или RNDIS. Система видит его как отдельную сеть ethX / enx... с DHCP-сервером 192.168.8.1. В режиме Stick появляются PID 1506, 1507 или 155b, создаются ttyUSB0..2 (Linux) или COM-порты (Windows) для PPP/AT-управления.

Смена PID происходит программно через usb_modeswitch (Linux) или драйверную оболочку (Windows). На момент переключения модем физически отключается от шины и подключается заново с новыми дескрипторами. Именно поэтому в логах можно увидеть последовательность: 12d1:14fe (CD-ROM) -> 12d1:1f01 (HiLink) или 12d1:1506 (Stick).

💡

Режим прошивки (HiLink/Stick) полностью определяет набор PID и тип интерфейсов, которые увидит операционная система.

Идентификация в Windows: Диспетчер устройств и реестр

В Windows 10/11 процесс определения обычно автоматизирован: подключаете модем, система качает драйверы через Windows Update. В «Диспетчере устройств» (devmgmt.msc) ищите разделы «Сетевые адаптеры» (HiLink) или «Порты (COM и LPT)» / «Модемы» (Stick). Если устройство висит в «Других устройствах» с желтым треугольником — драйвер не найден или подпись не прошла проверку.

Для принудительной установки драйвера Stick-режима часто помогает ручное указание .inf-файла из пакета Huawei Data Card Driver. В реестре путь HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB\VID_12D1&PID_XXXX хранит историю подключений. Удаление ветки заставляет систему переопределить модем при следующем втыкании.

Частая ошибка — конфликт драйверов Mobile Partner / HiLink Assistant. Старые версии устанавливают фильтрующие драйверы верхнего уровня, блокирующие стандартные usbser.sys / ncm.sys. Лечится полным удалением софта Huawei и очисткой UpperFilters/LowerFilters в реестре класса {4d36e96d-e325-11ce-bfc1-08002be10318}.

⚠️ Внимание: Удаление фильтров реестра может сломать работу других USB-модемов. Создайте точку восстановления перед правкой.

Определение в Linux: lsusb, dmesg и usb_modeswitch

В Linux (Ubuntu, Debian, Arch, OpenWrt/Keenetic) диагностика начинается с команды lsusb -t. Она показывает дерево USB с ID устройств на каждом этапе. Типичный вывод для E3331h (HiLink) до переключения: ID 12d1:14fe Huawei Technologies Co., Ltd. Modem (Mass Storage Mode). После срабатывания usb_modeswitch: ID 12d1:1f01 Huawei Technologies Co., Ltd. E3331h (HiLink mode).

Правила переключения лежат в /usr/share/usb_modeswitch/configPack.tar.gz или /etc/usb_modeswitch.d/. Для E3331 часто срабатывает стандартное правило 12d1:14fe -> 12d1:1f01 с сообщением 55534243123456780000000000000011062000000100000000000000000000. Если правила нет — создайте файл /etc/usb_modeswitch.d/12d1:14fe с содержимым:

TargetVendor=0x12d1

TargetProductList="1f01,14db,1506"

HuaweiNewMode=1

После переключения поднимается интерфейс eth1 / enx001e101f0000 (HiLink) или появляются /dev/ttyUSB0, /dev/ttyUSB1, /dev/ttyUSB2 (Stick). ModemManager и NetworkManager автоматически подхватывают их, если не отключены. Для OpenWrt нужен пакет usb-modeswitch и kmod-usb-net-huawei-cdc-ncm (HiLink) или kmod-usb-serial-option (Stick).

☑️ Чек-лист диагностики определения в Linux

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

Работа с роутерами Keenetic, OpenWrt и AsusWrt

Роутеры на базе KeeneticOS определяют E3331 «из коробки» в обоих режимах. В веб-интерфейсе раздел «3G/4G модем» покажет модель, IMEI и текущий PID. Для HiLink-прошивки создается интерфейс UsbQmi0 или UsbNcm0, для Stick — UsbModem0 с PPP-профилем. Keenetic автоматически подтягивает APN от оператора по базе MCC/MNC.

В OpenWrt ситуация требует ручной настройки пакетов. Минимальный набор для HiLink: usb-modeswitch, kmod-usb-net-huawei-cdc-ncm, kmod-usb-net-cdc-ether. Для Stick: kmod-usb-serial-option, kmod-usb-serial-wwan, ppp, chat. После установки пакетов модем определится в logread -f сообщением cdc_ether 1-1:1.0 eth1: register 'cdc_ether' at usb-xhci-hcd.0.auto-1, CDC Ethernet Device.

На AsusWrt-Merlin поддержка HiLink реализована через модуль cdc_ether. Часто требуется включить JFFS и Entware для установки usb-modeswitch, если стандартный скрипт не срабатывает. В логе /tmp/syslog.log ищите строки usb_modeswitch: switching 12d1:14fe -> 12d1:1f01.

Проблемы с драйверами и принудительное переключение режимов

Если модем застрял в режиме CD-ROM (PID 14fe или 1446), значит, не сработал usb_modeswitch или Windows не установил драйвер переключателя. В Windows это лечится установкой Huawei Mobile Broadband Driver (файл ewser2k.inf для Stick, huawei_cdc_ncm.inf для HiLink). В Linux можно переключить вручную командой:

usb_modeswitch -v 12d1 -p 14fe -M "55534243123456780000000000000011062000000100000000000000000000" -W

Для смены прошивки с HiLink на Stick (или обратно) используется DC-Unlocker или Huawei Modem Terminal. Процесс: разблокировка загрузчика (код SIMLOCK или NCK), прошивка UPDATE.APP через режим FC=01 (Download Mode, зажим кнопки Reset при втыкании). После прошивки PID изменится навсегда до следующей перепрошивки.

⚠️ Внимание: Прошивка чужой ревизией (например, E3331s на E3331h) превратит модем в «кирпич». Восстановление возможно только через ISP-программатор (CH341A) по SPI-разъему на плате.
AT-команды для диагностики и переключения режимов

AT^SETPORT? — текущая конфигурация портов

AT^SETPORT="A1,A2;10,12,16,A1,A2" — конфиг для Stick (PCUI, NDIS, DIAG, CDROM, SD)

AT^SETPORT="FF;10,12,16,A2" — конфиг для HiLink (только NDIS, DIAG, без CDROM)

AT^RESET — перезагрузка модема для применения настроек

ATI — полная информация о прошивке (версия, дата, IMEI)

Программные инструменты для глубокой диагностики

Стандартные средства ОС часто не показывают полную картину. Huawei Modem Terminal (Windows/Linux/Wine) — де-факто стандарт для работы с AT-интерфейсом. Позволяет слать сырые команды, смотреть ответы OK/ERROR, мониторить сигнал (AT^CSNR, AT^SIG), читать/писать NVRAM. Работает только в Stick-режиме (нужен COM/ttyUSB).

DC-Unlocker Client — платная утилита для чтения кодов разблокировки, определения точной модели (E3331h vs E3331s vs E3331l), смены PID и прошивки. Бесплатная версия только показывает инфо: Model: E3331h, Firmware: 21.321.01.00.143, Dashboard version: UTPS21.005.11.10.143. Именно дашборд-версия определяет, будет ли модем работать в HiLink или Stick по умолчанию.

Для Linux-энтузиастов полезен ModemManager GUI (mmcli) и QMI/QCMAP инструменты (qmicli, uqmi) для HiLink-режима, где управление идет через QMI на /dev/cdc-wdm0, а не через AT-порт. Пример запроса статуса: qmicli -d /dev/cdc-wdm0 --nas-get-signal-strength.

Частые ошибки определения и их устранение

1. Модем не переключается из CD-ROM — отсутствует/битое правило usb_modeswitch, конфликт с uas (USB Attached SCSI) драйвером. Лечится добавлением usb-storage.quirks=12d1:14fe:u в параметры ядра (GRUB_CMDLINE_LINUX) или блэклистом modprobe.blacklist=uas.

2. В Windows 11 модем определяется как «Remote NDIS based Internet Sharing Device» но интернета нет — HiLink-режим, но не получен IP по DHCP. Проверьте ipconfig /renew на адаптере, зайдите на http://192.168.8.1, проверьте APN в профиле. Часто оператор выдает IP только на конкретный APN (например, internet.tele2.ru).

3. В Linux создается только ttyUSB0, нет ttyUSB1/2 — драйвер option не привязался к остальным интерфейсам. Проверьте dmesg | grep option. Часто помогает echo "12d1 1506" > /sys/bus/usb-serial/drivers/option1/new_id (подставьте свой PID).

💡

Всегда тестируйте модем на USB 2.0 порту (черный). Контроллеры USB 3.0 (синие) часто дают сбои питания и потерю дескрипторов на старых модемах категории Cat 4.

📊 В каком режиме вы используете Huawei E3331?
HiLink (веб-интерфейс, Ethernet/RNDIS)
Stick (PPP/AT-команды, COM-порты)
Переключаю в зависимости от задачи
Еще не решил, только изучаю

Таблица соответствия PID и режимов для Huawei E3331

PID (hex) Режим / Состояние Интерфейсы в системе Типичная прошивка
14fe / 1446 Mass Storage (CD-ROM) — начальное состояние Только CD-ROM / SD-карта Любая (заводская)
1f01 HiLink (CDC Ethernet / RNDIS) Сетевой адаптер (eth/enx), CDC NCM HiLink (Dashboard UTPS)
14db HiLink (старая ревизия / E3331s) Сетевой адаптер (eth/enx) HiLink (Dashboard UTPS)
1506 / 1507 Stick (Modem/PCUI/DIAG) 3x ttyUSB / COM (Modem, PCUI, DIAG) Stick (Dashboard Mobile Partner)
155b Stick (только Modem + PCUI) 2x ttyUSB / COM Stick (урезанная прошивка)
⚠️ Внимание: PID 1506 и 1507 функционально идентичны для пользователя, но 1507 может не поддерживаться старыми версиями usb_modeswitch (до 2.5.0). Обновляйте пакет.

FAQ: Частые вопросы по определению E3331

Почему модем определяется как Unknown Device в Windows?

Отсутствует драйвер для текущего PID. Часто бывает после перепрошивки на Stick, если не установлен пакет Huawei Data Card Driver. Установите драйвер вручную через devmgmt.msc, указав папку с .inf файлами.

Как узнать точную ревизию модема (h, s, l) без разборки?

Подключите в Stick-режиме, откройте Huawei Modem Terminal или DC-Unlocker. Команда ATI или вкладка «Device Info» покажет Model: E3331h-1 или E3331s-2. На наклейке под крышкой тоже написано.

Можно ли заставить HiLink-модем работать как Stick без перепрошивки?

Нет. Режим задается прошивкой (Dashboard). HiLink-прошивка не содержит стека PPP/AT для Dial-up. Только полная перепрошивка на Stick-прошивку (и наоборот) меняет режим работы.

Роутер Keenetic не видит модем в списке 3G/4G. Что делать?

Обновите KeeneticOS до актуальной версии. Проверьте лог: UsbModem::Manager: modem not supported. Если модем в HiLink — нужен компонент «Поддержка USB-модемов HiLink (CDC Ethernet/RNDIS)». Если в Stick — «Поддержка USB-модемов с последовательным интерфейсом». Установите через «Общие настройки» -> «Компоненты».

Зачем нужен код разблокировки (NCK) для смены прошивки?

Загрузчик модема заблокирован производителем. Для записи UPDATE.APP в раздел firmware нужен unlock-код, рассчитываемый по IMEI/серийнику. DC-Unlocker делает это автоматически (платная функция). Бесплатные калькуляторы в сети часто дают неверные коды для новых партий.

💡

Главное правило: PID на шине USB — единственный достоверный индикатор текущего режима E3331. Всё остальное (имена интерфейсов, драйверы) — следствие этого идентификатора.