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

15

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

Парень в шляпе
источник
Довольно просто записать загрузчик в Arduino, если вы выполните правильные шаги. Это видео может вам помочь: YouTube - Как записать загрузчик на ATMEGA328P-AU (SMD) | Домашнее ARDUINO MINI
Sandesh HS

Ответы:

15

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


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

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

Источники:

Парень в шляпе
источник
1
На данный момент AVRISP в значительной степени EOL (конец срока службы). Как минимум, вы хотите AVRISPmk2. Есть также много других, более интересных инструментов (например, AVR One!). Вы, вероятно, должны просто сказать{line 1} or other dedicated ISP programmer.
Коннор Вольф
На таких платах, как Arduino Yun, каждый раз, когда вы «загружаете через wifi», вы сжигаете загрузчик, объединенный с вашим эскизом. Это благодаря тому, что процессор Linux подключен к AVR MCU через SPI, так что вы можете имитировать интернет-провайдера с помощью программного обеспечения.
Федерико Фиссоре
@FedericoFissore - вот почему так долго?
TheDoctor
Да, это и тот факт, что GPIO bitbanging медленнее. Прилагаются постоянные усилия для его ускорения.
Федерико Фиссоре
8

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

А что именно является загрузчиком?

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

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

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


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

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

  • Uno (или аналогичный, такой как Duemilanove)
  • Leonardo
  • Mega2560

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

Программатор загрузчика для 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 ...

Для Уно это занимает одну секунду. Для программирования Mega2560 требуется 3 секунды.

Подробные инструкции у программиста загрузчика Atmega

Код можно скачать с Github: nickgammon / arduino_sketches

Ник Гаммон
источник
Вы должны выбрать тип микросхемы, на которую хотите записать (Инструменты-> Доска ..)? Какую плату выбрать при записи загрузчика на отдельную микросхему?
Камило
Вы выбираете тип платы, которую используете для записи загрузчика в IDE. Эскиз загрузчика автоматически определяет тип целевой платы.
Ник Гэммон