Загрузить код на Arduino Leonardo с помощью командной строки

Я пытаюсь загрузить скомпилированный файл .hex на Arduino Leonardo с помощью терминала. Загрузка примера кода с помощью Arduino IDE работает хорошо, и из Arduino IDE я получил команду загрузки

avrdude -C/etc/avrdude.conf -patmega32u4 -cavr109 -v -v -v -v -P/dev/ttyACM0 -b57600 -D -Uflash:w:[file.hex]:i

Но при выполнении я получил следующую ошибку

Connecting to programmer: .avrdude: Send: . [1b]
avrdude: Send: S [53] 
avrdude: Recv: . [15] 

avrdude: ser_recv(): programmer is not responding
avrdude: butterfly_recv(): programmer is not responding

Что не так?

, 👍10


3 ответа


Лучший ответ:

5

Проблема с Leonardo заключается в том, что он не перезагружается автоматически при открытии последовательного порта, как это делают платы, такие как Uno.

IDE Arduino содержит код для ручного сброса платы (путем открытия последовательного порта на скорости 1200 бод и повторного закрытия), которого нет в avrdude.

По сути, вам нужен другой способ сброса платы, чтобы она вошла в загрузчик. Это может быть так же просто, как просто нажать кнопку сброса в нужное время (светодиод загорается и гаснет, когда он находится в режиме загрузчика) или использовать какую-либо утилиту командной строки, чтобы открыть последовательный порт на скорости 1200 бод и снова закрыть его непосредственно перед запуском avrdude. .

Сейчас у меня нет под рукой Леонардо, но вам может повезти:

stty -F /dev/ttyACM0 ispeed 1200 ospeed 1200 && avrdude -C/etc/avrdude.conf -patmega32u4 -cavr109 -v -v -v -v -P/dev/ttyACM0 -b57600 -D -Uflash:w:[file.hex]:i
,

Это не работает для меня., @Cerin


5

Попробовав несколько проб и ошибок, я создал простой двоичный файл для загрузки в загрузчик Leonardo. Этот двоичный файл открывает последовательный порт на скорости 1200 бод, затем закрывает его и заключает в себе двоичный файл avrdude для записи .hex во флэш-память.

В ядре Arduino CDC .cpp мы видим, что CDC не только ожидает скорость 1200 бод, но и проверяет значение DTR. Если DTR становится высоким, CDC отменяет переход к загрузчику. Вот почему я очистил значение DTR. Я пробовал это в Ubuntu 16.04.

https://github.com/vanbwodonk/leonardoUploader

Используйте только эту простую команду:

leonardoUploader /dev/ttyACM0 Blink.ino.hex

Я надеюсь, что это поможет другим людям, которые ищут это.

,

1

Решение для Windows см. здесь: Как заставить Леонардо выполнить сброс с помощью avrdude?. Я сделал простую оболочку bat-файла, которая автоматизирует вызов avrdude. Он идентифицирует COM-порт Leonardo с помощью WMI, сбрасывает этот COM-порт до 1200 бод с помощью команды режима, затем идентифицирует COM-порт загрузчика и вызывает avrdude.

Предполагается, что прошивка будет помещена в файл firmware.hex, но bat-файл можно изменить так, чтобы он подавался из командной строки.

Я поместил код в репозиторий GitHub: Простая оболочка для avrdude, позволяющая загружать прошивку в Arduino Leonardo из командной строки.

,

Это ответ только по ссылке, и его следует изменить или удалить., @Code Gorilla