Не удалось открыть ошибку порта сразу после подключения Arduino в Arch Linux
Я использую PlatformIO для программирования и Arduino Mega и Arduino Uno. Я подключил их через последовательный порт, поэтому мне нужно отключать их друг от друга каждый раз, когда я хочу их запрограммировать. Я также отсоединяю их от компьютера, чтобы случайно не жарить их при перемещении проводов.
Каждый раз, когда я подключаю один или другой обратно и пытаюсь запрограммировать его немедленно, я получаю это сообщение об ошибке:
*** [upload] could not open port /dev/ttyACM0: [Errno 16] Device or resource busy: '/dev/ttyACM0'
Если я подожду около минуты и попробую еще раз, то код будет загружен без проблем. Что может быть причиной этого?
1 ответ
ModemManager может быть причиной ваших неприятностей. Попробуйте отключить его, например, pkill -STOP ModemManager
(продолжить процесс с -CONT
).
ModemManager - это (фантастическая) часть программного обеспечения, которая заставляет ваши 3G-ключи работать автоматически. Поскольку Arduino выглядит как последовательный модем, ModemManager пытается получить контроль над ним.
Вы можете остановить ModemManager от этого, прикрепив определенную переменную к вашему устройству. Смотрите документацию для деталей. По сути, создайте правило udev, например /etc/udev/rules.d/99-ttyacms.rules
со следующим содержанием:
ATTRS{idVendor}=="0ca6" ATTRS{idProduct}=="a050", ENV{ID_MM_DEVICE_IGNORE}="1
Конечно, вам нужно использовать свои идентификаторы. использование lsusb
чтобы найти эти значения.
После того, как вы создали этот файл, перезагрузите udev с чем-то вроде sudo udevadm control --reload-rules