Мне было приказано «записать загрузчик» на Arduino, чтобы исправить полученную ошибку. Как я могу это сделать? (А что именно является загрузчиком?)
Мне было приказано «записать загрузчик» на Arduino, чтобы исправить полученную ошибку. Как я могу это сделать? (А что именно является загрузчиком?)
Ответы:
Загрузчик - это небольшая программа, которая (почти) всегда работает на Arduino. Он управляет загрузкой и запуском эскизов, которые вы делаете, и мигает светодиодом штыря 13 при каждой перезагрузке платы.
Чтобы записать загрузчик:
Tools ► Board ►
в IDE. Дважды проверьте это, даже если вы могли бы загружать программы правильно; загрузка не всегда требует правильной доски.Tools ► Programmer ►
.Tools ► Burn Bootloader
и подождите. Это не должно занять больше минуты, и часто занимает всего несколько секунд.Источники:
{line 1} or other dedicated ISP programmer.
А что именно является загрузчиком?
Загрузчик представляет собой небольшой фрагмент кода, находящийся в «верхней» части памяти программы. Обычно он не стирается при загрузке новых эскизов. Его назначение активировать сразу после сброса (предохранители настроены на запуск кода по адресу загрузчика, а не по адресу 0x0000). Загрузчик будет ждать короткое время (например, одну секунду), чтобы увидеть, поступают ли данные «программирования» на последовательный порт.
Если это так, он читает эти данные и декодирует их, чтобы перепрограммировать оставшуюся часть флэш-памяти. Работая вместе с программой загрузки (обычно avrdude), новый эскиз отправляется через последовательный порт. Загрузчик стирает страницы флэш-памяти и заменяет их новым кодом. После этого он выполняет новый код.
Если инструкции не поступают, загрузчик переходит на адрес 0x0000, чтобы выполнить существующий эскиз на плате.
Альтернативный метод программирования загрузчика - использовать набросок, который я недавно написал, который работает на:
«Программная» плата запускает эскиз, в котором есть загрузчики для нескольких плат, жестко запрограммированных в нем. Вы подключаете плату программирования к целевой плате (плате, требующей загрузчик) с помощью 6 соединительных проводов, как показано на рисунке.
Эта конкретная фотография иллюстрирует, как один Uno программирует другой.
Вы запускаете эскиз (используя последовательный монитор, чтобы дать ему команды). Сначала он идентифицирует целевой чип:
Atmega chip programmer.
Written by Nick Gammon.
Entered programming mode OK.
Signature = 0x1E 0x95 0x0F
Processor = ATmega328P
Flash memory size = 32768 bytes.
LFuse = 0xFF
HFuse = 0xDE
EFuse = 0xFD
Lock byte = 0xCF
Bootloader address = 0x7E00
Bootloader length = 512 bytes.
Type 'L' to use Lilypad (8 MHz) loader, or 'U' for Uno (16 MHz) loader ...
Type 'G' to program the chip with the bootloader ...
Вы нажимаете G, чтобы запрограммировать его.
Erasing chip ...
Writing bootloader ...
Committing page starting at 0x7E00
Committing page starting at 0x7E80
Committing page starting at 0x7F00
Committing page starting at 0x7F80
Written.
Verifying ...
No errors found.
Writing fuses ...
LFuse = 0xFF
HFuse = 0xDE
EFuse = 0xFD
Lock byte = 0xCF
Done.
Type 'C' when ready to continue with another chip ...
Для Уно это занимает одну секунду. Для программирования Mega2560 требуется 3 секунды.
Подробные инструкции у программиста загрузчика Atmega
Код можно скачать с Github: nickgammon / arduino_sketches