Проблемы с 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 | Как выглядит в системе | Типичный порт |
|---|---|---|
| CP210x | CP210x/SLAB_USBtoUART | COMx / /dev/ttyUSB0 |
| CH340/CH341 | CH340/CH341 | COMx / /dev/ttyUSB0 |
| CH9102/CH343 | CH9102/CH343 | COMx / /dev/ttyUSB0 |
Windows: COM не появился или прошивальщик не открывает порт
- Проверьте кабель и порт USB. Очень часто проблема — кабель “только зарядка”. Симптом: питание есть, а устройство не определяется или “Unknown USB”.
- возьмите другой кабель (точно с передачей данных),
- подключите в другой порт (лучше напрямую, без USB‑хаба).
- Если устройство есть, но COM не появился: переустановка драйвера.
- Диспетчер устройств → правой кнопкой по устройству → Удалить устройство (если есть пункт “Удалить драйвер” — включите).
- отключите стик, поставьте драйвер именно под ваш чип (CP210x ≠ CH340 ≠ CH9102),
- подключите снова и проверьте, что появилось устройство в Порты (COM и LPT) без жёлтых значков.
Если в диспетчере видно CH9102, установка драйвера CP210x или CH340 чаще всего не поможет (и может дать Code 10/нет COM).
- COM есть, но ошибки Access denied / Port busy / cannot open port.
- закройте всё, что могло открыть порт (мониторы COM, терминалы, сервисы автоматического подключения),
- перезагрузите ПК (самый быстрый способ “освободить” порт),
- проверьте, что выбран тот COM, который появляется при переподключении стика,
- при необходимости запустите прошивальщик от имени администратора.
Linux: нет /dev/ttyUSB или Permission denied
- Убедитесь, что USB вообще виден:
lsusb
dmesg -w
Если при подключении ничего не меняется — почти наверняка кабель/порт/хаб/питание.
- Порт появляется и сразу пропадает — частые “похитители” порта.
На 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
- Есть
/dev/ttyUSB0, ноPermission denied: добавьте права.
ls -l /dev/ttyUSB0
groups
sudo usermod -aG dialout $USER
Затем выйдите из системы и войдите заново (или перезагрузитесь).
- Используйте стабильное имя порта, а не “прыгающий” ttyUSB0:
ls -l /dev/serial/by-id/
В прошивальщике указывайте путь вида /dev/serial/by-id/usb-... — так порт не “перепутается”, если подключены другие USB‑UART.
Чеклист перед прошивкой
- Кабель с данными, подключение без хаба.
- Определён точный USB‑UART: CP210x / CH340 / CH9102.
- Windows: устройство в Порты (COM и LPT) без ошибок.
- Linux: виден порт в
/dev/serial/by-id/, пользователь вdialout. - Отключены/не мешают
brlttyиModemManager(если порт пропадал/занимался). - Закрыты программы, которые могли открыть COM/ttyUSB.
- Учтите, что при входе в 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 может стать другим — перепроверьте список портов после входа в режим прошивки.