Прошивка микроконтроллеров AVR
В связи с возникновением вопросов по прошивке и установке фьюзов при сборке устройств, описанных в других статьях сайта,
решил описать, как сам прошиваю данные микроконтроллеры (далее МК). Статья написана для людей, не имеющих опыта работы с МК семейства AVR.
Для прошивки контроллера понадобится программатор и программное обеспечение для ПК.
Программатор представляет собой электронное устройство, обеспечивающее физическую связь компьютера с МК. К компьютеру программатор подключается через
порты USB, LPT или COM. МК к программатору подключается по интерфейсу SPI непосредственно вне схемы, либо внутрисхемно, через соответствующие
разъёмы ISP на плате (для внутрисхемного программирования). Программатор для AVR на данный момент наиболее целесообразно приобретать в Китае, через соответствующие магазины.
В частности, наиболее распространены программаторы AVRASP, которые подключаются к ПК через порт USB. Стоимость их составляет в среднем 2-3$.
Но программатор не сложно собрать и самому. Наиболее просты программаторы, использующие COM или LPT порты.
Я начинал с программатора под LPT, известного как STK200/300, он довольно прост и имеет микросхему, выполняющую роль "буфера", предохраняющую
порт компьютера от повреждения. По соответствующему запросу в поисковике, найдется множество статей по его сборке. С данным программатором работают многие программы, я пользовался PonyProg2000.
Следующим простым программатором уже с USB интерфейсом был PROTTOSS AVR910USB.
Данный программатор сделан на базе МК ATmega8, который сам требует прошивки. На сайте автора программатора имеются все необходимые файлы и схема.
Для работы с данным программатором я использую программу AvrOspII.
Ниже представлен мой вариант разводки платы программатора и платы-адаптера для некоторых контроллеров.
Рисунок 1 - Разводка платы программатора и платы-адаптера под ATmega16, ATmega8, ATtiny2313
Рисунок 2 - Плата программатора и его внешний вид
Прошивка контроллера с помощью AVR910 в AvrOspII
Программу AvrOspII можно скачать по ссылке. После установки нужно проверить её настройки. Для этого необходимо знать номер COM-порта,
к которому подключен программатор. Этот COM-порт является "виртуальным" и появляется в списке устройств при подключении программатора к USB-порту, при этом
должен быть установлен драйвер,
идущий в "связке" с программатором AVR910. После подключения заходим в диспетчер устройств, номер будет указан в скобках, напротив названия устройства (рис. 3).
Рисунок 3 - Отображение программатора в списке диспетчера устройств
Запускаем AvrOspII, заходим во вкладку Configure и указываем номер порта. Здесь же указываем протокол AVR911 при работе с
программатором AVR910 (рис. 4).
Рисунок 4 - Конфигурация программы
Далее подключаем программатор (вместе с МК) к компьютеру. Подключать и отключать МК от программатора желательно со снятым питанием последнего
во избежание возможной порчи МК.
Переходим во вкладку Program, нажимаем кнопку Auto Detect, программа считает сигнатуру с МК и автоматически определится его марка.
Если всё правильно настроено и собрано, то в результате нажатия кнопки получим примерно следующее окно (рис. 5).
Рисунок 5 - Окно программирования контроллера
Для того, чтобы перед программированием выполнялось стирание памяти, а после - верификация, нужно выставить соответствующие опции (рис. 6).
После этого выбираем hex-файл прошивки и нажимаем кнопку Program - процесс программирования запущен, дожидаемся окончания записи и верификации.
Рисунок 6 - Процесс программирования памяти
После успешной верификации в журнале программы должна появиться запись Equal, которая говорит о том, что записанная во flash-память контроллера
информация совпадает с содержимым записываемого файла.
Рисунок 7 - Результат успешной записи и верификации
Далее необходимо запрограммировать конфигурационные fuse-биты контроллера. Для этого открываем вкладку Fuse bits и жмём кнопку Read, при этом считаются
установленные биты. В соответвтвии с техническими требованиями, устанавливаем биты путем установки крестиков в соответвтвующих строках. Fuse-биты управляют
внутренней аппаратной частью МК, и задают такие параметры как, например: источник тактового сигнала (CKSEL); активацию делителя тактовой частоты (CKDIV8);
параметры внутреннего "супервизора",
предназначенного для сбрасывания МК при снижении напряжения VCC ниже определенного уровня (BODLEVEL) (он не является полноценным супервизором,
но в некоторых случаях помогает). В программе AvrOspII установленный в строке крестик означает активацию параметра, записанного в этой строке. Например, установленный крестик
в строке "Divide clock by 8 internally [CKDIV=0]" означает, что будет активирован внутренний делитель тактовой частоты, а бит CKDIV8 будет установлен в "0", то есть запрограммирован.
Во вкладку "Lock bits" не лезем, если не знаем назначение битов. С их помощью можно запретить последующее программирование и считывание памяти МК.
Рисунок 8 - Окно установки fuse-битов
Для записи fuse-битов жмем кнопку Program, после чего производим верификацию, нажатием кнопки Verify. Если биты записаны без ошибок (так, как были установлены пользователем),
то в журнале появится соответвтвующая запись.
Рисунок 9 - Результат успешной записи fuse-битов
На этом программирование контроллера и установка fuse-битов завершены.
Для подробной информации по МК, их фьюзам, смотрите datasheet'ы.
Комментарии
|