Программирование AVR: работа с USB AVR-USB-MEGA16: как сделать STK500-совместимый ISP и HVSP программатор (AVR-Doper) Thu, March 28 2024  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.

AVR-USB-MEGA16: как сделать STK500-совместимый ISP и HVSP программатор (AVR-Doper) Печать
Добавил(а) microsin   

Статья посвящена клону программатора STK500. Протокол STK500 разработан изначально фирмой Atmel, и поэтому описанный программатор принимается как "родной" большинством популярных программ - AVR Studio, CodeVisionAVR, BASCOM-AVR, avrdude. Программатор может быть изготовлен в двух вариантах - "облегченном", в этом случае он работает как стандартный ISP-программатор, и "полном", в этом случае дополнительно поддерживается возможность программирования чипа "высоковольтным" методом (HVSP), позволяющим восстанавливать чипы AVR (в данной версии программатора имеются сокеты для чипов с 8 и 14 ножками), брикнутые неправильной установкой фьюзов.

Программатор работает на основе исходников программатора AVR-Doper (см. ссылки [2]), который был изначально рассчитан на микроконтроллер ATmega8. Портирование программатора AVR-Doper на макетную плату AVR-USB-MEGA16 (микроконтроллер ATmega32) позволило решить проблему "курицы и яйца" (т. е. чем запрограммировать программатор) - благодаря наличию в макетной плате AVR-USB-MEGA16 бутлоадера USBasp. Программатор питается и обменивается данными с компьютером через подключение по USB. Протокол USB обрабатывается программно, с помощью популярной библиотеки V-USB. Далее для краткости я буду называть описываемый программатор просто как AVR-Doper.

Для начала несколько слов о возможностях AVR-Doper - чем он хорош и что умеет.

- HVSP позволяет использовать ножку RESET для ввода и вывода (I/O), что особенно полезно для чипов, у которых мало ножек - с 8 и 14 выводами.
- простая аппаратура программатора позволяет собрать его на односторонней печатной плате. Не требуется никаких специальных чипов для USB.
- совместимость с протоколом STK500 компании Atmel, протокол работает через встроенный преобразователь USB <--> RS232.
- настраиваемая частота тактов ISP позволяет прошивать микроконтроллеры, тактируемые с очень низкой частотой, например 32 кГц.
- частота тактов ISP может быть снижена перемычкой, если программное обеспечение не позволяет менять тактовую частоту ISP clock.
- имеется второй преобразователь USB <--> Serial для обработки отладочного вывода из программируемого устройства.
- коннектор HVSP совместим с программатором HVProg, это другой совместимый с STK500 программатор (см. ссылки [6]).
- Open Source (включая firmware и принципиальную схему).
- использует питание от USB, внешние источники питания не нужны.
- может использоваться как альтернативное firmware для плат metaboard (для построения на ней программатора), см. http://www.obdev.at/goto?t=metaboard-prog
- может использоваться как альтернативное firmware для программатора USBasp, разработанного Thomas Fischl, см. http://www.fischl.de/usbasp/
- список программируемых чипов внушает уважение как минимум, достаточно посетить страницу, посвященную STK500, на сайте Atmel (см. ссылки [4]).

AT90CAN128, AT90CAN128 Automotive, AT90CAN32, AT90CAN32 Automotive, AT90CAN64, AT90CAN64 Automotive, AT90PWM1, AT90PWM2, AT90PWM216, AT90PWM2B, AT90PWM3, AT90PWM316, AT90PWM3B, AT90PWM81, AT90S1200, AT90S2313, AT90S2323, AT90S2343, AT90S4433, AT90S8515, AT90S8535, AT90USB1286, AT90USB1287, AT90USB162, AT90USB646, AT90USB647, AT90USB82, ATmega103, ATmega128, ATmega1280, ATmega1280R212, ATmega1280R231, ATmega1281, ATmega1281R212, ATmega1281R231, ATmega1284, ATmega1284P, ATmega1284PR231, ATmega1284RZAP, ATmega128A, ATmega128RZAV, ATmega128RZBV, ATmega16, ATmega161, ATmega162, ATmega163, ATmega164A, ATmega164P, ATmega164P Automotive, ATmega164PA, ATmega165, ATmega165P, ATmega165PA, ATmega168, ATmega168 Automotive, ATmega168A, ATmega168P, ATmega168PA, ATmega169, ATmega169A, ATmega169P, ATmega169P Automotive, ATmega169PA, ATmega16A, ATmega16HVA, ATmega16M1, ATmega2560, ATmega2560R212, ATmega2560R231, ATmega2561, ATmega2561R212, ATmega2561R231, ATmega256RZAV, ATmega256RZBV, ATmega32, ATmega323, ATmega324A, ATmega324P, ATmega324P Automotive, ATmega324PA, ATmega325, ATmega3250, ATmega3250A, ATmega3250P, ATmega325A, ATmega325P, ATmega325PA, ATmega328, ATmega328P, ATmega328P Automotive, ATmega329, ATmega3290, ATmega3290A, ATmega3290P, ATmega329A, ATmega329P, ATmega329PA, ATmega32A, ATmega32C1 Automotive, ATmega32HVB, ATmega32M1, ATmega32M1 Automotive, ATmega32U4, ATmega406, ATmega48, ATmega48 Automotive, ATmega48A, ATmega48P, ATmega48PA, ATmega64, ATmega640, ATmega644, ATmega644A, ATmega644P, ATmega644P Automotive, ATmega644PA, ATmega644PR231, ATmega644R212, ATmega645, ATmega6450, ATmega6450A, ATmega6450P, ATmega645A, ATmega645P, ATmega649, ATmega6490, ATmega6490A, ATmega6490P, ATmega649A, ATmega649P, ATmega64A, ATmega64C1 Automotive, ATmega64M1, ATmega64M1 Automotive, ATmega64RZAPV, ATmega64RZAV, ATmega8, ATmega8515, ATmega8535, ATmega88, ATmega88 Automotive, ATmega88A, ATmega88P, ATmega88PA, ATmega8A, ATtiny11, ATtiny12, ATtiny13, ATtiny13A, ATtiny15L, ATtiny167, ATtiny2313, ATtiny2313A, ATtiny24, ATtiny24 Automotive, ATtiny24A, ATtiny25, ATtiny25 Automotive, ATtiny26, ATtiny261, ATtiny261 Automotive, ATtiny261A, ATtiny28L, ATtiny4313, ATtiny43U, ATtiny44, ATtiny44 Automotive, ATtiny44A, ATtiny45, ATtiny45 Automotive, ATtiny461, ATtiny461 Automotive, ATtiny461A, ATtiny48, ATtiny84, ATtiny84 Automotive, ATtiny85, ATtiny85 Automotive, ATtiny861, ATtiny861 Automotive, ATtiny861A, ATtiny88, ATtiny88 Automotive 

Короче говоря, программируется все, что шевелится.

[ISP - облегченный вариант AVR-Doper]

Для облегченного варианта программатора (поддерживающего только ISP) необходимо собрать на макетном поле платы AVR-USB-MEGA16 следующую схему:

AVR-Doper-light-MEGA16.gif

Коротко о назначении элементов схемы:

1. Микросхема 74HC126N нужна для согласования уровней сигналов при раздельном питании программируемого устройства и программатора.
2. Перемычка JP1 нужна для переключения питания программируемого устройства. Когда перемычка JP1 установлена, то программируемое устройство и микросхема 74HC126N питаются от программатора (в конечном счете от +5 вольт USB). Когда перемычка JP1 снята, то программируемое устройство и микросхема 74HC126N питаются от программируемого устройства, и это напряжение питания может отличаться от +5 вольт (например, быть +3.3 вольта).
3. Резисторы R17 и R19 служат для измерения напряжения питания программируемого устройства.
4. Коннектор SV1 ISP служит для подключения программируемого устройства. На этот разъем также выведены сигналы последовательного порта RXD и TXD микроконтроллера, что позволяет микроконтроллеру служить мостом между отлаживаемым микроконтроллером и виртуальным COM-портом компьютера. Эту возможность при желании можно использовать для отладки программы в программируемом устройстве (например, для отладочного вывода printf). Резисторы R10 и R11 нужны как ограничители тока (по крайней мере R11), так как в стандартном коннекторе ISP10 ножки 8 и 10 могут соединяться в землей GND.
5. На контакт 3 разъема SV1 ISP выводится тактовая частота для программируемого микроконтроллера, которая может использоваться для оживления микроконтроллера, тактовый генератор которого не может запуститься из-за ошибки в установке фьюзов. Тактовая частота CLK может быть изменена под управлением программы на компьютере (например, в AVR Studio).
6. Перемычка JP2 Slow SCK служит для снижения частоты тактов программирования ISP, если программное обеспечение не позволяет менять частоту тактов ISP.
7. Перемычка JP3 USB HID служит для перевода программатора AVR-Doper из стандартного режима USB CDC (виртуальный COM-порт) в нестандартный (по отношению к протоколу STK500) режим USB HID. Этот режим не поддерживается AVR Studio, однако может понадобиться на операционных системах типа Linux или FreeBSD, где иногда могут быть проблемы с программным обеспечением в режиме USB CDC для AVR-Doper. Например, популярный консольный программатор avrdude поддерживает режим USB HID программатора AVR-Doper. Если перемычка USB HID установлена (состояние перемычки считывается при включении питания программатора), то активируется режим USB HID.

Больше никаких особенностей схема не имеет, все тупо и просто. Внешний вид собранного программатора:

AVR-Doper_top_IMG_1061.JPG AVR-Doper_bottom_IMG_1059.JPG

Назначение установленных на плату деталей:

JP1 Power переключает тип питания программируемого устройства (см. описание принципиальной схемы).
JP2 Slow SCK переключает частоту тактов ISP (см. описание принципиальной схемы).
JP3 USB HID переключает тип интерфейса программатора (см. описание принципиальной схемы).
SV1 ISP разъем для подключения программируемого устройства (см. описание принципиальной схемы).

12-выводный коннектор мама у нижнего края платы пока никуда не подключен. Он предназначен для расширения функционала программатора - добавления возможности HVSP.

Правильно собранный и прошитый (с помощью встроенного в макетную плату bootloader-а USBasp) программатор никакой наладки не требует и начинает работать сразу.

Внимание! Чтобы правильно работал ADC для измерения напряжения, нужно не забыть выпаять резистор R3 платы AVR-USB-MEGA16 (т. к. используется внутренний источник опорного напряжения 2.56 вольт).

AVR-Doper_running_IMG_1073.JPG

Программатор AVR-Doper в "боевом положении" - считывается память flash у микроконтроллера ATmega32, установленного на макетной плате AVR-USB-MEGA16.

[Установка AVR-Doper в операционной системе Windows]

Процесс несложный, разберем его по шагам.

1. Снять перемычку JP3 USB HID (если она установлена). Программатор у нас будет работать в режиме USB CDC (виртуальный COM-порт), этот режим работает по стандартному протоколу STK500, что позволит использовать программатор в большинстве популярных IDE для программирования AVR (AVR Studio, CodeVisionAVR, BASCOM-AVR и др.).
2. Подключить программатор по USB к компьютеру. При первом подключении операционная система обнаружит новое устройство и запросит драйвер. В качестве драйвера нужно подсунуть файл avrdoper.inf или avrdoper-vista.inf (эти файлы можно найти в архиве по ссылке [5]). При предупреждении о неподписанном (unsigned) программном обеспечении выбрать "установить все равно".
3. После установки в системе появится еще один COM-порт, его номер можно подсмотреть в Диспетчере Устройств. Номер COM-порта нужно знать, чтобы правильно запустить STK50/AVR-Doper в популярных программах (AVR Studio, CodeVisionAVR, BASCOM-AVR и др.).

[HVSP - полный вариант AVR-Doper]

Этот вариант схемы немного сложнее, но зато он поддерживает сразу 2 режима программатора STK500 - ISP и HVSP.

AVR-Doper-HVSP-MEGA16-partA

AVR-Doper-HVSP-MEGA16-partB

Схема взята почти один-в-один с оригинального варианта, с минимальными переделками - поменял силовой транзистор преобразователя на MOSFET, и добавил индикационный светодиод REG_LED LED1, показывающий нагрузочный режим регулятора напряжения преобразователя (устанавливать этот светодиод необязательно). Схема состоит из двух частей - PARTA и PARTB. Часть PARTA целиком собрана на макетной плате AVR-USB-MEGA16 и почти полностью повторяет схему облегченного варианта AVR-Doper, так что облегченный вариант можно легко допаять, подключив коннектор-маму JP4. Часть PARTB собрана на отдельной подсоединяемой плате и содержит преобразователь напряжения, транзисторные ключи и сокет для подключения программируемых микросхем в корпусах DIP8 и DIP14. Схема никаких особенностей не имеет и наладки не требует - правильно собранная, начинает работать сразу. На фото показан внешний вид дополнительной платы PARTB и программатор в сборе. Два маленьких коннектора ISP и JTAG на макетной плате AVR-USB-MEGA16 используются только для жесткости - как механическое крепление платы PARTB.

Самое сложное в изготовлении было найти дроссель (в описании сказано, что подойдет любой 0.3 .. 3 мГн). Я поступил просто - взял готовый дроссель от материнской платы с ферритовым сердечником (внимание: кольцевой, тороидальный сердечник не подойдет), замерил его индуктивность, снял обмотку, при этом посчитав витки. Далее просто намотал новую обмотку на требуемую индуктивность подходящим проводом (индуктивность катушки прямо пропорциональна квадрату числа витков, поэтому рассчитать количество витков просто). У меня получился отличный дроссель на 1.7 мГн (216 витков эмалированного провода диаметром 0.12 мм). Сверху надел термоусадочную трубку и прогрел феном (воздушный поток 150 градусов Цельсия).

AVR-Doper_HVSP_top_IMG_1077.JPG AVR-Doper_HVSP_bottom_IMG_1082.JPG AVR-Doper_HVSP_running_IMG_1091.JPG

В режиме HVSP программатор работает в несколько раз быстрее, чем в режиме ISP (с чем связано - не знаю, наверное с особенностью протокола). Кроме того, есть полный доступ к фьюзам, позволяющим использовать ножку RESET чипа как порт ввода/вывода, что весьма полезно, если для разработки устройства на микроконтроллере Вам не хватает ножек. 

[Программное обеспечение для AVR-Doper]

Как я уже упоминал, выбор программного обеспечения богатый - как минимум AVR Studio, BASCOM-AVR и кроссплатфоменный avrdude. Сначала ничего не хотел про это писать, все вроде и так понятно, но потом все-таки решил сделать краткий обзор. Фаворит, ИМХО, среди всех программ - оболочка программатора AVR Studio. У CodeVisionAVR наблюдались глюки - после обращения к программатору программа отказывалась видеть программатор до его перетыкания в USB. Неплохая программная оболочка у программатора в BASCOM-AVR - есть возможность навигации по данным прошивки (простейший HEX-редактор). Для постоянно повторяющихся операций лучше всего подойдет консольная программа avrdude.

Все программы объединяет необходимость перед первым использованием программатора выбрать в настройках его тип (STK500 или AVRISP) и настроить COM-порт, к которому подключен программатор. Особых трудностей это не вызывает - все делается в соответствующем меню настроек, а номер COM-порта легко узнать через Диспетчер Устройств.

AVR Studio

Набор возможностей программы впечатляет. Есть доступ к всем режимам программирования, фьюзам, битам защиты, имеется настройка частот SCK ISP и частоты тактирования чипа CLK, считывание уровня напряжения питания чипа, калибровка встроенного тактового генератора и проч. Бегло рассмотрим возможности программы, пробежавшись по закладкам.

AVR-Doper-AVRStudio01.PNG

Первая закладка Main позволяет выбрать из выпадающего списка тип программируемого чипа, выбрать режим программирования (ISP или HVSP), полностью стереть чип, прочитать его сигнатуру.

AVR-Doper-AVRStudio01a.PNG

Есть также возможность установить частоту тактов SCK ISP, выбрав её из ряда частот.

AVR-Doper-AVRStudio02.PNG

Закладка Program позволяет программировать flash и eeprom чипа (для этого есть кнопки Program и система выбора файла), сверить память чипа с файлом (кнопки Verify), а также скидывать в hex-файл содержимое памяти (кнопки Read). Можно также сохранить состояние фьюзов и бит защиты в файл формата ELF, а также записать фьюзы и биты защиты данными из ELF-файла.

AVR-Doper-AVRStudio03.PNG

Переход на закладку Fuses автоматически считывает состояние перемычек, и показывает их в виде чекбоксов и в HEX-формате. В этом окне можно перемычки записывать, проверить, прочитать.

AVR-Doper-AVRStudio04.PNG

Закладка LockBits позволяет манипулировать битами защиты. Принцип работы и возможности тут те же самые, что и для закладки Fuses.

AVR-Doper-AVRStudio05.PNG

Закладка Advanced позволяет считывать или менять калибровочные данные для внутреннего тактового генератора RC.

AVR-Doper-AVRStudio06.PNG

Закладка HW Settings позволяет узнать напряжение питания программируемого чипа, а также установить тактовую частоту генератора CLK. Генератор применяемого для чипа, у которого нет кварца, либо если по каким-то причинам у чипа не работает тактовый генератор. Тактовая частота CLK выводится на ножку 3 разъема SV1 ISP программатора AVR-Doper. Я обычно этот сигнал не использую.

AVR-Doper-AVRStudio07.PNG

Закладка HW Info позволяет получить информацию по железу и прошивке программатора AVR-Doper. Сюда заглядывать нет особой необходимости.

AVR-Doper-AVRStudio08.PNG

Закладка Auto позволяет делать групповые заранее настроенные операции с чипом, которые доступны на других закладках. Я этой возможностью почти никогда не пользуюсь.

CodeVisionAVR

Тут писать особо нечего, набор операций простейший. Приведу только несколько скриншотов. К сожалению, моя версия CodeVisionAVR сильно глючила, и работать с ней было почти невозможно. 

AVR-Doper-CodeVisionAVR01.PNG AVR-Doper-CodeVisionAVR02.PNG AVR-Doper-CodeVisionAVR03.PNG AVR-Doper-CodeVisionAVR-err1.PNG AVR-Doper-CodeVisionAVR-err2.PNG

BASCOM-AVR

Из особенностей программы обращает на себя внимание то, что попасть в оболочку программатора невозможно, пока не открыт любой проект, хотя бы и новый, совершенно пустой. Оболочка довольно тормознутая при обмене с программатором, зато работает без глюков, и есть прогресс длительных операций.

AVR-Doper-BASCOM-AVR01.PNG AVR-Doper-BASCOM-AVR02.PNG AVR-Doper-BASCOM-AVR03.PNG

avrdude

Программатор AVR-Doper поддерживается консольной утилитой avrdude в режиме USB HID, начиная с версии 5.3 (более ранние версии требуют патча и перекомпиляции). Утилита работает и под Windows, и под *nix (Linux, FreeBSD). Для Windows avrdude можно скачать в составе пакета WinAVR. Версия avrdude, с которой я экспериментировал, была 5.5 (версию можно узнать командой avrdude -v). Для работы с avrdude нужно установить перемычку JP3 USB HID и переподключить USB-интерфейс программатора. Для проверки работоспособности программатора можно ввести команду avrdude -c stk500v2 -P avrdoper -p atmega32 (для чипа atmega32):

AVR-Doper-avrdude01.PNG

А вот пример сохранения памяти flash в файл на диске c:\001.hex:

AVR-Doper-avrdude02.PNG

В режиме USB HID программатор работает намного быстрее, чем в режиме USB CDC с программами AVR Studio и BASCOM-AVR. Поэтому для часто повторяющихся операций лучше всего выбрать avrdude. Имеется также написанная для avrdude графическая оболочка avrdude-gui.exe.

AVR-Doper-avrdude-gui01.PNG

Еще пробовал программатор AVR-Doper с программой CrossStudio/CrossWorks AVR 1.3. Программатор определяется и работает, однако подробно не тестировал, поскольку опыта работы с CrossStudio/CrossWorks у меня нет.

AVR-Doper-CrossStudio-for-AVR01.PNG

[Словарик терминов]

AVR популярное семейство микроконтроллеров компании Atmel. Разделяется на подгруппы AVR Classic, AVR Tiny и AVR Mega. Последние два семейства самые современные и как правило поддерживают технологию аппаратной отладки debugWIRE через ножку RESET, либо отладку через JTAG.

firmware программное обеспечение для микроконтроллера. Обычно термин применяется отдельно от термина software, чтобы подчеркнуть, что программа работает не на PC, а в "железячном" устройстве.

fuses фьюзы, перемычки. Под этим термином понимаются энергонезависимые настройки (т. е. сохраняющиеся между выключениями питания), влияющие на потребительские свойства микроконтроллера AVR. Например, фьюзами может быть запрограммирован тип тактового генератора (кварцевый или внутренний), включение по умолчанию сторожевого таймера, коэффициент деления тактовой частоты и многие другие опции. 

ISP аббревиатура In System Programming. Означает возможность записи программы firmware в чип (микроконтроллер) прямо на плате, на которой чип установлен.

HVSP аббревиатура High Voltage Serial Programmer - программатор, поддерживающий программирование чипа повышенным напряжением.

STK200 название уже несколько устаревшего протокола (разработан Atmel) обмена данными с программатором.

STK500 название популярного открытого протокола (разработан Atmel) обмена между программатором и компьютером, к которому программатор подключен. Протокол работает поверх подсоединения программатора через стандартный COM-порт (обычный, или виртуальный, работающий через USB).

брикнутый чип микроконтроллер, приведенный в нерабочее (и непрограммируемое через ISP) состояние. Восстановить такой чип можно только через HVSP.

[Ссылки]

1. STK200-совместимый программатор, собранный на базе макетной платы AVR-USB-MEGA16.
2. AVR-Doper - STK500 compatible In-System Programmer (ISP) and High Voltage Serial Programmer (HVSP) site:obdev.at.
3. Программаторы для AVR.
4. STK500 site:atmel.com.
5. 101229AVR-Doper.2008-11-27.zip - исходный код программатора AVR-Doper (ISP и HVSP версия, собранная на макетной плате AVR-USB-MEGA16), документация, принципиальная схема, драйвер (avrdoper.inf, avrdoper-vista.inf), фотографии.
6. HVProg site:der-hammer.info - еще один клон STK500 (подключается к компьютеру не через USB, а через RS-232, т. е. обычный COM-порт).

 

Комментарии  

 
0 #3 Vladimir Khludenkov 28.10.2020 16:51
Большое спасибо за проект. Скажите пожалуйста, а исходники можно посмотреть? Планирую адаптировать на мегу 128.

microsin: исходный код можете скачать по ссылке [5].
Цитировать
 
 
0 #2 дмитрий 16.03.2011 15:58
Программатор работает через usb, насколько я понимаю? И в том его преимущество перед стандартным stk500...

microsin: кроме работы через USB, у описанного программатора преимущества следующие:
- малая стоимость изготовления программатора;
- открытые исходники и схема, что позволяет делать собственные необходимые исправления и доработки - для адаптации к определенным потребностям.
Цитировать
 
 
-1 #1 Виталий 11.03.2011 03:07
За такое рисование схем молотком по голове стучать надо!
Не обижайтесь, но это УЖАС! Что либо разобрать надо часа два вкуривать, а потом понять что все не так...

microsin: согласен. Так получилось потому, что схема перерисовывалас ь с оригинала AVR-Doper. Стиль оставлен во избежание добавления лишних ошибок. Готов рассмотреть конкретные замечания, что не так и что Вы хотели бы исправить в схеме.
Цитировать
 

Добавить комментарий


Защитный код
Обновить

Top of Page