elchupanibrei (elchupanibrei) wrote,
elchupanibrei
elchupanibrei

Category:

Optiboot загрузчик для Arduino

Не секрет, что Arduino использует загрузчик для заливки прошивок. До 2012 года они активно пилили bootloader для Atmega, а потом устали. Peter Knight на основе их кода и пары других исходников изобрел свой велосипед - загрузчик Optiboot. Потом он тоже устал и с 2011 года поддержкой стал заниматься Bill Westfield. Он до сих пор медленно развивает проект. Код получился на столько удачным, что официально ставится на все оригинальные Arduino Uno. Что ставят китайцы на свои клоны никто не знает. Поэтому я взял себе за правило менять bootloader после получения плат. Что мы получим установив "лучшийсапог"?


- optiboot занимает 0.5Kb, против 2Kb у Arduino. Это лишних 1.5Kb для вашего кода
- загрузка скетчей происходитв 2 раза быстрее, 115200bps против 57600bps
- почти мгновенное исполнение кода в "камне", за счет маленьких задержек после старта

Я знаю два способа установки Optiboot - автоматический и ручной. Сам пользуюсь ручным.

Автоматический с помощью Arduino IDE. Идем в File -> Preference и в поле "Additional Boards Manager Urls" вписываем строчку package_optiboot_optiboot-additional_index.json разделяя пакеты запятой. Потом идем в Tools -> Boards -> Boards Manager и устанавливаем Optiboot. Теперь подключаем плату, выбираем нужный bootloader и прошиваем.

Ручной способ сложнее, но более правильный, так как контролирутся весь процесс. Первый этап, с помощью старого доброго USBasp (покупал на eBay) или моста FTDI FT232R прошиваем микроконтроллер. Я пользуюсь avrdude в связке с AVRDudess, исходники которого лежат на Github. Под windows нужно скачать файл avrdude-6.x-mingw32.zip и распакоать в папку с AVRDudess.


пошаговая инструкция работы с AVRDudess


Для Arduino Duemilanove, Nano или Pro Mini (5v, 16 MHz) на ATmega328 выбираем optiboot_atmega328.hex и выставляем фьюзы — l: FF, h: DE, e: FD. Для Arduino Pro Micro (16MHz) на ATmega32 берем optiboot_atmega32.hex и выставляем фьюзы — l: FF, h: DE, e: F3.

Второй этап, обучить оболочку работать с новым загрузчиком. Если этого не сделать не получим дополнительных 1.5Kb и 115200bps. Для активации плюшек ныряем в ..\Arduino\hardware\arduino\avravr\boards.txt и дописываем новые куски в соответствующие секции.


пример новой вставки для платы с Optiboot

Уже подправленный boards.txt для Arduino IDE 1.8.4 лежит тут. Финальный аккорд - копируем свежую версию optiboot_atmega328.hex с Github-а в папку ..\Arduino\hardware\arduino\avr\bootloaders\optiboot

UDP: Отличная статья по фьюзам для ATmega328 тут

UDP2: Если хотите питать ATmega328 от 1.8в до 5.5в нужно менять кварц на 4MHz, скорректировать Brown-out Detection с помощью фьюзов и перепрошить bootloader на хитроделанный. Почему так происходит можно узнать из этой статьи.

UDP3: Если не охота возится с 4MHz кварцем, то берем Blue Pill/STM32F103, работает на частоте 72MHz при напряжении от 2в до 3.6в
Tags: #arduino, arduino
Subscribe

  • Библиотека для DFPlayer Mini

    Из того что есть на GitHub ничего не понравилось. Пришлось писать свою... Так и не понял зачем, для ожидания ответа, люди изобретают велосипед с…

  • Скоро новая прошивка для часов MatrixClock

    Скоро выкачу новую прошивку для часов MatrixClock. Наконец-то исправил косяк с Dim After Sunset, подробности тут в конце. От webradio пришлось…

  • Бета версия часов доступна на Github

    За MatrixClock уже почти не стыдно. Тем кот хочет пощупать, прошу под cut. Пока нету будильников и не работает ночная-дневная подсветка. Третий…

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 7 comments