Как записать загрузчик?

Мне было поручено "прописать загрузчик" на Arduino, чтобы исправить ошибку, которую я получал. Как это можно сделать? (А что такое загрузчик?)

, 👍22

Обсуждение

Записать загрузчик в arduino довольно легко, если вы будете следовать правильным шагам. Это видео может вам помочь: [YouTube - Как записать загрузчик на ATMEGA328P-AU (SMD) | Самодельный ARDUINO MINI] (https://youtu.be/mIq3ZsKPlTo ), @Sandesh HS


2 ответа


Лучший ответ:

23

Загрузчик - это небольшая программа, которая (почти) всегда находится на Arduino. Он управляет загрузкой и запуском сделанных вами скетчей и мигает светодиодом pin 13 всякий раз, когда плата сбрасывается.


Чтобы записать загрузчик:

  1. Приобретите AVR ISP, USBtinyISP, ParallelProgrammerили что-то подобное; или используйте другую плату Arduino. Это будет ваш ISP.
  2. Если не указано иное, подключите ISP к контактам ICSP на вашей плате.
  3. Питание платы осуществляется либо с помощью USB-кабеля, либо с помощью внешнего источника питания.
  4. Откройте Arduino IDE.
  5. Убедитесь, что вы выбрали правильную плату, которую вы записываете в Tools ► Board ► в IDE. Дважды проверьте это, даже если вы можете правильно загружать программы; загрузка не всегда требует правильной платы.
  6. Выберите соответствующий программатор в разделе Инструменты ► Программатор ►.
  7. Нажмите Сервис ► Записать загрузчики подождите. Это не должно занять больше минуты, а часто занимает всего несколько секунд.

Источники:

  • 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


10

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

А что такое загрузчик?

Загрузчик - это небольшой фрагмент кода, находящийся в "верхней" части памяти программы. Обычно он не стирается при загрузке новых скетчей. Его цель - активироваться сразу после сброса (предохранители настроены на запуск кода по адресу загрузчика, а не по адресу 0x0000). Загрузчик будет ждать короткое время (например, одну секунду), чтобы увидеть, поступают ли "программные" данные на последовательный порт.

  • Если это так, он считывает эти данные и декодирует их, чтобы перепрограммировать остальную часть флэш-памяти. Работая совместно с программой загрузки (обычно avrdude), новый скетч отправляется через последовательный порт. Загрузчик стирает страницы флэш-памяти и заменяет их новым кодом. После этого он выполняет новый код.

  • Если никаких инструкций не поступает, загрузчик переходит на адрес 0x0000, чтобы выполнить существующий скетч на плате.


Как заменить загрузчик

Альтернативный метод программирования загрузчика - использовать скетч, который я написал некоторое время назад и который работает на:

  • Uno (или аналогичный, например Duemilanove)
  • Леонардо
  • Мега2560

Плата "программирования" запускает скетч, в котором жестко закодированы загрузчики для нескольких плат. Вы подключаете программную плату к целевой плате (плате с загрузчиком) с помощью 6 соединительных проводов, как показано на рисунке.

Bootloader programmer for Uno

Эта конкретная фотография иллюстрирует, как один 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