Существует большое количество готовых загрузчиков, та же популярная сейчас 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.7 =
Output Led
Alias Portd.7
Do Led = 1
Waitms 100
Led = 0
Waitms 500
Loop End компилируем (F7) и нажимаем F4 и тут же появится окно загрузчика
Как я уже писал, он ожидает когда стартует загрузчик в микроконтроллере,
поэтому для начала заливки файла, необходимо сбросить микроконтроллер,
нажатием на кнопку Reset. После нажатия произойдет загрузка новой
программы. И тут, надо признаться, был приятно удивлен, тем с какой
скоростью происходит загрузка программы - "летает" даже быстрее чем на
юсбаспе и всяких STK200. Ну и напоследок демонстрационное видео работы, тут я по очереди загружаю в
микроконтроллер программы с разной частотой мигания светодиода
Скачать MCS Bootloader для ATMega64