Для того чтобы запрограммировать ("прошить") микроконтроллер, необходим программатор. Программатор представляет собой программно-аппаратный комплекс, состоящий непосредственно из устройства, связывающего микроконтроллер с компьютером, и программы, которая этим устройством управляет. Программатор заносит подготовленную для микроконтроллера программу в его память.
Наиболее распространенным способом программирования для AVR является внутрисхемное программирование (функция ISP - in-cirсuit serial programming) через коммуникационный интерфейс SPI. Этой возможностью обладают все микроконтроллеры AVR, кроме Tiny11 и Tiny28. Данный режим удобен тем, что позволяет программировать AVR, расположенный в готовом устройстве, то есть вам не нужно вытаскивать микроконтроллер из платы каждый раз, когда вы хотите его перепрограммировать.
Интерфейс SPI (Serial Peripheral Interface) представляет собой 3 линии: SCK, MISO и MOSI.
SCK (SPI ClocK)
Тактовый сигнал, который программатор формирует на линии SCK.
MOSI (Master Out, Slave In - вход ведомого, выход ведущего)
Линия передачи данных от программатора (ведущий), к программируемому микроконтроллеру (ведомый). Во время каждого импульса на линии SCK передается один бит от программатора к программируемому микроконтроллеру по линии MOSI.
MISO (Master In, Slave Out - выход ведомого, вход ведущего)
Линия передачи данных от программируемого микроконтроллера (ведомый) к программатору (ведущий). По каждому импульсу на линии SCK передается один бит от микроконтроллера к программатору по линии MISO.
Для обеспечения нормальной связи по трем SPI линиям необходимо соединить общую землю (GND) на программаторе и программируемом устройстве.
Для входа и нахождения в режиме последовательного программирования используется линия сброса (RESET). Она должна удерживаться в активном состоянии (низкий уровень) во время программирования AVR. Также при стирании чипа на линии RESET должен быть сформирован импульс в конце цикла стирания.
Кроме того, может использоваться вывод контроллера XTAL1 для тактировки контроллера программатором при отсутствии кварцевого резонатора.
При программировании AVR программатор всегда функционирует как ведущее устройство, а микроконтроллер как ведомое.
Программная часть
В интернет можно найти множество программ, работающих с теми или иными типами устройств для программирования микроконтроллеров AVR. Большинство из этих программ совершенно бесплатны.
AVRDUDE
В состав пакета WinAVR входит мощная утилита AVRDUDE. Она позволяет загружать программы и данные в память микроконтроллера, а также считывать их оттуда. AVRDUDE использует SPI-интерфейс. Существуют версии для Windows и Linux. Первоначальный код был написан Брайеном Дином (Brian S. Dean) и имел название avrprog.
AVRDUDE может использоваться через командную строку, чтобы читать или записать все типы памяти кристалла, или при помощи графического интерфейса. Использование AVRDUDE из командной строки удобно для полного программирования всей памяти кристалла, в то время как графический интерфейс полезен для исследования содержания памяти, изменения отдельных байтов EEPROM, fuse и lock битов и т.д.
AVRDUDE поддерживает множество типов программирующих устройств, работающих как через интерфейс параллельного (LPT) порта, так и через последовательный (COM) порт, и может быть сконфигурирован для использования практически с любым LPT-устройством.
AVReAl
Предназначен для программирования AVR с использованием SPI-интерфейса. Отличается простотой использования и поддерживает несколько основных типов популярных простых программаторов, подключаемых к параллельному порту (LPT). Существуют версии для DOS и Windows (существует версия и для Linux). Во всех вариантах запускается только из командной строки с необходимыми ключами, графический интерфейс отсутствует. Написан Александром Редчуком. Сайт программы: http://ln.com.ua/~real/avreal/
IcProg
Поддерживает полтора десятка популярных LPT-программаторов, в том числе самых простых. Осуществляет программирование кристалов через SPI. Имеет удобный графический интерфейс, переведенный на русский язык. Автор Bonny Gijzen. Свободно распространяется в Интернете на сайте http://www.ic-prog.com/.
PonyProg
Свободная GNU-утилита с открытым исходным кодом для программирования Flash-микросхем с последовательным доступом. PonyProg написан Клаудио Ланконелли (Claudio Lanconelli) и существует в Windows и Linux версиях. Имеет поддержку русского языка. Может использовать стандартный последовательный порт (COM) или параллельный (LPT) порт. Поддерживает ряд популярных программаторов.
Аппаратная часть
Простой программатор AVR
Схема простого программатора AVR
Разъем, подключаемый к параллельному порту ПК, показан со стороны пинов
Один из самых простых программаторов состоит из 25-контактного разъема для параллельного (LPT) порта, 4-х резисторов (150 Ом) и соединительного кабеля, длина которого не должна превышать 1,5 метра. Резисторы необходимы для предохранения параллельного порта в случае неправильного монтажа и некоторых других неприятностей.
Схема получила свое название от отладочных плат Atmel для быстрого начала работы с микроконтроллерами AVR. Если вы хотите, чтобы ваш программатор почти в точности соответствовал классическому программатору STK200, то следует поставить перемычку для определения программатора программным обеспечением (для AVRDUDE не обязательно). Перемычка должна соединять выводы 2-12.
Следует обратить внимание, что схема не имеет промежуточного буфера и не имеет гальванической развязки по отношению к параллельному порту, поэтому во избежание вывода из строя параллельного порта подключать и отключать кабель следует при выключенном питании на плате, где установлен контроллер. Кроме того, когда программатор подключен к параллельному порту, следует избегать короткого замыкания его выводов.
Настройка AVRDUDE
В Windows 2000 и Windows XP запрещена прямая работа с параллельным (LPT) портом, поэтому для нормальной работы AVRDUDE необходимо установить драйвер giveio.sys. Для установки этого драйвера зайдите в папку WinAVR\bin и запустите файл install_giveio.bat (удалить драйвер из системы можно, запустив файл remove_giveio.bat).
В Windows 98 никаких специальных настроек не требуется.