Проблемы с COM/ttyUSB при прошивке Zigbee-стика: диагностика и решение

Если при прошивке Zigbee-стика нет COM-порта в Windows или не появляется /dev/ttyUSB* в Linux, почти всегда виноваты: не тот драйвер под USB‑UART, кабель без данных, права доступа или службы, которые захватывают порт. Ниже — быстрый порядок действий, который обычно решает проблему за 10–15 минут.

Главное правило: сначала определите, какой у стика USB‑UART (CP210x/CH340/CH9102), и только потом ставьте драйвер и настраивайте доступ к порту.

Оглавление

Как определить USB‑UART (CP210x/CH340/CH9102)

Windows: откройте Диспетчер устройствПорты (COM и LPT) (или Другие устройства, если драйвера нет). Ищите названия:

  • Silicon Labs CP210x → CP210x
  • USB-SERIAL CH340/CH341 → CH340/CH341
  • CH9102/CH343 → CH9102/CH343 (частая причина “ставил не то”)

Linux:

lsusb
dmesg -w

Обычно в lsusb встречаются идентификаторы вроде 10c4:ea60 (CP210x) и 1a86:7523 (CH340), но ориентируйтесь прежде всего на сообщения dmesg.

Быстрая шпаргалка по тому, что должно появиться

USB‑UARTКак выглядит в системеТипичный порт
CP210xCP210x/SLAB_USBtoUARTCOMx / /dev/ttyUSB0
CH340/CH341CH340/CH341COMx / /dev/ttyUSB0
CH9102/CH343CH9102/CH343COMx / /dev/ttyUSB0

Windows: COM не появился или прошивальщик не открывает порт

  1. Проверьте кабель и порт USB. Очень часто проблема — кабель “только зарядка”. Симптом: питание есть, а устройство не определяется или “Unknown USB”.
  • возьмите другой кабель (точно с передачей данных),
  • подключите в другой порт (лучше напрямую, без USB‑хаба).
  1. Если устройство есть, но COM не появился: переустановка драйвера.
  • Диспетчер устройств → правой кнопкой по устройству → Удалить устройство (если есть пункт “Удалить драйвер” — включите).
  • отключите стик, поставьте драйвер именно под ваш чип (CP210x ≠ CH340 ≠ CH9102),
  • подключите снова и проверьте, что появилось устройство в Порты (COM и LPT) без жёлтых значков.

Если в диспетчере видно CH9102, установка драйвера CP210x или CH340 чаще всего не поможет (и может дать Code 10/нет COM).

  1. COM есть, но ошибки Access denied / Port busy / cannot open port.
  • закройте всё, что могло открыть порт (мониторы COM, терминалы, сервисы автоматического подключения),
  • перезагрузите ПК (самый быстрый способ “освободить” порт),
  • проверьте, что выбран тот COM, который появляется при переподключении стика,
  • при необходимости запустите прошивальщик от имени администратора.

Linux: нет /dev/ttyUSB или Permission denied

  1. Убедитесь, что USB вообще виден:
lsusb
dmesg -w

Если при подключении ничего не меняется — почти наверняка кабель/порт/хаб/питание.

  1. Порт появляется и сразу пропадает — частые “похитители” порта.

На Debian/Ubuntu распространён сценарий: /dev/ttyUSB0 появляется на секунду и исчезает из‑за brltty или из‑за опроса ModemManager.

  • brltty (поддержка брайлевских дисплеев), если не нужен:
sudo systemctl stop brltty.service brltty-udev.service
sudo systemctl disable brltty.service brltty-udev.service
  • ModemManager (автоопределение модемов), если мешает прошивке:
sudo systemctl stop ModemManager
sudo systemctl disable ModemManager
  1. Есть /dev/ttyUSB0, но Permission denied: добавьте права.
ls -l /dev/ttyUSB0
groups
sudo usermod -aG dialout $USER

Затем выйдите из системы и войдите заново (или перезагрузитесь).

  1. Используйте стабильное имя порта, а не “прыгающий” ttyUSB0:
ls -l /dev/serial/by-id/

В прошивальщике указывайте путь вида /dev/serial/by-id/usb-... — так порт не “перепутается”, если подключены другие USB‑UART.

Чеклист перед прошивкой

  1. Кабель с данными, подключение без хаба.
  2. Определён точный USB‑UART: CP210x / CH340 / CH9102.
  3. Windows: устройство в Порты (COM и LPT) без ошибок.
  4. Linux: виден порт в /dev/serial/by-id/, пользователь в dialout.
  5. Отключены/не мешают brltty и ModemManager (если порт пропадал/занимался).
  6. Закрыты программы, которые могли открыть COM/ttyUSB.
  7. Учтите, что при входе в bootloader устройство может переподключиться и получить другой порт.

Частые ошибки

  • COM/ttyUSB не появляется вообще → кабель “только зарядка”, плохой порт, питание/хаб.
  • Есть устройство, но не тот драйвер → в названии CH9102/CH343, а ставили CP210x/CH340 (или наоборот).
  • Port busy / Access denied → порт уже открыт другим процессом.
  • Permission denied в Linux → нет группы dialout или не выполнен повторный вход.
  • Порт исчезаетbrltty/ModemManager или переподключение в режим загрузчика.

FAQ

Почему вместо /dev/ttyUSB0 бывает /dev/ttyACM0?
Некоторые устройства работают как CDC-ACM. Это нормально: выбирайте реальный порт, который появляется при подключении, или используйте /dev/serial/by-id/.

Нужно ли всегда отключать ModemManager и brltty?
Нет. Отключайте только если видите симптомы: порт пропадает, прошивка не стартует, в dmesg видно вмешательство этих служб.

Почему порт меняется во время прошивки?
Многие стики при переходе в bootloader “переопределяются” как новое USB‑устройство. В этот момент COM/tty может стать другим — перепроверьте список портов после входа в режим прошивки.