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

Использование загрузчика 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
Просмотров: 32361 | Комментарии: 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
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]






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