Вопрос или проблема
Недавно я купил devkit esp32 с мостом USB-UART ch340. После подключения его к USB-порту моего Ubuntu 22.04 последовательный порт /dev/ttyUSB0
постоянно подключается и отключается.
Я также пробовал это на Windows и Fedora, где все работало как ожидается, поэтому думаю, что это может быть связано с Ubuntu.
Вывод dmesg
:
[ 662.091302] usb 1-2: новое устройство USB полного дуплекса номер 117 с использованием xhci_hcd
[ 662.253355] usb 1-2: Найдено новое USB-устройство, idVendor=1a86, idProduct=7523, bcdDevice=81.33
[ 662.253366] usb 1-2: Новые строки USB-устройства: Mfr=0, Product=2, SerialNumber=0
[ 662.253370] usb 1-2: Продукт: USB Serial
[ 662.258186] ch341 1-2:1.0: обнаружен преобразователь ch341-uart
[ 662.272620] usb 1-2: преобразователь ch341-uart теперь присоединен к ttyUSB0
[ 665.739336] usb 1-2: USB отключен, номер устройства 117
[ 665.739737] ch341-uart ttyUSB0: преобразователь ch341-uart теперь отключен от ttyUSB0
[ 665.739770] ch341 1-2:1.0: устройство отключено
tail -f /var/log/syslog
показывает две дополнительные строки:
проверка шины 1, устройство 125: "/sys/devices/pci0000:00/0000:00:08.1/0000:05:00.3/usb1/1-2"
шина: 1, устройство: 125 не было MTP-устройством
Я попробовал:
- отключить автоотключение с помощью
udev
правил, как описано в архиве wiki (я не уверен, почему это не работает) - отключить автоотключение, изменив
/sys/devices/*/power/level
наon
(файл возвращается кauto
через несколько секунд) - обновить до последнего ядра
- отладить драйвер с помощью kprobe
Кто-нибудь имеет идеи, как это решить? Если я не смогу это исправить, мне, вероятно, придется сменить дистрибутив, а у меня сейчас нет времени на это.
В моем случае чтец шрифта Брайля Ubuntu занимал порт. Это мне помогло.
sudo apt remove brltty
После этого я смог увидеть устройство, которое подключилось и осталось подключенным. Вам не придется выполнять эту команду снова.
Такая же проблема была на Manjaro (5.13.19-2-MANJARO
) с ESP32 (той, что с CH340). Каждый раз, когда я подключал второй ESP32 (даже если это была модель с cp2102), устройство на CH340 начало отключаться и подключаться каждые несколько секунд. Попробовав отключить автоотключение с помощью правил udev (что, казалось, не дало вообще никакого эффекта), я нашел этот пост на r/archlinux, где кто-то предложил использовать TLP для отключения автоотключения USB.
В моем случае TLP уже был установлен, поэтому я изменил конфигурацию в /etc/tlp.conf
, чтобы включить информацию об устройстве USB CH340 (1a86
— это vendorId, а 7523
— productId):
USB_DENYLIST="1a86:7523"
и активировал его через
systemctl enable tlp.service
это решило мою проблему.
Не уверен, сработают ли те же шаги на Ubuntu, но поскольку я не смог найти другого решения, решил поделиться этим.
Ответ или решение
Проблема с постоянным отключением и подключением устройства USB-UART на базе чипа CH340 на вашей системе Ubuntu 22.04 может быть связана с несколькими факторами. Поскольку вы уже упомянули, что аналогичные устройства работали корректно на Windows и Fedora, есть высокая вероятность того, что проблема кроется в особенностях конфигурации Ubuntu.
Вот несколько шагов, которые можно предпринять для решения данной проблемы:
1. Убедитесь в правильности подключения
Убедитесь, что USB-кабель и порт, к которому подключено оборудование, работают исправно. Попробуйте другой USB-кабель и другой USB-порт на вашем компьютере.
2. Отключите brltty
Как упоминалось в ваших наблюдениях, может быть, что программа brltty
занимает порт. Попробуйте удалить её с помощью команды:
sudo apt remove brltty
Это должно освободить порт для вашего устройства.
3. Настройка udev для отключения автоподсветки
Если вы хотите отключить автоподсветку USB, следуйте следующим инструкциям:
- Создайте новый файл правил udev:
sudo nano /etc/udev/rules.d/99-usb-autosuspend.rules
- Добавьте следующие строки в этот файл:
ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="1a86", ATTR{idProduct}=="7523", TEST=="power/control", ATTR{power/control}="on"
- Затем перезагрузите правила:
sudo udevadm control --reload-rules
4. Использование TLP для управления энергосбережением
Если проблема всё ещё не решена, вы можете использовать утилиту TLP для управления режимом энергосбережения USB:
- Установите TLP, если он ещё не установлен:
sudo apt install tlp tlp-rdw
- Откройте конфигурационный файл TLP:
sudo nano /etc/tlp.conf
- Добавьте или измените строку с исключением для вашего устройства, используя идентификаторы:
USB_DENYLIST="1a86:7523"
- Запустите и активируйте службу TLP:
sudo systemctl enable tlp.service
sudo systemctl start tlp.service
5. Проверка и тестирование
После выполнения всех этих шагов перезагрузите систему и повторно проверьте подключение вашего устройства. Используйте команду dmesg
для наблюдения за логами подключения и отключения, чтобы убедиться, что порт теперь работает стабильно.
Если никаких улучшений не наблюдается, возможно, проблема связана с особенностями поддержки конкретного устройства в ядре Linux или с конфигурацией вашей установки Ubuntu. В этом случае дополнительно поможет обращение на специализированные форумы или сообщества пользователей Ubuntu, где можно найти более целиные решения.
Если ни одно из предложенных решений не помогло, возможно, стоит рассмотреть использование другого дистрибутива на определенный период, пока не будет найдена версия ядра или специфика конфигурации, которая исправит эту проблему.