1

Тема: Загрузка прошивки в Ардуино для новичков

Собирая стабилизатор-регулятор от kvic, я столкнулся с затруднением: как же залить прошивку .hex в Ардуинку?
При этом совсем уж новичком меня назвать нельзя, в активе написанный с нуля и реализованный проект по управлению перистальтическим насосом. И полторы сожженных платы (т.е. сжег две, но одну потом таки заставил работать) - тоже опыт.
С загрузкой, конечно, справился, но некоторое время на то, чтобы разобраться, ушло.
Да и одноклубник обращался в личку с просьбой помочь. Так что, думаю, краткое руководство по теме будет полезно.

Предмет обсуждения
Задача - загрузить прошивку в формате .hex.

Рассматриваем платы arduino nano, их родственников и клоны. Скорее всего, написанное ниже будет верно для намного более широкого спектра плат сходной архитектуры (где в описаниях или названиях фигурирует сочетание AVR).
Проверено "руками" на нескольких nano с процессорами 168 и 328p, а также на китайских платах с процессорами LGT8B328F в формате "mini", т.е. без USB.

Способы взаимодействия с arduino
Мне известны три способа достучаться до платы.
1. Самый простой и очевидный - через USB разъем, установленный на плате. Не работает в случае:
    а) если этого разъема нет, т.е. плата в формате mini
    б) разъем есть, но контроллер USB уже не работает (потому что шаловливые руки) и плата через USB не отвечает

2. Через ножки RX0 и TX1 (фактически - через собственный COM-порт Ардуины). Для этого понадобится преобразователь USB-TTL (по сути, мы заменяем отдельным устройством чип аналогичного преобразователя, стоящий на плате Ардуины).
Это такая штука, у которой на одном конце USB-разъем, а на другом конце - несколько проводков. Обязательно их 4: земля, +5, RX и TX. Но лучше брать те, у которых есть пятый проводок, DTR, это избавит от необходимости тыкать пальцем в кнопку Reset Ардуинки при загрузке прошивки. Впрочем, я пользовался и 4-проводным вариантом - вполне терпимо.

Если плата не отзывается и на этот способ общения (или у нас задачи продвинутого уровня) - переходим к третьему способу.

3. Самый сложный и продвинутый способ - "напрямую" записывать прошивку в чип через специальный программатор. Программатор можно купить отдельный (ищется по USBASP) или использовать вторую Ардуинку с записанным в нее специальным скетчем. Проводки от программатора втыкаются в программируемой плате (Nano) в шесть штырьков, которые торчат вверх на конце, противоположном USB-разъему.
Глубоко влезать в эту тему не буду, замечу только, что:
    а) у плат LGT интерфейс программирования другой, проводов не 6, а 5. Но при этом из платы LGT можно сделать программатор для Nano. И наоборот тоже. Кому интересны подробности - спрашивайте.
    б) Если вы звпишите прошивку через программатор - способы 1 и 2 для этой платы станут недоступны, там сотрется бутлоадер. Восстановить его можно, если интересно - обсудим.

Иллюстрация: Конвертер USB-TTL подключен к LGT8B328F (которая выполняет роль программатора), а к ней подключена программируемая Nano.


Способы записи прошивок
В обоих способах для взаимодействия с платой используется консольная утилита AVRDUDE. Можно ее использовать напрямую, но есть два (с половиной) препятствия:
+1 где ее найти,
+0.5 где взять конфигурационный файл,
+1 как выставить правильные ключи.
Эти препятствия мы и будем преодолевать.

1. Способ, если вы уже слегка продвинуты и у вас стоит Arduino IDE.
Если это так, то AVRDUDE уже тоже стоит, надо только найти, откуда и как ее правильно запускать.
- Заходим в Arduino IDE, ставим File-Preferences-Show verbose output... (см. картинку).

Теперь при загрузке скрипта будем много всякой полезной информации.

- Подключаем свою плату, выставляем все нужные пареметры (порт, скорость, тип платы и т.д.)
- Компилируем и загружаем любой скрипт из примеров.
- Смотрим в окно вывода, прокручиваем до нужной записи:

Вот она, нужная нам строка! вот так Arduino IDE вызывала AVRDUDE. Тут есть все, что нам надо:
- путь к самой утилите,
- путь к конфигурационному файлу,
- все ключи.
Поменять надо только сам загружаемый файл.
Копируем строку, закрываем Arduino IDE, запускаем консоль (cmd или PowerShell для винды), разумно редактируем командную строку (убираем лишние кавычки, меняем загружаемый файл), запускаем - результат достигнут.

2. Способ, если у вас нет Arduino IDE или вам хочется большего (посмотреть и установить фьюзы, например).
Для AVRDUDE существует много графических оболочек, мне приглянулась https://github.com/ZakKemble/AVRDUDESS
Чтобы ее собрать, надо будет поставить Visual Studio и C#. Кому это лень - можно взять сборку https://disk.yandex.ru/d/Sd5TLhpYHbn86g
Сам AVRDUDE и конфиг для него в сборке уже есть.
Тонкость, пожалуй, только одна: какой выбрать программатор.


Если шьете через USB или COM - то как на картинке, "arduino...(Arduino bootloader using STK500...."
Если через программатор, сделанный из ардуинки - "arduino_as_isp..."

Ну, а все остальное, вроде, там очевидно.

  • 2025-05-20_16-46-44.png
    size: 163.11Кб type: png
  • 2025-05-20_16-37-04.png
    size: 90Кб type: png
  • 3PCBss.jpg
    size: 212.39Кб type: jpg
  • 2025-05-20_16-31-18.png
    size: 80.61Кб type: png

2

Re: Загрузка прошивки в Ардуино для новичков

Я заливал прошивку через X-loader без каких-то проблем, много раз. Правда, поджаренные ардуинки не использовал.

3

Re: Загрузка прошивки в Ардуино для новичков

Maxus ©:

через X-loader без каких-то проблем, много раз

Так он, вроде, тоже поверх avrdude работает, не?

4

Re: Загрузка прошивки в Ардуино для новичков

Piper ©:

Так он, вроде, тоже поверх avrdude работает, не?

Честно, не знаю. Заливаю обычным образом, через USB.