Данная статья представляет собой подробную инструкцию по использованию бутлоадера avr_boot в ваших проектах. К концу статьи мы создадим игровую приставку на ардуино запускающую игры записанные на sd карту.
Содержание статьи:
-
Установка avr_boot в arduino ide
-
Запись загрузчика
-
Создание схемы
-
Запись скетча на sd карту
-
Результаты работы
-
Выводы
Установка avr_boot в arduino ide
Перейдя на github разработчика можно найти достаточно подробные инструкции на английском языке. Для упрощения вашей работы я приведу основные шаги и упомяну о подводных камнях с которыми столкнулся лично.
Установка через менеджер плат (актуально для Arduino IDE версии 1.6.4 или выше)
-
Откройте Arduino IDE.
-
Вкладка Файл -> Параметры.
-
Добавьте данную ссылку в поле Дополнительные ссылки для Менеджера плат: https://zevero.github.io/avr_boot/package_zevero_avr_boot_index.json
-
Вкладка Инструменты > Плата> Менеджер плат...
-
Ожидайте завершения загрузки.
-
Пролистайте список вниз до пункта avr_boot выберите его кликом.
-
Внимание: Если вы используйте Arduino IDE 1.6.6 вам нужно закрыть Менеджер плат и затем открыть снова прежде чем avr_boot появиться в списке.
-
-
Нажмите установить.
-
После установки закройте окно Менеджера плат.
Ручная установка (для Arduino IDE version 1.6.1 и выше)
-
Скачайте файлы avr_boot по ссылке: https://zevero.github.io/avr_boot/avr_boot_manualinstall_1.3.0.zip
-
Распакуйте архив .zip.
-
Переместите папку avr_boot в папку hardware находящуюся в альбоме со скетчами. Вы можете узнать расположение этого альбома в Файл > Параметры > Путь к альбому со скетчами:.
-
Если Arduino IDE открыто перезапустите ее.
Если вы столкнулись с проблемами с установкой. Обновите вашу Arduino IDE до последней актуальной версии. Ибо для нее гарантированно работает установка через менеджер плат.
Запись загрузчика
Для записи загрузчика вам будет необходим программатор. Вы так же можете использовать другую плату в качестве программатора. Однако я воспользовался программатором USBasp его цена составляет всего 300 рублей на маркетплейсах.

Строго рекомендую искать сразу в комплекте с переходником на 6 pin. Ибо это сильно облегчает работу.
После того как мы заполучили в руки наш программатор. Подключаем его к вашей плате и приступаем к записи загрузчика.
-
Открываем Инструменты -> Плата -> avr_boot -> ваш микроконтроллер.
-
В пунктах Processor, Model выбираем параметры вашей платы в пункте SD CS pin выбирайте цифровой пин куда будет подключен пин CS модуля чтения карты памяти. Остальные пункты можно оставить по умолчанию, при желании глубоко разобраться рекомендую обратиться к ссылке на гитхаб разработчика.
-
Выбираем наш программатор (в моем случае USBasp)
-
Жмем записать загрузчик
В случае возникновения проблем по типу:
avrdude: expected signature for atmega328p is 1e 95 0f
Проверьте, соответствуют ли ваши параметры загрузчика вашему микроконтроллеру.
Проблемы с загрузкой на atmega328p (arduino nano, uno)
В случае если вы получаете выше указанную ошибку, несмотря на то, что параметры полностью соответствуют вашей плате. Обратите внимание на маркировку чипа на плате. С 2024 года на arduino nano ставят микроконтроллер atmega328PB. Его сигнатура: 0x1e 0x95 0x16. Однако avr_boot на данный момент не имеет поддержки такого микроконтроллера, но он полностью обратно совместим с atmega328P.
Для решения этой проблемы перейдите в директорию C:UsersuserAppDataLocalArduino15packagesavr_boothardwareavr1.3.0 и измените файл avrdude.conf, указав для atmega328P сигнатуру atmega328PB. А именно: 0x1e 0x95 0x16.
После этого перезапустите Arduino IDE и смело прошивайте вашу плату.
Создание схемы
Самое душное уже позади осталось лишь собрать тестовый стенд! Если вы дошли до этого этапа, так держать!
Как вы уже знаете в этой статье мы будем делать игровую консоль которая будет запускать игры с физ.носителей.
Не буду томить, схема:

Начнем с основного в редакторе нету модулей sd карт которые есть у широкой массы из нас, а именно такие:

На дальнейших фото проекта вы будете видеть именно такой модуль, чтобы вы не путались вот таблица соответствия его контактов, с контактами модуля со схемы:
cs |
cs |
sck |
sck |
do |
miso |
di |
mosi |
На дальнейших фото вы увидите именно такое соответствие подключений
В моей консоли только 2 кнопки. Так как у меня больше нету кнопок, поэтому и все игры я буду адаптировать для двух кнопок.
Запись скетча на sd карту
-
Перейдите в Файл -> Параметры
-
Поставьте обе галочки в пункте Показывать детализированный вывод при компиляции и выгрузке на плату
-
Перед компиляцией выберите нужную вам плату из списка плат Arduino AVR Boards.
-
Сохраните и скомпилируйте нужный вам скетч.
-
В консоли IDE вы увидите путь куда были сохранены файл после компиляции. Он будет выглядеть примерно вот так: C:UsersuserAppDataLocalarduinosketches68F59AEAD12124C3E47234D6E19219E0/sketch.ino.elf перейдите в эту директорию
-
Открыв директорию в проводнике (я предполагаю что вы используете windows). Вызовите в этой директории консоль (cmd) и выполните следующую команду:
C:UsersuserAppDataLocalArduino15packagesarduinotoolsavr-gcc4.8.1-arduino5binavr-objcopy -I ihex -O binary sketch.ino.hex FIRMWARE.bin
-
После этого в директрии будет создан файл FIRMWARE.bin , именно его и нужно закинуть в корень sd карты не меняя название.
Обратите внимание! Поддерживаются только sd карты в формате FAT16/FAT32. Мои эксперименты показали что так же не все sd карты подходят.
Если у вас есть проблемы на этом этапе, попробуйте другую sd карту, заранее переформатированную в FAT32.
Результаты работы
В результате сборки по схеме получен следующий стенд:

Основные особенности работы:
-
Скетч в случае удачного считывания с карты попадает во flash память микроконтроллера. Поэтому даже если извлечь карту из слота и перезапустить ардуино будет проигрываться ранее считанная игра.
-
Попытка чтения скетча из карты производиться только по нажатию на кнопку resert на плате arduino или замыкания связанного с ней контакта.

После нажатия на кнопку rst сразу происходит считывание и начинается записанная на карте игра:

Выводы
На своем примере я показал, а так же заранее предостерёг читателя от ошибок с которыми лично столкнулся. Данная статья будет полезна для тех проектов, где имеется нужда регулярного обновления прошивки. Поскольку делает этот процесс автономным.
Автор: mikl_eli