Загрузить уже скомпилированный код в Linux CLI без arduino-cli

У меня есть скетч для Arduino Nano. Я компилирую его на своем сервере сборки и получаю эти 3 файла:

  • project.bin.elf
  • project.bin.hex
  • project.bin.with_bootloader.hex

Теперь мне нужно иметь возможность загружать/прошивать их на плату (подключенную через последовательный интерфейс) без arduino-cli. Главным образом потому, что я не могу установить его через apt-get, а это значит, что мне придется начать прыгать по циклам, чтобы иметь возможность его использовать (такие вещи, как поддержание его в актуальном состоянии, установка и т. д. на сотни устройств).
Поэтому мне было интересно, есть ли в репозиториях Debian какие-либо инструменты, которые я могу использовать для загрузки скомпилированного скетча, и если да, то как.

Я искал решение и наткнулся на несколько ответов и тем, но, как ни странно, все они либо используют arduino-cli, другие специализированные инструменты, либо ссылаются на мертвые страницы или страницы, которые больше не содержат ответ.

Примеры:

, 👍1

Обсуждение

avrdude - твой друг., @Kwasmich

загрузите Blink в Nano из IDE, а затем скопируйте команду avrdude из консоли IDE и измените ее, чтобы загрузить файл project.bin.hex, @Juraj

@Juraj я вижу эту команду и в версии для Windows? В качестве альтернативы я могу получить `arduino-cli` для вывода команды? Поскольку у меня есть тестовые платы, я могу установить на них что угодно. (Я просто не могу получить это на каждой плате), @BrainStone

включить подробный режим, @Juraj


1 ответ


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

3

Используйте avrdude.

Формат команды прост, если вы установили ее из репозиториев Linux:

avrdude -carduino -patmega328p -P/dev/ttyUSB0 -b115200 -Uflash:w:/path/to/project.bin.hex:i

В зависимости от того, какой загрузчик установлен на вашем nano, вам может потребоваться изменить скорость передачи данных (-b115200) на 57600. Также, конечно, USB-устройство должно быть настроено на то, что на самом деле ваша плата идентифицируется как.

Разбивка команды:

-c<programmer type>
-p<part name>
-P<port>
-b<baud rate>
-U<instruction>

Тип программатора, название детали и скорость передачи данных можно узнать из файла boards.txt в основных файлах AVR. Например, для Nano:

nano.upload.protocol=arduino
nano.menu.cpu.atmega328.upload.speed=115200
nano.menu.cpu.atmega328.build.mcu=atmega328p

относится к -c -b и -p соответственно. Инструкция всегда будет одна и та же и означает "Записать для прошивки следующий файл в формате IHEX8". «flash» — это целевая память, «w» — команда записи, а «:i» в конце определяет ожидаемый формат файла.

На компьютере Linux с установленным avrdude гораздо больше информации можно найти с помощью man avrdude.

,

Это отвечает на мой вопрос, но, поскольку SE задуман как своего рода энциклопедия, я думаю, было бы полезно объяснить, как вы понимаете этот вызов командной строки для других плат. (А также потому, что мне удалось найти похожий вызов, покопавшись и понаблюдав за процессами в `htop при попытке прошить с помощью arduino-cli`), @BrainStone

@BrainStone Нравится?, @Majenko

Отличный. Большое спасибо, @BrainStone

если вы не уверены в настройках, которые вы должны использовать, то вы можете использовать Arduino IDE, чтобы определить их .... в настройках включите «показывать подробный вывод во время загрузки». на панели состояния в Arduino IDE вы увидите правильную командную строку avrdude... что-то вроде `E:\arduino-nightly\hardware\tools\avr/bin/avrdude -CE:\arduino-nightly\hardware \tools\avr/etc/avrdude.conf -v -patmega328p -carduino -PCOM4 -b115200 -D -Uflash:w:C:\Users\xxxxx\AppData\Local\Temp\build3bb8345d83cedc585b1cb6c2216554cb3.tmp/BasicSerial.ino.hex: я, @jsotola