Главная » Статьи » Полезная информация

Использование загрузчика Bascom-AVR
  У микроконтроллеров AVR есть такая полезная фишка как умение работать с Bootloader'ом, благодаря которому перепрошить микроконтроллер можно по стандартному UART интерфейсу, без использования программатора (но чтобы прошить bootloader программатор все же потребуется). Bootloader загружается в специальную область флэш памяти и срабатывает тогда когда микроконтроллер только начинает работать (при подаче питания или после сброса). Если, пока активен bootloader, в буфер UART попадет байт инициализации, загрузчик активизируется и начинает записывать получаемые данные в память микроконтроллера, а по завершению записи запустит только что записанную программу. 
 Существует большое количество готовых загрузчиков, та же популярная сейчас Arduino имеет встроенный Bootloader, благодаря которому происходит быстрая загрузка скетчей в память МК.
 Bascom-AVR, тоже не отстает от конкурентов :)  и для этого имеется уже готовые Bootloader'ы для большинства микроконтроллеров серии Mega.
 Сейчас как раз и рассмотрим bootloader для Bascom-AVR и попробуем с помощью него прошить микроконтроллер. А в качестве согласующего звена используется преобразователь USB-UART на микросхеме FT232RL.
 
  Первым делом выбираем микроконтроллер, в котором хотим использовать загрузчик. У меня это нафаршированная ATMega64a. Памяти в ней много и поэтому решил загрузить туда бутлоадер, с нее не убудет :) 
 
 Тестовая схема ниже, помимо микроконтроллера и преобразователя в схеме присутствуют светодиод, кварц на 16 МГц и кнопка сброса
 
 
 Собранная схема у меня выглядит так (об этой платке я напишу немного позже)
 
 
 
 
 Затем берем исходник бутлоадера, его можно найти в папке с установленным Bascom-AVR в разделе \SAMPLES\BOOT. Версий загрузчиков там много, я использовал BootLoader.bas  В нем уже содержатся настройки для всех микроконтроллеров, достаточно открыть нужный от комментария и скомпилировать прошивку. Если необходимо можно подправить частоту кварца (я изменил на 16 МГц) и изменить скорость соединения с COM-портом. По умолчанию там стоит 38400 бод, и нужно быть внимательным, так как изменив этот параметр, придется тоже самое проделать в настройках программатора Bascom-AVR.
 
 Итак, получив прошивку бута с нужными настройками, остается только загрузить его в микроконтроллер. Это делается стандартным способом - с помощью программатора :)
 И тут есть свои нюансы. Во-первых, при компилировании прошивки, компилятор скажет что файл будет занимать 99% памяти микроконтроллера (даже ATMega64 с ее 64 кб флэша). На это не обращаем внимания. Это объясняется тем, что загрузчик записывается в самый конец адресного пространства. А так как запись данных при прошивке идет по порядку - с начала в конец, то загрузка может занять достаточно длительное время, особенно на медленных программаторах.
 Во-вторых,  необходимо правильно сконфигурировать фьюзы - выставить размер загрузчика "Boot Flash section Size" (для ATMega64 размер составляет 1024 слов) и запрограммировать фьюз "Boot Reset Vector". Только после этого наш загруженный бутлоадер будер стартовать первым при запуске микроконтроллера.
 
 Размер загрузчика прописан в файле бутлоадера, поэтому выбирайте в зависимости от используемого типа микроконтроллера. 
 
 Скрин с настроенными фьюзами для ATMega64 привел ниже (в Khazama AVR Programmer). Здесь вдобавок выбрано тактирование от внешнего кварцевого резонатора.
 
 
 После всего этого наш bootloader готов к работе!
 
 Теперь нужно настроить ПО на стороне компьютера. Открываем Bascom-AVR и заходим в настройки во вкладку Programmer. Из выпадающего списка выбираем нужный нам тип программатора - MCS Bootloader.
 В этой же вкладке выбираем номер COM порта (у меня он под номером 15) и скорость соединения. Здесь я оставил все по умолчанияю - 38400 бод.
 
 
 
 
 
 Теперь необходимо открыть вкладку MCS Loader и поставить величину загрузочного сектора, соответствующее тому значению, которое выставили в прошивке бутлоадера (в моем случае 1024 слов)
 
 
 
 
 Остальные настройки мало интересны, за исключением пункта "Reset via DTR". Эта галочка позволяет автоматически дергать ногу Reset на микроконтроллере, если подключить ее к выводу DTR на преобразователе. У меня это не реализовано поэтому при прошивке каждый раз буду нажимать на кнопку Reset вручную :) Но для полного счастья можно применить эту фичу.
 
 После сохранения настроек, можно приступать к загрузке программы через бутлоадер. Для примера, загрузим в контроллер простую программку мигания светодиода на ноге PortD.7
 
 
$regfile = "m64def.dat"
$crystal = 16000000

Config Portd.= Output
Led Alias Portd.7

Do
Led = 1
Waitms 100
Led = 0
Waitms 500
Loop

End
 
компилируем (F7) и нажимаем F4 и тут же появится окно загрузчика 
 
 Как я уже писал, он ожидает когда стартует загрузчик в микроконтроллере, поэтому для начала заливки файла, необходимо сбросить микроконтроллер, нажатием на кнопку Reset. После нажатия произойдет загрузка новой программы. И тут, надо признаться, был приятно удивлен, тем с какой скоростью происходит загрузка программы - "летает" даже быстрее чем на юсбаспе и всяких STK200. 
 
 
 
 
 
 
 
 
Категория: Полезная информация | Добавлено: 05.10.2012
Просмотров: 32343 | Комментарии: 49 | Теги: bootloader, atmega64, uart, Фьюзы | Рейтинг: 5.0/8
Всего комментариев: 49« 1 2
19 exersizze   (15.10.2012 23:58) [Материал]
Было бы интересно и весьма полезно. На форуме bascomavr.3bb.ru обсуждали тему создания библиотеки виртуального USB, найду кину ссылку.
Во нашел http://bascomavr.3bb.ru/viewtopic.php?id=254

Новые камни типа AT90USB, если не ошибаюсь, работают как настоящее юсб устройство и имеют собственный загрузчик от atmela DFU Flip и шьются фирменной утилитой Atmel Flip

18 Valera18   (15.10.2012 22:32) [Материал]
Ещё бы первичную прошивку "BootLoader" объединить с "CONFIG USB" как COM-порт, тогда можно программировать без "UART-переходника", но над этим ещё нужно работать, на будущее.

Есть AVR микросхемы (AT90USB162) со встроенным USB (D+ и D-), может кто работал с такими микросхемами? Прошивка нужна? или определяет как COM-порт?

17 exersizze   (11.10.2012 01:45) [Материал]
Получил, спасибо посмотрю.
С использованием меги 128 согласен, лучше брать с запасом - потом меньше мороки. У меня модуль упраления для сим900 на 32-й собран, так там изрядно попотели пока добились более менее вменяемой работы - переменные постоянно друг друга затирали...но это совсем другая история)))

16 AlekS   (10.10.2012 20:18) [Материал]
Похоже это не баг, а из врат загрузчика по RS или не сочетание того и другого (компилятора Барсика). Пока с бубном кружить по этому поводу некогда.
У меня Si 35 U ( Сименс с usb и com ) а мозг мега16 пока….все тот же MRC-40.
Мутить буду на 128меге изначально, чтоб потом не бодатся.
Погреб, это продолжение конкурсной работы термостата на bascomavr.3bb.ru.
Статью бросил в журнал в сентябре, там ссылка на тебя (логгер), даже в работе с памятью оставил принты ячеек записи как у автора. Все на меге 8, но для полной работы с CRC по RS ставится 168 мега….мылом бросить???
P.S. через RS485 удобно лить прошивку если оно, железо, черт знает где стоит :-)

15 exersizze   (09.10.2012 23:11) [Материал]
Датчик DHT11, хоть и дешевый но по показаниям полностью устраивает. Да и помоему самый легкодоставаемый. Я с него еще и температуру буду тянуть
У меня с loadersize без проблем компилируется, или баги после того как прошивку загружаешь в мк?
По поводу управления по телефону тоже двигаемся в этом направлении smile понемногу приручаем sim900d http://avrproject.ru/sim900d/4_delenija-podkljuchena_antenna.jpg

А где можно почитать про твой погреб? ))

+1   Спам
14 AlekS   (09.10.2012 18:52) [Материал]
Exersizze. Плата зачетная получилась, датчик влажности какой?
Собрал тоже все в кучу для управление погребом по RS485. Спасибо за наводку на лоудер через RS485, круто быстро шет. А вот директиву $LOADERSIZE = size что- то не едет.

**********
Следующий этап управа по телефону + lcd3310 (типа умный дом).

+1   Спам
13 exersizze   (08.10.2012 16:30) [Материал]
Например в исходнике бутлоадера для ATMega64, есть вот такая строка
Code
$loader = $7c00  ' 1024 words


вот отсюда и пляшем, поэтому в программе которую будем загружать в эту мегу, просто добавляем
Code
$LOADERSIZE = 1024


так же есть размер и для всех остальных бутлоадеров, которые лежат в \SAMPLES\BOOT

12 Valera18   (08.10.2012 16:17) [Материал]
А как высчитывать сколько места в памяти ("полный размер памяти Atmega64") - ("прошивка BootLoader") = ("size") или просто объём памяти Atmega64.
Напишите чему равна $LOADERSIZE = size в Atmega64, чтобы было понятнее, заранее спасибо.

11 exersizze   (08.10.2012 15:30) [Материал]
Нет, это прописывается уже в рабочей программе. Чтобы компилятор знал что в памяти сидит бутлоадер и выдал предупреждение при компиляции если прошивка вылезет за допустимый размер.

10 Valera18   (08.10.2012 15:10) [Материал]
Вы обсуждали директиву $LOADERSIZE = size.
Что нужно вносить какие-то изменения (что-то дописывать) в первичную прошивку bootloader?

+1   Спам
9 exersizze   (07.10.2012 20:35) [Материал]
Да имется такая директива $LOADERSIZE = size. Вместо size я так понял тоже писать размер загрузчика, т.е. 1024 . Спасибо учту!
Плата двухсторонняя, помимо прочего там предусмотрено подключение часов 1307, eeprom, lcd дисплея 20х4, и датчики влажности, температуры и давления которые уже описывалось на этом сайте. В общем собрал все в кучу. Скоро опубликую более подробную информацию по этой плате

+1   Спам
8 forter   (07.10.2012 12:58) [Материал]
Здравствуйте, коллеги!
Если не ошибаюсь в BASCOM есть директива loadersize, поместив ее в начале программы, не удастся затереть bootloader. Я тоже использую такой способ загрузи программ и были случаи, когда в 64 Мегу пытался записать (сдуру) большой файл. Так вот - BASCOM при этом ругается, как я помню, на то, что может произойти запись в область бутлоадера.
Вся ценность этого способа зарузки программ и состоит в том, что можно использовать абсолютно все выводы, в том числе и UART, залил программу (очень быстро), запустил на исполнение и запустил терминал - можно наблюдать то, что контроллер в него отсылает.
А теперь - вопрос автору. А как Вы организовали разводку остальных выводов контроллера?
На фото не очень понятно. А так очень - очень интересно, спасибо!

7 Valera18   (06.10.2012 23:06) [Материал]
Ацетон портит медь и SMD детали, лучше использовать "Жидкость для снятия лака" оно без ацетона, но отмывает флюс хорошо и не портит SMD детали.

6 exersizze   (06.10.2012 20:00) [Материал]
Нет, лут и простой припой. Я заместо ацетона (закончился некстати) помыл плату горячей водой со средством для мытья посуды )). Отмывает хорошо, только лужение сразу стало серым. Окислился видать.
Я обычно покупаю кварцы на 16 МГц - скорости мало не бывает) но когда кончаются приходится ставить что остается, как наприемр здесь http://avrproject.ru/publ/reguljator_temperatury_i_vlazhnosti/1-1-0-84

По поводу занимаемой памяти ничего такого не показывает. Поэтому следить придется самому, я думаю бутлоадер сругнется при попытке записать программу, которая будет не вмещаться в отведенное для нее место. Но 64 кб так просто тоже не забъешь biggrin

5 Valera18   (06.10.2012 18:11) [Материал]
Интересно, программируется по UART.
Хорошая статья, упрощает программирование.

В начале нужно прошить "BootLoader" через обычный программатор, после можно прошивать через UART.
Вопрос: а когда прошиваешь через UART пишет сколько осталось свободного места в памяти (и как учитывается прошивка "BootLoader" в памяти)?

4 Valera18   (06.10.2012 17:40) [Материал]
Как делали дорожки: использовали фоторезист (хорошо получилось), лудили сплавом "Розе"?

Ещё вопрос для автора: почему во всех проектах используется кварц на 16 МГц, в чём выгода у кварца 16 МГц?

3 exersizze   (05.10.2012 21:40) [Материал]
Да проверял, юарт освобождается после того как пройдет таймаут ожидания бутлоадера, все работает.

2 Valera18   (05.10.2012 20:13) [Материал]
А вы проводили проверку: прошиваем через UART, в дальнейшем получится использовать UART интерфейс микроконтроллера (например: передача данных через TX и FT232RL на компьютер)?

1 Scorpushka   (05.10.2012 19:28) [Материал]
класс

1-30 31-49
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]






авторизация
Логин:
Пароль: