Как записать загрузчик?
Мне было поручено "прописать загрузчик" на Arduino, чтобы исправить ошибку, которую я получал. Как это можно сделать? (А что такое загрузчик?)
2 ответа
Лучший ответ:
Загрузчик - это небольшая программа, которая (почти) всегда находится на Arduino. Он управляет загрузкой и запуском сделанных вами скетчей и мигает светодиодом pin 13 всякий раз, когда плата сбрасывается.
Чтобы записать загрузчик:
- Приобретите AVR ISP, USBtinyISP, ParallelProgrammerили что-то подобное; или используйте другую плату Arduino. Это будет ваш ISP.
- Если не указано иное, подключите ISP к контактам ICSP на вашей плате.
- Питание платы осуществляется либо с помощью USB-кабеля, либо с помощью внешнего источника питания.
- Откройте Arduino IDE.
- Убедитесь, что вы выбрали правильную плату, которую вы записываете в
Tools ► Board ►
в IDE. Дважды проверьте это, даже если вы можете правильно загружать программы; загрузка не всегда требует правильной платы. - Выберите соответствующий программатор в
разделе Инструменты ► Программатор ►
. - Нажмите
Сервис ► Записать загрузчик
и подождите. Это не должно занять больше минуты, а часто занимает всего несколько секунд.
Источники:
- http://arduino.cc/en/Hacking/Bootloader
- http://arduino.cc/en/Guide/Environment
На данный момент AVRISP в значительной степени является EOL (end-of-life). Как минимум, вам нужен AVRISPmk2. Есть также много других, более причудливых инструментов (AVR One! например). Вероятно, вам следует просто сказать "{строка 1} или другой выделенный программист интернет-провайдера`., @Connor Wolf
На платах, таких как Arduino Yun, каждый раз, когда вы "загружаете через Wi-Fi", вы записываете загрузчик, объединенный с вашим скетчем. Это благодаря тому, что процессор Linux подключен к микроконтроллеру AVR через SPI, так что вы можете имитировать интернет-провайдера с помощью программного обеспечения., @Federico Fissore
@FedericoFissore - так вот почему это занимает так много времени?, @TheDoctor
Да, это и тот факт, что битбангинг GPIO происходит медленнее. Предпринимаются постоянные усилия по ускорению этого процесса., @Federico Fissore
Что такое загрузчик?
А что такое загрузчик?
Загрузчик - это небольшой фрагмент кода, находящийся в "верхней" части памяти программы. Обычно он не стирается при загрузке новых скетчей. Его цель - активироваться сразу после сброса (предохранители настроены на запуск кода по адресу загрузчика, а не по адресу 0x0000). Загрузчик будет ждать короткое время (например, одну секунду), чтобы увидеть, поступают ли "программные" данные на последовательный порт.
Если это так, он считывает эти данные и декодирует их, чтобы перепрограммировать остальную часть флэш-памяти. Работая совместно с программой загрузки (обычно avrdude), новый скетч отправляется через последовательный порт. Загрузчик стирает страницы флэш-памяти и заменяет их новым кодом. После этого он выполняет новый код.
Если никаких инструкций не поступает, загрузчик переходит на адрес 0x0000, чтобы выполнить существующий скетч на плате.
Как заменить загрузчик
Альтернативный метод программирования загрузчика - использовать скетч, который я написал некоторое время назад и который работает на:
- Uno (или аналогичный, например Duemilanove)
- Леонардо
- Мега2560
Плата "программирования" запускает скетч, в котором жестко закодированы загрузчики для нескольких плат. Вы подключаете программную плату к целевой плате (плате с загрузчиком) с помощью 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 ...
Для Uno это занимает одну секунду. Для программирования Mega2560 требуется 3 секунды.
Подробная инструкция на программаторе загрузчика Atmega
Код можно скачать с Github: nickgammon/arduino_sketches
Нужно ли вам выбирать тип чипа, на который вы записываете (Инструменты-> Плата ..)? Какую плату мне выбрать, когда я записываю загрузчик на отдельный чип?, @Camilo
Вы выбираете тип платы, *которую используете для записи загрузчика* в IDE. Скетч загрузчика автоматически определяет тип целевой платы., @Nick Gammon
- Не удается снова загрузиться после смены платы
- Разница в загрузчике Arduino Nano ATmega328P
- Почему я получаю avrdude: stk500v2_ReceiveMessage(): timeout error when uploading to Arduino Mega?
- Тайм-аут связи Arduino Mega с ошибкой программатора
- Arduino Nano не отвечает, желтый светодиод быстро мигает
- ESP32-CAM первый: 0x8 TG1WDT_SYS_RESET загрузочный цикл
- Как получить свою схему (Arduino) Pro Micro, чтобы можно было программировать ее через GPIO вместо USB?
- Программирование ATMEGA2560 с использованием FTDI
Записать загрузчик в arduino довольно легко, если вы будете следовать правильным шагам. Это видео может вам помочь: [YouTube - Как записать загрузчик на ATMEGA328P-AU (SMD) | Самодельный ARDUINO MINI] (https://youtu.be/mIq3ZsKPlTo ), @Sandesh HS