Главная arrow Программирование arrow AVR arrow Загрузчики (bootloader) для микроконтроллеров AVR Thursday, March 30 2017  
ГлавнаяКонтактыАдминистрированиеПрограммированиеСсылки
UK-flag-ico.png English Version
GERMAN-flag-ico.png Die deutsche Version
map.gif карта сайта
нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.

Поделиться:

Загрузчики (bootloader) для микроконтроллеров AVR Версия для печати
Написал microsin   
20.01.2010

Описана технология bootloader, встроенная во все микроконтроллеры Atmel AVR семейства ATmega. Материал для статьи взят с сайта http://www.scienceprog.com/.

Возможно, что самый удобный и правильный метод программирования микроконтроллера - использовать программу бутлоадера. Поскольку Вам не надо использовать специальные адаптеры для программирования или специальные знания – нужно просто подключить стандартный кабель от Вашего PC к целевой плате и запустить на PC специальную программу, которая соединяется с программой бутлоадера, записанной в микроконтроллере. Идея проста:

avr_bootloader_model.jpg

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

Все микроконтроллеры семейства AVR ATmega имеют возможность запрограммировать bootloader в старшие адреса адресного пространства. Адрес старта программы зависит от установок внутренних перемычек кристала AVR (fuse settings). Если установки указывают стартовать с другого адреса, то после сброса программный счетчик переставляется на секцию бутлоадера, и тогда первым выполняется bootloader. Бутлоадеры могут иметь раличный размер и использовать разные алгоритмы и интерфейсы, через которые будет загружаться основная программа. Источниками для загрузки могут быть карты Flash (MMC/SD), I2C, USART (COM-порт или RS232), SPI и USB. Условие для загрузки может быть получено, например, путем опроса специальной внешней перемычки, или наличием на карте памяти MMC/SD специального файла с прошивкой.

[USB bootloader]

Несомненно, самый удобный для пользователя интерфейс загрузки - USB. Этот интерфейс очень популярен, работает на всех операционных системах. Но протокол USB довольно сложен, поэтому встраивание bootloader в микроконтроллер, не имеющий аппаратной поддержки USB, потребует значительного объема кода (до 2 килобайт). Наиболее распространена программная реализация протокола USB от компании Objective Development - V-USB. Есть также другая программная реализация - USBtiny.

Для микроконтроллеров AVR с аппаратным интерфейсом USB (например, AT90USB162) компания Atmel предлагает фирменные загрузчики по USB. Некоторые микроконтроллеры поставляются с завода с уже прошитым в память загрузчиком (например, все тот же AT90USB162). Технологии, применяемые для такого bootloader, называются DFU и Flip. Подробнее см. здесь - http://microsin.ru/content/view/685/44/.

[Разнообразие бутлоадеров для AVR]

Многие AVR bootloader используют COM-порт для соединения с PC. Это хорошо работает, если используется аппаратный мост USB-USART. Если пишется бутлоадер самостоятельно, то не факт, что он сразу заработает. Обязательно потребуется отладка, и внимательное чтение документации на микроконтроллер. В списке можно увидеть уже готовые популярные бутлоадеры, которыми можно воспользоваться (список может быть и бОльшим):
    * Atmex, http://ladyada.net/techproj/Atmex/, COM, 19200bps, Assembler; JAvrProg(Java), ATtiny2313 (8-16Mhz);
    * Bootloader Programmer, Peter Dannegger, http://www.mikrocontroller.net/topic/12181, COM, Assembler; ATmega8/16/32/128;
    * AVRProg-compatible Bootloader, Martin Thomas, http://www.siwawi.arubi.uni-kl.de/avr_projects/, COM, WinAVR (C); AVRProg; Various AVRs and speeds;
    * USBisp Bootloader, Matthias Weisser, http://www.matwei.de/doku.php?id=en:electronics:usbisp, USB, COM, AVR-GCC(C); AVRProg; STK-500; ATmega8, FT245BM;6MHz;
    * DL5NEG, Herbert Dingfelder, http://www.herbert-dingfelder.de/bootloader/bootloader.html, COM, 19200bps, ASM, AVRProg;ATmega8 7.3728MHz;
    * Chip45boot, Erik Lins, http://www.chip45.com/index.pl?page=chip45boota?©=en, COM, 11500bps, WinAVR; HyperTerminal; Various AVR
    * STK500-Bootloader, Pascal Stang, http://hubbard.engr.scu.edu/embedded/avr/bootloader/, COM, Hex; AVRProg; STK500; ATmega8-128; 7.3 – 22.1MHz
    * AVR109 (AVR Butterfly), Atmel, http://www.atmel.com, COM, IAR(C); ATmega series; 12MHz;
    * AVRUSBBoot, Thomas Fischl, http://www.fischl.de/avrusbboot/, USB, AVR-GCC; ATmega8(other Megas); 12MHz;
    * Megaload, Sylvain Bissonnette, http://www.microsyl.com/megaload/megaload.html, COM, 11500bps, ICCAVR(C); Megaload.NET; Various AVR;
    * Bootload HID, http://www.obdev.at/products/avrusb/bootloadhid.html, USB, HID, WinAVR; ATmega8;
    * Crypto_Boot, http://avrusb.wikidot.com/project:crypto-boot, USB, IAR(C); Crypted AES; ATmega32; 12MHz.

Большинство бутлоадеров рассчитано на COM-порт, который уже устарел и в современных компьютерах встречается редко. Наиболее простой способ адаптировать эти бутлоадеры на USB - использование аппаратного моста USART <-> USB типа FT245BM. Но вероятно более удобно, когда USB подключен непосредственно к микроконтроллеру, и часть коммуникации бутлоадера сделана драйвером USB встроенного программного обеспечения.

[Ссылки]

1. AVR-USB-MEGA16: USB bootloader BootloadHID для микроконтроллера ATmega16. Мой вариант BootloadHID, заточенный под макетную плату AVR-USB-MEGA16 с микроконтроллером ATmega16 (с исходниками и скомпилированными вариантами для микроконтроллеров ATmega8, ATmega16, ATmega32 и кварцев на различные частоты).
2. AVR-USB-MEGA16: USB bootloader USBASPloader для микроконтроллера ATmega32. Мой вариант usbasploader, заточенный под макетную плату AVR-USB-MEGA16 с микроконтроллером ATmega32 (проект для AVRStudio с исходниками и скомпилированными вариантами для кварцев 12 МГц, 16 МГц).
3. AVR-USB-MEGA16: USB bootloader USBasp для микроконтроллера ATmega32. Простая инструкция, как пользоваться загрузчиком USBasp.

Последнее обновление ( 02.10.2010 )
 

Комментарии  

  1. #8 Точка опоры
    2015-03-1410:20:14 Ещё один загрузчик: http://www.fulcrum.ru/Support/art_Atmel_Loader_EXT.htm
    Написан на ассемблере, собирается под любой МК семейства mega, связь с ПК по UART, работает под управлением AVRDUDE и AVRProg.
  2. #7 Владимир
    2014-10-1422:10:29 Подскажите - существует ли любительский бутлоадер с управлением через Ehternet (по типу Kernelchip Louran) (например, в связке с ENC28J60). Буду признателен за любую наводку.

    microsin: мне такие бутлоадеры для AVR не попадались. И навряд ли такой существует - слишком неподходящие требования по размеру кода у сетевых стеков, трудно уместить программу бутлоадера в секцию загрузки.
  3. #6 4RESTER
    2013-02-1822:33:12 Чтобы использовать bootloader по RS-485 - используйте MAX13488 (он с автоматическим переключением направления).
  4. #5 Дима
    2011-08-1915:58:28 Позарез нужен буатлоадер работающий на ATmega16, но по rs485 интерфейсу. То есть бутак должен еще и дрыгать каким нибудь пином микроконтроллер а, чтобы переключать драйвер max485 то на прием, то на передачу. Есть такой?

    microsin: думаю, Вам нужно взять за основу бутлоадер для COM-порта (RS232, USART) и немножко его доработать, чтобы переключалось направление передачи данных. Бутлоадер RS232 для AVR найти не проблема.
  5. #4 Дмитрий
    2011-07-1119:15:35 У меня вопрос по старту бута. Можно ли как-нибудь сделать, чтобы можно было обходится без перемычки? Т. е. чтобы просто подключил девайс к USB и сам USB хост сообщил ему, что надо стартануть бут? Например в основном коде придумать как ему сделать рестарт, а перед рестартом еще в ЕЕПРОм, например, флаг какой-нибудь установить, чтобы по рестарту он не выходил из бута, пока прошивку не всосет? Ну или как-то так?

    microsin: вариантов решения проблемы запуска бутлоадера множество, и метод реализации запуска зависит целиком от Вашей фантазии. Просто придумайте, как Вы хотели бы, чтобы бутлоадер стартовал - и просто сделайте это, благо исходники бутлоадеров есть, и поменять их поведение достаточно просто. Стандартное решение - добавление в протокол обмена USB-устройства специальной команды, которая запускает бутлоадер. Тогда никакая перемычка не нужна.
  6. #3 Дима
    2010-12-3015:55:05 Есть ли бутлоадер для утилиты AVRprog, находящейся в составе AVRStudio?

    microsin: к сожалению, такой бутлоадер пока не попадался. Если попадется, то обязательно будет его перевод или обзор. Теоретически такой бутлоадер можно реализовать самому, так как все основные части - протокол STK200 (или STK500) и класс CDC, реализованный на библиотеке V-USB, уже есть готовые в исходниках. Вот, кстати, хороший кандидат для переделки под V-USB - http://www.siwawi.arubi.uni-kl.de/avr_projects/index.html#avrprog_boot . Код хорошо документирован, и может быть легко портирован на V-USB. Основная проблема только в том, чтобы уместить получившийся код в секцию бутлоадера. Наверняка он влезет в boot-секцию только начиная с ATmega32.
  7. #2 Kaseiiro
    2010-07-1012:43:00 Компилятору-то зачем знать про „меньше памяти“? Сами заметите. А загрузчику затирать себя можно и запретить.
    И все же, субъективно: загрузчик лучше писать самостоятельно.

    microsin: по поводу компилятора - Вы правы, если не задумываться от том, что НА САМОМ ДЕЛЕ хотели спросить. А в остальном… Все в этом мире с точки зрения человека субъективно. В том числе, с моей точки зрения - загрузчику лучше ничего не запрещать, а сделать его как можно тупее и меньше по размеру. И опять же, субъективно - bootloader для AVR НИ В КОЕМ СЛУЧАЕ НЕ НАДО ПИСАТЬ САМОСТОЯТЕЛЬНО, поскольку лучше, чем уже уже понаписано (причем столько, что не разгребете), Вы никогда не напишете.
  8. #1 Маковюшка
    2010-07-0708:18:06 Огромное спасибо за содержание сайта - оно бесценно для электронщиков!

    Подскажите пожалуйста, что нужно дописать, настроить в проекте WinAVR IAR CVAVR если программа создается под бутлодер? Т. е. как сообщить компилятору, что памяти доступно меньше, чем в выбранном камушке?

    microsin: Вы указали целых три системы проектирования, поэтому для ответа на вопрос придется написать целую статью. Пожалуйста, задавайте конкретные вопросы, и еще лучше - пишите по этому поводу на на email. Объем памяти в общем случае задается в хедерах, описывающих микроконтроллер , или в настройках проекта, или в опциях линкера.

Добавить комментарий

:D:lol::-);-)8):-|:-*:oops::sad::cry::o:-?:-x:eek::zzz:P:roll::sigh:

Защитный код
Обновить

< Пред.   След. >

Top of Page
 
microsin © 2017