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

Использование загрузчика 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
Просмотров: 20054 | Комментарии: 49 | Теги: bootloader, atmega64, uart, Фьюзы | Рейтинг: 5.0/8
Всего комментариев: 491 2 »
0  
49 exersizze   (07.05.2015 09:33)
visp, конечно. Должен же загрузчик знать что микроконтроллер готов ловить данные. Подключи мк к терминалу и нажми сброс, будет видно что тот передает при старте.

48 visp   (29.04.2015 08:40)
Допустим поставил я загрузчик на Мегу128, нажал ресет, микроконтроллер что-то сообщит по USARTу, что можно начинать заливать данные?

47 visp   (29.04.2015 08:17)
Вот меня и интересует, как программу загрузить через обычный терминал либо через какую самописную прогу. Т.е. есть HEX файл и как его загнать в контроллер. Еще почитаю, чет все равно, не до конца врубаюсь. Не понятно, как узнать, что пора передавать в МК данные? и как микроконтроллер узнает, что все программа передана

0  
46 exersizze   (28.04.2015 21:36)
visp, что подразумевается под обычным 232? в примере загрузчик работает как раз через uart, а это и есть адаптированный  rs232 для микроконтроллера. Глянь вот эту тему http://avrproject.ru/forum/5-271-1 там вообще можно программу через обычный терминал загружать smile
Задумался сейчас о загрузке программ через gsm. А что, идея вполне себе реализуемая, программу можно гнать в режиме аудиосвязи посредством DTMF сигнала, нужен только отдельный контроллер "дешифратор - загрузчик".

45 visp   (27.04.2015 20:08)
В целях обучения. Я, если честно, не до конца понял, как прошить без Баскома, при помощи загрузчика.
Например, как прошить используя обычный 232? что должно литься в контроллер, где буферизироваться и проч..?

44 sany2   (26.04.2015 22:51)
По-моему для этих целей больше подойдёт блютуз-модули.Ладно понимаю глонасс-трекеры и подобные девайсы стоимостью кучу килорублей(там есть онлайн прошивка).А смысл шить дистанционно не особо сложные устройства-увеличить стоимость и габариты?

43 visp   (25.04.2015 18:42)
Кто нибудь пробовал прошивать по "воздуху". При помощи того же SIM900 или WiFi модулей. Что для такой прошивки нужно?

42 vakulyuk   (08.10.2014 15:40)
Все получилось :) работает отлично, даже лучше чем предполагал, реально летает) И все же чем обусловлена размер загрузчика, что это за цифра такая? ведь даже во фьюзах для ATmega64 можно выставлять 4 вида разных варианта размера..

41 vakulyuk   (07.10.2014 13:26)
Пробовал седня прошить, не получилось :( Микросхема ATMega128. Бутлоадер залился хорошо, да и фьюзы поменял. Может ктонить поподробнее объяснить что такое размер загрузчика? Возможно из-за этого не получилось, так как выставил 2048. Завтра попробую с 1024.

40 sany2   (06.10.2014 21:56)
Можно через оптотранзистор.напрямую незнаю чему первому будет нехорошо

39 vakulyuk   (06.10.2014 13:04)
Здравствуйте, подскажите пожалуйста как подключить DTR от COM порта к reset? она может проходить через max232 или ее надо напрямую к МК цеплять?

+1   Спам
38 KonstantinSW   (01.11.2013 23:10)
Добрый Вечер Всем Форумчаном (благодарю всех за помощь) с BootLoader ATmega32+PonyProg Фьюз-биты.Просидев целых два дня и я его сделал,зато
теперь знаю как он работает и с чем его едят.
С Уважением Константин.

37 KonstantinSW   (31.10.2013 17:25)
Всем привет помогите пожалуйста с BootLoader ATmega32+PonyProg Фьюз-биты.Я начинающий и боюсь превротить микроконтролер в железяку,а через BootLoader
как я понимаю программировать в BASCOM вероятностей меньше зарание спасибо всем.

+1   Спам
36 exersizze   (13.10.2013 21:49)
А что, должно работать, модуль автономный - микроконтроллер не нужен. Останется только сбрасывать микроконтроллер через этот модуль

35 Valera18   (13.10.2013 20:46)
Мысли.
А кто думал или пробовал объединить "BootLoader" с "Bluetooth HC-05", интересно, будет ли работать?
Тогда выйдет беспроводная перепрошивка, это прикольно (и удобно) :)))

34 kestrel   (27.08.2013 20:17)
Понял, через неделю придут pro mini atmega328 с aliexpres попробую
Спасибо

33 top   (27.08.2013 00:30)
kestrel, уж очень она похожа с 32й мегой. Я бы попробовал зашить бут для 32й меги)

32 kestrel   (26.08.2013 23:29)
может кто подскажет есть ли bootloader для atmega328?
в стандарном bootloader bas что-то не нашел этого МК

31 exersizze   (16.08.2013 22:54)
А загрузится ли? у прошивки будет инструкция писаться в конец памяти, а там уже сидит бутлоадер, хотя могу ошибаться. Ради интереса попробуй:)

30 top   (16.08.2013 20:23)
А что если загрузить бутлоадером прошивку бутлоадера?

29 exersizze   (15.08.2013 23:09)
Да правильно, если сразу после сброса в юарт пришла строка "123"  (по типу инициализации) тогда стартует бутлоадер в мк.

28 top   (15.08.2013 11:53)
Если я правильно понял, то при запуске микры всегда стартует Бутлоадер, затем проверяет условие наличия программатора MCS Bootloader на шине UART, если ТРУ то пишет прошиву, если НЕ_ТРУ то отправляется на выполнение программы с нулевого вектора (с самого начала)?
В коде есть такие строки:

-------------------
Bstatus = Waitkey()
Print Chr(bstatus);
If Bstatus = 123 Then
Goto Loader
End If
-------------------

Это и есть условие запуска загрузки флэша в МК?

27 max   (24.02.2013 09:16)
Rosh что же так не внимательно читаете статью? В ней же все расписано. Сверху после второй картинки идут слова: " Затем берем исходник бутлоадера..." Читайте весь абзац. это то, что Вам нужно.

26 Rosh   (24.02.2013 02:49)
Подскажите какой бутлоадер брать для atmega168 а то, их в папке много, я их по открывал дак там вроде всё для atmega8 и 128.

25 exersizze   (20.02.2013 23:39)
Сотрется, бутлоадер по своей сути такая же прошивка которой прошивается контроллер.

24 bec123   (20.02.2013 22:13)
вопрос такой если прошить ботлоудер а после этого снова зашить какую нибуть прошивку через ISP прогроматор ботлоудер не стерётся?

23 exersizze   (12.11.2012 21:52)
С демо версией компилятора интересно получается.. Если ограничение по размеру компилируемого файла, тогда нельзя скопилировать бутлоадер, он же прописывается в конце адрессного пространства и компилятор выдает 99% занятой памяти.. Как тогда?
Вот держите бутлоадер для восьмой меги http://avrproject.ru/bootloader/BootLoader_m8.hex

22 RBuraev   (12.11.2012 17:54)
Изготовил плату ARDUINO SEVERINO SERIAL SINGLE SIDED на базе mega 8, кристалл 16 Мгц.
Решил использовать ее для изучения BASCOM, на MCS Electronics скачал ДЕМО версию BASCOM 2.0.7.5. При попытке компиляции BootLoader из вышеприведенной статьи "Использование загрузчика Bascom-AVR" получаю сообщение об ограничении памяти в 4К. Помогите решить эту проблему.

21 exersizze   (07.11.2012 11:16)
Например, в одной из подпрограмм приема данных от gsm модуля, пытался разложить строку, в которой находилось имя оператора
+COPS: 0,0"RUS BMT" отсюда нужно было взять только RUS BMT причем команду Mid не хотел использовать, так как количество символов в названии у разных операторов разное, и хотелось взять только то что всегда находится между скобками. Набросал алгоритм изъятия, проверил, но заместо нужных данных строка оказывалась пустая. Хотя тот же самый код нормально раскладывал строку в небольшой тестовой программке, и всегда доставал нужное. Поэтому пришел к выводу что происходит переполнение стека из-за тяжелых операций со строками, пробовал увеличить hwstack, swstack и framesize... вплоть до Out of space RAM... ничего не помогло.
Пришлось оставить только одну операцию Mid, с ней работает.
Поэтому чем меньше телодвижений в подпрограммах тем лучше.

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

20 radan   (07.11.2012 09:39)
"переменные постоянно друг друга затирали...но это совсем другая история)))"
А можно хотя бы парой фраз, с чем столкнулись и как побеждали? У меня похоже аналогичная проблема...

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






   EasyEDA:  бесплатный редактор схем

   ✓ Создание схем
   ✓ Возможность симуляции
   ✓ Быстрое создание печатных плат
   ✓ Интуитивно понятный интерфейс

   Нарисуй свою схему прямо сейчас!
   Изготовление печатных плат   https://easyeda.com/order
авторизация
Логин:
Пароль:
Комментарии
Когда не хватает ног. Часть 2. Сдвиговый регистр 74HC595
08.12.2016 - exersizze:
yorx выдалось немного свободного времени, проверил в симуляторе. Проблема...
Логгер температуры 2.0
05.12.2016 - Evgeny6873:
Хотел повторить схему и долго ждал дисплей, два раза заказывал с Китая, пришел. ...
Когда не хватает ног. Часть 2. Сдвиговый регистр 74HC595
01.12.2016 - yorx:
Доброго времени суток, exersizze попробовал Ваш код все равно не работает как на...
Помни об усадке!
30.11.2016 - pchela5:
Автомобильные никакие не лезут?
Помни об усадке!
29.11.2016 - AlekS:
Виктор, спасибо.
С заменой транса в зиму, перестройка не комельфо) Валяет...
Управляем микроконтроллером с ПК по UART
29.11.2016 - exersizze:
Михаил, для работы с инфракрасными датчиками и диодами есть команды RC5SE...
Управляем микроконтроллером с ПК по UART
29.11.2016 - Михаил:
Всем привет.
Подскажите как переменную S передать по инфракрасному каналу...
Помни об усадке!
29.11.2016 - pchela5:
> Если ленту светодиодную порезать и соединить последовательно
Только ...
Когда не хватает ног. Часть 2. Сдвиговый регистр 74HC595
29.11.2016 - exersizze:
yorx, вывод Q7 ' первой микросхемы соединен с DS второй микросхемы? С...


Лучшие цены на 3D принтеры
успей сделать себе подарок к Новому Году! ;)


Prusa i3

Prusa i3 от 12500 р.



Rostoсk

Rostock от 15000 р.