AVR. Учебный курс. Трактат о программаторах
Автор DI HALT
Опубликовано 13 июля 2008
Рубрики: AVR. Учебный курс
Метки: AVR, Программатор
Программа для микроконтроллера пишется на любом удобном языке программирования, компилируется в бинарный файл (или файл формата intel HEX) и заливается в микроконтроллер посредством программатора.
Итак, первым шагом в освоении микроконтроллера обычно становится программатор. Ведь без программатора невозможно загнать программу в микроконтроллер и он так и останется безжизненным куском кремния.
Что же представляет из себя это устройство?
В простейшем случае программатор это девайс который связывает микроконтроллер и компьютер, позволяя. Также нужна прошивающая программа, которая по специальному протоколу загонит данные в микроконтроллер.
Программаторы бывают разные под разные семейства контроллеров существуют свои программаторы. Впрочем, бывают и универсальные. Более того, даже ту же простейшую AVR’ку можно прошить несколькими способами:
Внутрисхемное программирование (ISP)
Самый популярный способ прошивать современные контроллеры. Внутрисхемным данный метод называется потому, что микроконтроллер в этот момент находится в схеме целевого устройства — он может быть даже наглухо туда впаян. Для нужд программатора в этом случае выделяется несколько выводов контроллера (обычно 3..5 в зависимости от контроллера).
К этим выводам подключается прошивающий шнур программатора и происходит заливка прошивки. После чего шнур отключается и контроллер начинает работу.
У AVR прошивка заливается по интерфейсу SPI и для работы программатора нужно четыре линии и питание (достаточно только земли, чтобы уравнять потенциалы земель программатора и устройства):
- MISO - данные идущие от контроллера (Master-Input/Slave-Output)
- MOSI - данные идущие в контроллер (Master-Output/Slave-Input)
- SCK - тактовые импульсы интерфейса SPI
- RESET - сигналом на RESET программатор вводит контроллер в режим программирования
- GND - земля
Сам же разъем внутрисхемного программирования представляет собой всего лишь несколько штырьков. Лишь бы на него было удобно надеть разъем. Конфигурация его может быть любой, как тебе удобней.
Однако все же есть один популярный стандарт:
![]() |
Для внутрисхемной прошивки контроллеров AVR существует не один десяток разнообразных программаторов. Отличаются они в первую очередь по скорости работы и типу подключения к компьютеру (COM/LPT/USB). А также бывают безмозглыми или со своим управляющим контроллером.
Безмозглые контроллеры, как правило, дешевые, очень простые в изготовлении и наладке. Но при этом обычно работают исключительно через архаичные COM или LPT порты. Которые найти в современном компьютере целая проблема. А еще требуют прямого доступа к портам, что уже в Windows XP может быть проблемой. Плюс бывает зависимость от тактовой частоты процессора компьютера.
Так что твой 3ГГЦ-овый десятиядерный монстр может пролететь, как фанера над Парижем.
Идеальный компьютер для работы с такими программаторами это какой-нибудь PIII-800Mhz с Windows98…XP.
Вот очень краткая подборка проверенных лично безмозглых программаторов:
- Программатор Громова.
Простейшая схема, работает через оболочку UniProf(удобнейшая вещь!!!), но имеет ряд проблем. В частности тут COM порт используется нетрадиционно и на некоторых материнках может не заработать. А еще на быстрых компах часто не работает. Да, через адаптер USB-COM эта схема работать не будет. По причине извратности подхода :) - STK200
Надежная и дубовая, как кувалда, схема. Работает через LPT порт. Поддерживается многими программами, например avrdude. Требует прямого доступа к порту со стороны операционной системы и наличие LPT порта. - FTBB-PROG.
Очень надежный и быстрый программатор работающий через USB, причем безо всяких извратов. C драйверами под разные операционные системы. И мощной оболочкой avrdude. Недостаток один — содержит редкую и дорогую микросхему FTDI FT232RL, да в таком мелком корпусе, что запаять ее без меткого глаза, твердой руки и большого опыта пайки весьма сложно. Шаг выводов около 0.3мм. Данный программатор встроен в демоплату Pinboard

Программаторы с управляющим контроллером лишены многих проблем безмозглых. Они без особых проблем работают через USB. А если собраны на COM порт, то без извращенских методик работы с данными — как честный COM порт. Так что адаптеры COM-USB работают на ура. И детали подобрать можно покрупней, чтобы легче было паять. Но у этих программаторов есть другая проблема — для того чтобы сделать такой программатор нужен другой программатор, чтобы прошить ему управляющий контроллер. Проблема курицы и яйца. Широко получили распространение такие программаторы как:
- USBASP
- AVRDOPER
- AVR910 Protoss
Внутрисхемное программирование, несмотря на все его удобства, имеет ряд ограничений.
Микроконтроллер должен быть запущен, иначе он не сможет ответить на сигнал программатора. Поэтому если неправильно выставить биты конфигурации (FUSE), например, переключить на внешний кварцевый резонатор, а сам кварц не поставить. То контроллер не сможет запуститься и прошить его внутрисхемно будет уже нельзя. По крайней мере до тех пор пока МК не будет запущен.
Также в битах конфигурации можно отключить режим внутрисхемной прошивки или преваратить вывод RESET в обычный порт ввода-вывода (это справедливо для малых МК, у которых RESET совмещен с портом). Такое действо тоже обрубает программирование по ISP.
Параллельное высоковольтное программирование
Обычно применяется на поточном производстве при массовой (сотни штук) прошивке чипов в программаторе перед запайкой их в устройство.
Параллельное программирование во много раз быстрей последовательного (ISP), но требует подачи на RESET напряжения в 12 вольт. А также для параллельной зашивки требуется уже не 3 линии данных, а восемь + линии управления. Для программирования в этом режиме микроконтроллер вставляется в панельку программатора, а после прошивки переставляется в целевое устройство.
Для радиолюбительской практики он особо не нужен, т.к. ISP программатор решает 99% насущных задач, но тем не менее параллельный программатор может пригодиться. Например, если в результате ошибочных действий были неправильно выставлены FUSE биты и был отрублен режим ISP. Параллельному программатору на настройку FUSE плевать с высокой колокольни. Плюс некоторые старые модели микроконтроллеров могут прошиваться только высоковольтным программатором.
Из параллельных программаторов для AVR на ум приходит только:
- HVProg от ElmChan
- Paraprog
- DerHammer
А также есть универсальные вроде TurboProg 6, BeeProg, ChipProg++, Fiton которые могут прошивать огромное количество разных микроконтроллеров, но и стоят неслабо. Тысяч по 10-15. Нужны в основном только ремонтникам, т.к. когда не знаешь что тебе завтра притащат на ремонт надо быть готовым ко всему.
Прошивка через JTAG
Вообще JTAG это отладочный интерфейс. Он позволяет пошагово выполнять твою программу прям в кристалле. Но с его помощью можно и программу прошить, или FUSE биты вставить. К сожалению JTAG доступен далеко не во всех микроконтроллерах, только в старших моделях в 40ногих микроконтроллерах. Начиная с Atmega16.
Компания AVR продает фирменный комплект JTAG ICEII для работы с микроконтроллерами по JTAG, но стоит он (как и любой профессиональный инструмент) недешево. Около 10-15тыр. Также есть первая модель JTAG ICE. Ее можно легко изготовить самому, а еще она встроена в мою демоплату Pinboard
![]() |
Прошивка через Bootloader
Многие микроконтроллеры AVR имеют режим самопрошивки. Т.е. в микроконтроллер изначально, любым указанным выше способом, зашивается спец программка — bootloader. Дальше для перешивки программатор не нужен. Достаточно выполнить сброс микроконтроллера и подать ему специальный сигнал. После чего он входит в режим программирования и через обычный последовательный интерфейс в него заливается прошивка. Подробней описано в статье посвященной бутлоадеру.
Достоинство этого метода еще и в том, что работая через бутлоадер очень сложно закосячить микроконтроллер настолько, что он не будет отвечать вообще. Т.к. настройки FUSE для бутлоадера недоступны.
Бутлоадер также прошит по умолчанию в главный контроллер демоплаты Pinboard чтобы облегчить и обезопасить первые шаги на пути освоения микроконтроллеров.
Комментарии
16 комментариев на «AVR. Учебный курс. Трактат о программаторах»
Оставьте свой отзыв
Вы должны войти, чтобы оставлять комментарии.







А что это делает в учебном курсе? чего не на главной странице?
Здарова, Артем, вот я и зашел, чего то не мог зайти долго…
Я постепенно правлю и переписываю старые статьи, чтобы привести их в более стройный и завершенный вид.
А эта статья про что была?
Эта ни про что. Она новая. Но ее явно тут не хватало. Если ты не заметил, я выбросил из учебного курса “шаг первый - программатор” Переименовав ее в “Программатор Громова” и вынес ее в Готовые устройства.
Да, заметил. Люблю изменения на этом сайте)))
Кстати, как сделать, чтобы мне на другое мыло пароль высылался, да и сообщение от сайта об оповещении, что, мол, “сообщение пришло, тебе ответили”)))?
Напиши на почту какое тебе надо новое мыло и какой нужен пароль. я вручную поправлю.
Привет всем, есть вопрос по всем этим программаторским делам.
Есть к примеру рабочий программатор AVR910 Protoss (он указан в статье).
Есть header плата с контроллером AT90CAN128 от фирмы OLIMEX. Так вот на ней кроме JTAG
разьема есть еще и резьем, который называется ICSP(In-Circut Serial Programming). Как
оказалось у этого рзьема немного другое подключение, а именно вместо стандартного ISP
подключения
Программатор Контроллер
VCC—————–VCC
RES—————–RESET
MISO—————-MISO
MOSI—————-MOSI
SCK—————–SCK
GND—————–GND
У него вот такое(ICSP подключение):
Программатор Контроллер
VCC—————–VCC
RES—————–RESET
MISO—————-TXDO
MOSI—————-RXDO
SCK—————–SCK
GND—————–GND
В инете не так много и нашел по ICSP,кроме того что это доработанная ISP. Так вот вопрос сможет ли программатор AVR910 Protoss или любой другой ISP программатор запрограммировать контроллер через разьем ICSP?
Буду благодарен за любые мысли по этому поводу. Спасибо.
Все правильно. У Мега128 разьем программирования отличается по подключению от классического тем, что ноги идут не на выводы моси мисо на тхдо рхдо.
Прошить сможешь.
всем привет. есть вопрос такой. работаю щас с 90S2313. пробовал на нем несколько программаторов: Громова, “пять проводков” и USB на FT232RL. USB-программатор никак не хочет с ним работать, при том, что с программатором Громова и “пятью проводками” работает на ура - и пишет и читает.
avrdude.exe -p 2313 -c ftbb -P ft0 -U flash:w:2313.hex:a - это команда для avrdude.
получаю:
avrdude.exe: BitBang OK
avrdude.exe: pin assign miso 3 sck 5 mosi 6 reset 7
avrdude.exe: drain OK
ft245r: bitclk 230400 -> ft baud 115200
avrdude.exe: ft245r_program_enable: failed
avrdude.exe: initialization failed, rc=-1
Double check connections and try again, or use -F to override
this check.
avrdude.exe done. Thank you.
Даю команду с -F:
avrdude.exe -p 2313 -c ftbb -P ft0 -F -U flash:w:2313.hex:a
Получаю
avrdude.exe: BitBang OK
avrdude.exe: pin assign miso 3 sck 5 mosi 6 reset 7
avrdude.exe: drain OK
ft245r: bitclk 230400 -> ft baud 115200
avrdude.exe: ft245r_program_enable: failed
avrdude.exe: initialization failed, rc=-1
avrdude.exe: AVR device initialized and ready to accept instructions
Reading |#######################################################| 100%
avrdude.exe: Device signature =0×000000
avrdude.exe: Invalid device signature
avrdude.exe: Expected signature for AT90S2313 is 1E 91 01
avrdude.exe: safemode: Verify error - unable to read fuse properly. Programmer may not be reliable.
И Это при том, что я установил ключ -F, который должен отключать верификацию сигнатуры. И другие программаторы прекрасно работают с этим микроконтроллером. Добавлю, что он уже несколько раз был перепрограммирован, то есть не “с завода”.
У кого были такие проблемы и что с этим делать?
Хм. А другие типы контроллеров шьет?
Судя по логу у тебя дудка нашла программатор, но не смогла подключиться к контроллеру.
Удалось проверить седня еще один 2313. Такие же проблемы. А мегу16 вчера шил без проблем и читал тоже.
Но самое интересное, что другие то программаторы работают с этими 2313.
И интересно, почему ключ -F не отключает верификацию
мегу8 тоже шьет.
Видел в теме про USB-программатор у Antoniy тоже были проблемы с 2313. потом он купил новый 2313 и сразу же подключил его к USB-программатору и, судя по логу, он у него заработал, только он видимо при чтении формат выходного файла не указал. Так может быть дело в том, что мои 2313 уже залочены? и тогда вопрос: как их “разлочить”? ISP наверное не поможет.
Такой вопрос:
“STK200
Надежная и дубовая, как кувалда, схема. Работает через LPT порт. Поддерживается многими программами, например avrdude. Требует прямого доступа к порту со стороны операционной системы и наличие LPT порта.”
Прямой доступ к порту это какой режим LPT потра Normal, EEP или ECP?
не могу вкурить как правильно сделать,
ресет программатора напрямую запаивать на ресет контроллера:
+———+
|tn2313 |
ISP_reset]———-[|reset |
+---------+
или на резистор 10к, который подключен к ресету мк?
+---------+
R 10k |tn2313 |
ISP_reset]———-[==]- [|reset |
+———+
Напрямую, без резистора. А через резистор в 10к ресет подключается к +питания