Главная Thursday, January 27 2022  
ГлавнаяКонтактыАдминистрированиеПрограммированиеСсылки
UK-flag-ico.png English Version
GERMAN-flag-ico.png Die deutsche Version
лента новостей сайта microsin.ru лента новостей
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 © 2022