Отключение 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-порт?

Да, это так.

В чем, по-видимому, здесь проблема?

, 👍6

Обсуждение

На какой платформе вы находитесь?, @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


4 ответа


4

Прежде всего, вы должны проверить, действительно ли устройство, к которому вы пытаетесь получить доступ, существует. Файл устройства может измениться при повторном подключении Arduino. Самый простой способ добиться этого - найти имя устройства в сообщении об ошибке, в данном случае /dev/ttyACM1. Затем проверьте две вещи:

  1. Существует ли файл устройства в дереве /dev? ls -l /dev/ttyACM*
  2. Настроена ли 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


1

Попробуйте установить скорость передачи данных в бодах на 9600 на последовательном мониторе. Для открытия последовательного монитора вам нужен работающий последовательный порт. Или перейдите в раздел > Файл> Настройки> и отредактируйте preferences.txt (необходимо закрыть Arduino IDE перед редактированием) "serial.debug_rate = 9600"

У меня есть несколько плат Arduino, и у меня была точно такая же проблема с платами, которые используют Atmel mega8U2 в качестве USB-последовательного моста. Платы с USB-мостом FTDI (SparkFun Red board, Pro mini) не показали такой же проблемы. Установка скорости передачи данных в бодах решила мою проблему.

Существует обновление прошивки для 8U2, которое может исправить это, но я не хотел рисковать делать кирпичи. ;-)

,

Влияет ли скорость передачи данных в последовательном мониторе на процесс загрузки? Я не уверен, что это так, но Arduino иногда может быть причудливым ;), @Anonymous Penguin


1

У меня такая же проблема после установки скорости передачи в бодах на 14400. Чтобы исправить это, я вручную установил serial.debug_rate=115200 в конфигурационном файле ~/.arduino/preferences.txt

,

На самом деле, установка скорости передачи данных в бодах на 14400 - это именно то, с чего и начались мои проблемы., @FredFury


2

Довольно подробное руководство по устранению неполадок доступно по адресу arduino.cc. Помимо проверок, уже упомянутых в вопросе и ответах, рекомендуется проверить, что serial.download_rate установлен на 19200 в ~/.arduino/preferences.txt.

19200 - это скорость передачи данных по умолчанию, используемая большинством загрузчиков, поэтому она не применяется, если вы ее не используете или используете модифицированную версию.

,