Отключение Arduino при загрузке
Считается, что эта проблема отключения не очень распространена в сообществе Arduino.
По сути, происходит то, что, как только я нажимаю кнопку загрузки, Arduino IDE сообщает мне, что плата Arduino не подключена. Что странно, так это то, что приложение python ino может просто отлично загружать мой код, поэтому я только предполагаю, что что-то не так с самой IDE.
Вот копия сообщения об ошибке, которое я получаю во время загрузки скетча:
Размер двоичного скетча: 444 байта ( максимум 32 256 байт) Исключение processing.app.SerialException: ошибка при открытии последовательного порта '/dev/ttyACM1'.при processing.app.Serial.<инициализация>(Serial.java:178)в processing.app.Serial.<инициализация>(Serial.java:77)в processing.app.debug.Загрузчик.flushSerialBuffer(Uploader.java:77)в processing.app.debug.AvrdudeUploader.uploadViaBootloader(AvrdudeUploader.java:174)в processing.app.debug.AvrdudeUploader.uploadUsingPreferences(AvrdudeUploader.java:67)в processing.app.Sketch.upload(Sketch.java: 1671)в processing.app.Sketch.exportApplet(Sketch.java: 1627)в processing.app.Sketch.exportApplet(Sketch.java: 1599)в processing.app.Редактор$DefaultExportHandler.run(Editor.java:2380)в java.lang.Thread.run(Thread.java:744)Вызвано: gnu.io.UnsupportedCommOperationException: Недопустимый параметр для gnu.io.RXTXPort.setSerialPortParams(RXTXPort.java:213)в processing.app.Serial.<инициализация>(Serial.java:163)... 9 дополнительная обработка.приложение.отладка.Исключение RunnerException: ошибка открытия последовательного порта '/dev/ttyACM1'.при обработке.app.debug.Загрузчик.flushSerialBuffer(Uploader.java:101)в processing.app.debug.AvrdudeUploader.uploadViaBootloader(AvrdudeUploader.java:174)в processing.app.debug.AvrdudeUploader.uploadUsingPreferences(AvrdudeUploader.java:67)в processing.app.Sketch.upload(Sketch.java: 1671)в processing.app.Sketch.exportApplet(Sketch.java: 1627)в processing.app.Sketch.exportApplet(Sketch.java: 1599)в processing.app.Редактор$DefaultExportHandler.run(Editor.java:2380)в java.lang.Thread.run(Thread.java:744)
Я ожидаю услышать несколько вопросов по этому вопросу, поэтому я продолжу и отвечу на все вопросы, которые придут мне в голову.
Это первый раз, когда вы пытаетесь подключиться к Arduino с этого компьютера?
Нет. На самом деле, я смог загрузить тот же исходный код просто отлично менее двух часов назад.
Вы пробовали использовать другой USB-шнур?
Да, я это сделал.
Можете ли вы загрузить исходный код с другого компьютера?
Да, я могу.
Вы пробовали удалять и переустанавливать IDE?
Да, это так.
Вы пробовали использовать другой USB-порт?
Да, это так.
В чем, по-видимому, здесь проблема?
4 ответа
Прежде всего, вы должны проверить, действительно ли устройство, к которому вы пытаетесь получить доступ, существует. Файл устройства может измениться при повторном подключении Arduino. Самый простой способ добиться этого - найти имя устройства в сообщении об ошибке, в данном случае /dev/ttyACM1
. Затем проверьте две вещи:
- Существует ли файл устройства в
дереве /dev?
ls -l /dev/ttyACM*
- Настроена ли Arduino IDE на использование правильного устройства? Проверьте в разделе
Инструменты
=>Последовательный порт
.
Возможно, это устройство использует другое приложение. При работе в Linux вы можете проверить это с помощью следующих команд:
$ lsof /dev/ttyUSB0
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
avrdude 7356 jippie 3u CHR 188,0 0t0 266450197 /dev/ttyUSB0
или
€ fuser /dev/ttyUSB0
/dev/ttyUSB0: 7356
Где, конечно, вам нужно заменить /dev/ttyUSB0
файлом устройства, как указано в сообщении об ошибке. В случае этого вопроса /dev/ttyACM1
, но обратите внимание, что номер может измениться, когда вы на мгновение отключите плату, а затем снова подключите ее.
В обоих результатах 7356
является PID процесса, который блокирует устройство. В моем примере я читал flash из командной строки, поэтому результат для вашей конкретной ситуации будет другим. Чтобы идентифицировать процесс, вы можете использовать:
$ ps -fp 7356
UID PID PPID C STIME TTY TIME CMD
jippie 7698 28116 1 20:34 pts/8 00:00:00 avrdude -patmega1280 -carduino -P/dev/ttyUSB002 -b57600 -D -Uflash:r:/tmp/flash:i
или более переносимая команда:
$ ps -ef | grep 7356
jippie 7698 28116 1 20:34 pts/8 00:00:00 avrdude -patmega1280 -carduino -P/dev/ttyUSB002 -b57600 -D -Uflash:r:/tmp/flash:i
Если устройство использует другое приложение, почему я все еще могу загружать данные на плату из ino
?, @Fadi Hanna AL-Kass
@FadiHannaAL-Касс Хороший вопрос. Указывали ли fuser
или lsof
PID в списке? Может быть, происходит что-то еще., @jippie
@FadiHannaAL-Kass Например, на моем компьютере запущен демон, который запрашивает мой Arduino только каждые несколько секунд. Если я пытаюсь запрограммировать этот Arduino, и приходит запрос, то программный цикл завершается с ошибкой. Может быть, запущена какая-то программа последовательного мониторинга?, @jippie
Я уже использовал ls -al
, чтобы убедиться, что устройство существует. Я также отсоединил плату от сети и снова запустил команду, чтобы убедиться, что я ищу нужное устройство. Arduino IDE также указывает на правильный порт. Когда я загружаю
и получаю сообщение об ошибке, меню Сервис -> Последовательный порт отключается, так что это еще один способ узнать, что устройство было отключено во время загрузки. однако lsof' и 'fuser
не указывают PID, так что теперь я также знаю, что никакое другое приложение не прерывает процесс загрузки!, @Fadi Hanna AL-Kass
Возможно, мне удастся обойтись без установки новой версии Linux, но я хочу быть готовым к тому, что это когда-нибудь повторится, @Fadi Hanna AL-Kass
@FadiHannaAL-Kass Переустановка Linux не решит вашу проблему. В мире Windows люди перезагружают свою систему, переустанавливают свой компьютер. В мире Unix / Linux мы выясняем, почему что-то происходит, и исправляем их., @jippie
Скорее всего, так и будет, поскольку я выполнил точно такой же процесс в другом дистрибутиве Linux на том же компьютере, и все работало нормально, @Fadi Hanna AL-Kass
@FadiHannaAL-Kass разве не эффективнее выяснить, почему что-то идет не так, и впоследствии исправить это, а не переустанавливать компьютер каждый раз, когда происходит что-то, чего вы не понимаете (пока)?, @jippie
вот именно. вот почему я сказал, что хочу быть готовым на случай, если это когда-нибудь повторится, @Fadi Hanna AL-Kass
Попробуйте установить скорость передачи данных в бодах на 9600 на последовательном мониторе. Для открытия последовательного монитора вам нужен работающий последовательный порт. Или перейдите в раздел > Файл> Настройки> и отредактируйте preferences.txt (необходимо закрыть Arduino IDE перед редактированием) "serial.debug_rate = 9600"
У меня есть несколько плат Arduino, и у меня была точно такая же проблема с платами, которые используют Atmel mega8U2 в качестве USB-последовательного моста. Платы с USB-мостом FTDI (SparkFun Red board, Pro mini) не показали такой же проблемы. Установка скорости передачи данных в бодах решила мою проблему.
Существует обновление прошивки для 8U2, которое может исправить это, но я не хотел рисковать делать кирпичи. ;-)
Влияет ли скорость передачи данных в последовательном мониторе на процесс загрузки? Я не уверен, что это так, но Arduino иногда может быть причудливым ;), @Anonymous Penguin
У меня такая же проблема после установки скорости передачи в бодах на 14400. Чтобы исправить это, я вручную установил serial.debug_rate=115200 в конфигурационном файле ~/.arduino/preferences.txt
На самом деле, установка скорости передачи данных в бодах на 14400 - это именно то, с чего и начались мои проблемы., @FredFury
Довольно подробное руководство по устранению неполадок доступно по адресу arduino.cc. Помимо проверок, уже упомянутых в вопросе и ответах, рекомендуется проверить, что serial.download_rate
установлен на 19200
в ~/.arduino/preferences.txt
.
19200
- это скорость передачи данных по умолчанию, используемая большинством загрузчиков, поэтому она не применяется, если вы ее не используете или используете модифицированную версию.
- Ардуино для чтения с преобразователя RS232 в последовательный модуль TTL
- Как отправить символы в SoftwareSerial Arduino с помощью командной строки Linux без хвоста -f?
- "/dev/ttyACM0": отказано в разрешении " в Ubuntu 18.04
- Чтение последовательных данных с Arduino с помощью кода C
- Arduino Uno R3 не распознается Arduino IDE в Ubuntu 21.04
- Есть ли у Linux защита программного обеспечения на USB?
- Загрузка Arduino Nano дает ошибку: avrdude: stk500_recv(): programmer is not responding
- Как узнать частоту дискретизации?
На какой платформе вы находитесь?, @jippie
@джиппи Пепперминт Linux, @Fadi Hanna AL-Kass
Содержит ли
ls -l / dev / ttyACM *
список точного устройства, упомянутого в сообщении об ошибке, и является ли это точным устройством, установленным в Arduino IDE в разделе Tools => Serial Port?, @jippie/dev/ttyACM1
был портом для платы, пока он не был отключен. Короче говоря, когда я нажимаю "загрузить", он начинает загрузку, затем останавливается на полпути и выводит сообщение об ошибке, упомянутое в вопросе выше. Я знаю, что IDE - это то, что отключает плату. Что я хочу знать, так это почему!, @Fadi Hanna AL-KassПодключены ли какие-либо устройства / периферийные устройства к Arduino? Если это так, отключите все, а затем попробуйте запрограммировать его., @jippie
Пожалуйста, подумайте о переходе на более свежую версию IDE: версия 1.5.6 заменила багги и старую библиотеку RXTX на JSSC. Обновление может не решить вашу проблему, но, по крайней мере, оно гарантирует, что вы не столкнетесь со старыми и уже решенными проблемами., @Federico Fissore
У меня похожая ситуация на моем старом рабочем компьютере.. Я чувствую, что именно аппаратное обеспечение на компьютере (рабочая станция HP xw9400) заставляет Arduino продолжать подключаться и отключаться. Возможно, из-за низкой мощности, поступающей от Arduino, порт usb "теряет" Arduino. Я попробую с другим компьютером, чтобы убедиться, что это так., @jgmechengr19