цифровая электроника
вычислительная техника
встраиваемые системы

 

Что такое загрузчик Arduino и как он работает?

Автор: Mike(admin) от 21-05-2018, 14:55

Почти все микроконтроллерные (и микропроцессорные) системы используют некоторую форму загрузчика. Часто называемый прошивкой, что ошибочно, в Arduino также имеется загрузчик. Так как это довольно популярная платформа, давайте использовать ее в качестве обобщенного примера всех загрузчиков. Давайте поговорим о том, что делает загрузчик и как он работает.


Что такое загрузчик Arduino и как он работает

Когда микроконтроллер включается, он знает только, как делать только одну вещь. Как правило, это одна задача – запустить инструкцию, найденную в определенной ячейке памяти. Часто это адрес 0x0000, но не всегда. Обычно это место памяти будет содержать инструкцию перехода в другое место в памяти, которое является началом пользовательской программы. Однако загрузчик существует в немного другом пространстве памяти, отличном от пространства пользовательской программы.


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


Но как же работает загрузчик? Загрузчик Arduino поддерживает перепрограммирование памяти программ (или Flash-памяти) через последовательный порт. Без этого вам понадобится специальный аппаратный программатор, например, USBtiny для изменения кода в ATmega328p у Arduino Uno.


Как и многие микроконтроллеры, ATmega328p выделяет часть своей программной памяти для загрузки кода. В случае Uno загрузчик Arduino ждет короткое время, наблюдая за выводами UART. Если загрузчик не получает определенную последовательность байтов по последовательному порту, процессор переходит к разделу «пользовательской» программы для загрузки того, что уже находится в памяти программы. Этот скачок загружает вашу программу (или скетч).


Если предварительно определенная последовательность получена, загрузчик Arduino претендует на роль программатора AVR. В случае Uno используется уникальный протокол программирования, называемый «arduino». Этот «специальный протокол» является вариантом аппаратного программатора stk500. Другие платы Arduino имеют другие типы программаторов, которые они поддерживают.


На этом этапе avrdude начнет отправлять двоичные данные вашей программы по протоколу через виртуальный последовательный порт. Программная память (PROGMEM) ATmega328p сохраняет входящий поток байтов. После завершения чип сбрасывается и запускает новый код.


Повторное программирование Flash-памяти без специального программатора возможно только в том случае, если код работает во время фазы загрузки. Идея состоит в том, чтобы не допустить, чтобы вредоносный код (или какие-то баги) менял содержимое Flash-памяти.


Преимуществом загрузчика является то, что на более высоком уровне загрузчик может использоваться для предварительной настройки микроконтроллера / микропроцессора или, в случае загрузчика Arduino, позволяет программировать конечное устройство в полевых условиях. Хотя вы можете использовать загрузчик Arduino для тестирования и разработки кода в своем проекте, вы также можете использовать загрузчик для обновления кода в конечном продукте.


В то время как загрузчики предлагают невероятные преимущества, есть некоторые аспекты, которые следует учитывать, если вы храните загрузчик в готовом проекте.


Оглядываясь на то, как работает загрузчик Arduino, помните, что он задерживает выполнение «реального» программного кода. Этот факт означает, что до запуска основного кода после включения микроконтроллера была задержка.


Если у вас есть код загрузчика, это означает, что теперь выделено меньше объема памяти для вашей программы. Загрузчик optiboot для Arduino Uno занимает 508 байт (512-байтовый блок минус оставшиеся 4 байта). Впрочем, при Flash-памяти в 32 Кб занятие дополнительных 512 байт это не так много.


Поскольку загрузчик Arduino работает до вашего кода, он может устанавливать некоторые регистры не так, как ожидается. Например, у некоторых людей были проблемы со сторожевым таймером при ранних версиях загрузчика Arduino. К счастью, загрузчик optiboot, который сегодня более распространен, решает проблему сторожевого таймера.


Тем не менее, загрузчик Arduino позволяет программировать плату, такую как Uno, очень легко. Загрузчики не идеальны и требуют некоторых ресурсов, которые могут потребоваться для вашего проекта. Однако такие компромиссы обычно стоят того.




© digitrode.ru


Теги: Arduino, загрузчик




Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий