Программирование AVR: работа с USB AVR-USB162MU: макетирование и изготовление программатора AVRISP-MKII в домашних условиях Mon, December 09 2024  

Поделиться

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

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


AVR-USB162MU: макетирование и изготовление программатора AVRISP-MKII в домашних условиях Печать
Добавил(а) microsin   

Программатор AVRISP-MKII от компании Atmel - весьма серьезное устройство, которое может прошивать (только прошивать, внутрисхемную отладку он делать не умеет) большой список микроконтроллеров по протоколам ISP, PDI и TPI.

Вот этот список, взятый с сайта Atmel:

Atmel AVR 8- and 32-bit Automotive
ATmega164P, ATmega169P, ATmega324P, ATmega328P, ATmega644P, ATtiny24, ATtiny25, ATtiny44, ATtiny45, ATtiny84, ATtiny85

Atmel AVR 8- and 32-bit - AVR XMEGA
ATxmega128A1, ATxmega128A3, ATxmega128A4, ATxmega128D3, ATxmega128D4, ATxmega16A4, ATxmega16D4, ATxmega192A1, ATxmega192A3, ATxmega192D3, ATxmega256A1, ATxmega256A3, ATxmega256A3B, ATxmega256D3, ATxmega32A4, ATxmega32D4, ATxmega384A1, ATxmega64A1, ATxmega64A3, ATxmega64A4, ATxmega64D3, ATxmega64D4

Atmel AVR 8- and 32-bit - megaAVR
AT90PWM1, AT90PWM2, AT90PWM216, AT90PWM2B, AT90PWM3, AT90PWM316, AT90PWM3B, AT90PWM81, ATmega128, ATmega1280, ATmega1281, ATmega128A, ATmega16, ATmega162, ATmega164A, ATmega164P, ATmega164PA, ATmega165, ATmega165P, ATmega165PA, ATmega168, ATmega168A, ATmega168P, ATmega168PA, ATmega169, ATmega169A, ATmega169P, ATmega169PA, ATmega16A, ATmega2560, ATmega2561, ATmega32, ATmega324A, ATmega324P, ATmega324PA, ATmega325, ATmega3250, ATmega3250A, ATmega3250P, ATmega325A, ATmega325P, ATmega325PA, ATmega328, ATmega328P, ATmega329, ATmega3290, ATmega3290A, ATmega3290P, ATmega329A, ATmega329P, ATmega329PA, ATmega32A, ATmega48, ATmega48A, ATmega48P, ATmega48PA, ATmega64, ATmega640, ATmega644, ATmega644A, ATmega644P, ATmega644PA, ATmega645, ATmega6450, ATmega6450A, ATmega6450P, ATmega645A, ATmega645P, ATmega649, ATmega6490, ATmega6490A, ATmega6490P, ATmega649A, ATmega649P, ATmega64A, ATmega8, ATmega8515, ATmega8535, ATmega88, ATmega88A, ATmega88P, ATmega88PA, ATmega8A

Atmel AVR 8- and 32-bit - tinyAVR
ATtiny12, ATtiny13, ATtiny13A, ATtiny15L, ATtiny20, ATtiny2313, ATtiny2313A, ATtiny24, ATtiny24A, ATtiny25, ATtiny26, ATtiny40, ATtiny4313, ATtiny43U, ATtiny44, ATtiny44A, ATtiny45, ATtiny48, ATtiny84, ATtiny84A, ATtiny85

MCU Wireless - Bundles
ATmega1280R212, ATmega1280R231, ATmega1281R212, ATmega1281R231, ATmega1284PR231, ATmega1284RZAP, ATmega128RZAV, ATmega128RZBV, ATmega2560R212, ATmega2560R231, ATmega2561R212, ATmega2561R231, ATmega256RZAV, ATmega256RZBV, ATmega644PR231, ATmega644R212, ATmega64RZAPV, ATmega64RZAV

Сделано довольно много попыток клонировать устройство, самые лучшие из клонов пожалуй USBTiny Mkii и USBTiny-MkII SLIM programmer (см. [2] и врезки ниже).

Недавно собрал себе еще один клон программатора AVRISP-mkII, программатор mkII-slim [2]. Программатор заработал сразу, ничего плохого сказать про него не могу. На борту у него стабилизатор напряжения на 3.3V, и транслятор уровней, так что можно без проблем шить чипы на напряжении 3.3V и 5V (уровни выставляются перемычкой). Прошивка в него заливается штатно, через Flip, все как обычно.

Примечание. ИМХО не надо было городить транслятор уровней, достаточно было бы поставить токоограничительные резисторы, однако автор программатора решил подойти к разработке основательно.

Программатор замечательно работает под Windows, как родной, в среде AVR Studio 4.19. В среде Linux (и под Windows тоже) можно пользоваться утилитой AVRDUDE. Особенно порадовали нарядные светодиодики LED1 и LED2, которые хитро перемигиваются при подключении к компьютеру (и причем по-разному, в зависимости от того, какой драйвер установлен), и при обмене данными (когда прошивается чип).

mkII slim 2 0 IMG 2653

mkii slim 1.1 schematic

RefDes Номинал # Описание
C1, C2 33 пФ 2 Эти конденсаторы (SMD 0805) нужны для стабильного запуска кварцевого генератора. Схема часто нормально работает и без них.
C3 1 мкФ 1 Фильтрующий керамический конденсатор (SMD 1206).
C4 10 мкФ 1 Танталовый конденсатор (SMD типоразмер A).
C5, C6, C7 0.1 мкФ 3 Фильтрующий керамический конденсатор (SMD 0805).
HWB, RST 2 Штырьки для перемычек. Их запаивать не обязательно (эти перемычки нужны для запуска USB-загрузчика DFU, если понадобится обновить прошивку программатора).
IC1 AT90USB162-AU 1 Микроконтроллер Atmel (корпус TQFP32).
IC2 GTL2003 1 Микросхема согласования уровней (корпус TSSOP20).
IC3 ZLDO1117 1 Low-dropout стабилизатор напряжения (корпус SOT223).
JP2   1 Перемычка для переключения напряжения интерфейса программирования (3.3V или 5V).
LED1 зеленый 1 Светодиод SMD 0805. Когда этот светодиод горит, то это означает, что программатор прошел энумерацию в операционной системе (т. е. система опознала программатор как устройство USB). Если при этом постоянно горит светодиод LED2, то необходима установка драйвера.(1)
LED2 красный 1 Светодиод SMD 0805. При включении питания (подключение шнуром USB программатора к компьютеру), если установлен драйвер, этот светодиод мигает несколько раз, и потом гаснет. При передаче данных (когда программатор обменивается данными с программируемым чипом) этот светодиод мигает.(2)
Q1 16 МГц 1 Кварцевый резонатор.
R1, R6 1 кОм 2 Резистор SMD 0805.
R2, R3 470 Ом 2 Резистор SMD 0805.
R4, R5 27 Ом 2 Резистор SMD 0805.
R8, R9 47 Ом 2 Резистор SMD 0805.
R10 100 кОм 1 Резистор SMD 0805.
X1 miniUSB 1 Коннектор miniUSB type B female.
X2, X3, X4   3 Коннекторы для подключения к программируемым микросхемам (интерфейсы ISP, TPI, PDI).
F1 PTC FUSE 500 mA 1 Самовосстанавливающийся предохранитель (так называемый polyfuse, polyswitch, resettable fuse) на 0.5A в корпусе SMD 1812.

Примечания (1), (2). Поведение светодиодов зависит от прошивки программатора, и от того какой установлен драйвер. Подробнее см. документацию по ссылкам [2] и документацию к исходным кодам программатора.

mkii slim 2.0 board mkII slim 2 0 parts for assembly
mkII-slim,
пустая плата
mkII slim, набор
основных деталей

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

Исходный код, готовые прошивки, документация: 150411mkii_slim.zip. Советую брать прошивку версии 130303 (файл AVRISP-MKII_130303_toggle_driver.hex). Здесь исправлены некоторые баги, а также предусмотрено быстрое переключение между USB-драйвером Jungo (который под Windows в составе AVR Studio) и LibUSB (через который под Windows работает AVRDUDE). Двойное мигание светодиодами при сбросе покажет, что работает драйвер Jungo, а если было четыре вспышки, то активен драйвер LibUSB. Также в этой прошивке реализовано запоминание последнего типа драйвера, и запоминание последней выбранной скорости ISP.

Примечание. В любом случае для корректной работы программатора требуется установка драйвера. Драйвер Jungo для этого программатора оболочка программатора (утилита для программирования AVRprog) есть в составе AVR Studio 4.19 (драйвер ищите в папке c:\Program Files\Atmel\AVR Tools\usb\).

При необходимости можно сменить / обновить прошивку программатора в любой момент прямо через USB. Для этого служат перемычки RESET и HWB (сначала надо замкнуть HWB, потом замкнуть на короткое время RESET, после чего запустится загрузчик DFU и можно пользоваться штатной утилитой программирования FLIP от Atmel).

Исходники USBTiny Mkii доступны свободно в составе проектов библиотеки LUFA (см. [3], папка Projects\AVRISP-MKII\).

[AVRISP-MKII, интерфейс ISP]

Сначала попытался смакетировать и опробовать работу программатора в режиме ISP. Из комплектующих применил макетную плату AVR-USB162MU (см. [4]) и плату для макетирования без пайки ProsKit. В качестве подопытного микроконтроллера выступал ATtiny2313A. Для упрощения схемы буфер между программируемым микроконтроллером ATtiny2313A и макетной платой AVR-USB162MU решил не ставить, чип ATtiny2313A запитал прямо от макетной платы через интерфейс USB. На ножке C6 макетной платы присутствует выходной сигнал частоты 4 МГц, который можно использовать как такты для "брикнутых" чипов, у которых ошибочно установлены перемычки fuses (в моем макете этот сигнал не используется и никуда не подключен). Вот вид собранного простого макета:

AVRISP-MkII-maket-IMG_1244.JPG

Исходники взял из библиотеки LUFA (см. [3], папка Projects\AVRISP-MKII\), опции даже менять почти не пришлось, нужно было только добавить программные драйверы для платы (в LUFA\Drivers\Board\ создал папку MICROSIN162MU как копию уже имеющейся папки MICROSIN162, поправил файл LEDs.h в этой папке, и отредактировал файл LUFA\Common\BoardTypes.h - добавил туда по аналогии описание для новой платы). Make clean, make all в папке Projects\AVRISP-MKII\, и готовый файл прошивки AVRISP-MKII.hex у меня на руках. Прошил его с помощью утилиты Flip в память чипа AT90USB162MU макетной платы AVR-USB162MU.

Таблица соединений с чипом ATtiny2313A, корпус PDIP20

ATtiny2313A сигнал AVR-USB162MU
PB5, выв. 17 MOSI B2
PB6, выв. 18 MISO B3
PB7, выв. 19 SCK B1
PA2, выв. 1 RST B4
GND, выв. 10 GND GND
VCC, выв. 20 VCC VCC
не используется 4MHz C6

Назначение сигналов в таблице (центральная колонка):

MOSI - Master Output Slave Input. Выход программирующего микроконтроллера, мастера шины SPI (в нашем случае это чип AT90USB162MU), вход программируемого чипа (в нашем случае это ATtiny2313A). Шина для последовательной передачи данных в программируемый чип (через протокол ISP передача команд, данных для записи в память или во фьюзы).
MISO - Master Input Slave Output. Вход программирующего микроконтроллера, мастера шины SPI (в нашем случае это чип AT90USB162MU), выход программируемого чипа (в нашем случае это ATtiny2313A). Шина для последовательной передачи данных из программируемого чипа (через протокол ISP получение его состояния, содержимого памяти и фьюзов).
SCK - Synchro ClocK. Выход программирующего микроконтроллера, мастера шины SPI (в нашем случае это чип AT90USB162MU), вход программируемого чипа (в нашем случае это ATtiny2313A). Шина для тактирования данных на сигналах MOSI и MISO.
RST - ReSeT. Выход программирующего микроконтроллера (в нашем случае это чип AT90USB162MU), вход программируемого чипа (в нашем случае это ATtiny2313A). Шина для перевода программируемого чипа в состояние, когда он будет отвечать на команды протокола ISP.
GND - GrouND. Земля, общий провод, он же минус питания.
VCC - напряжение питания для программируемого чипа. В нашем примере как программатор (чип AT90USB162MU), так и программируемый чип (ATtiny2313A) питаются от шины USB напряжением +5 вольт. Это допустимо в том случае, если программируемое устройство не потребляет ток более 450 мА (так как ограничение одного порта USB на отдаваемый ток 500 мА). Перемычкой SJ1 можно переключить питание программируемого чипа с 5 вольт на 3.3 вольта, но в этом случае допустимый ток потребления программируемым чипом уменьшится до 100 мА, так как это ограничение внутреннего стабилизатора напряжения AT90USB162MU. Перемычка JP1 подает питание на программируемое устройство, её необходимо установить, когда программируемое устройство запитывается от программатора, и снять, если программируемое устройство питается от собственного источника питания.
4MHz - тактовая частота для подачи на программируемый микроконтроллер, если такая частота вдруг нужна. В нашем случае это не используется, так как в программируемом микроконтроллере ATtiny2313A в настоящий момент фьюзы настроены на использование внутреннего тактового генератора.

В левой колонке перечислены наименование ножек и номера выводов чипа ATtiny2313A (корпус PDIP20), а в правой колонке - наименование ножек макетной платы AVR-USB162MU (см. [4]).

Если делать программатор AVRISP-MKII в режиме ISP на макетной плате AVR-USB162MU, то схема получается безумно простой (полная схема программатора AVRISP-MKII с интерфейсом ISP, если её собирать не на макетной плате AVR-USB162MU, будет посложнее).

AVRISP-MKII-isp-mode-AVR-USB162MU.PNG

Попробовал подключить новоиспеченный программатор AVRISP-MKII к компьютеру. Операционная система Windows XP радостно нашла новое устройство LUFA AVRISP MkII Clone и автоматически установила драйвер к нему. Драйвер будет присутствовать в системе и установится сам, если ранее Вы установили на компьютер AVR Studio. Драйвер (информационный файл avrispmkii.inf) при установке AVRStudio автоматически копируется в папку %windir%\inf.

AVRISP-MkII-setup01.PNG AVRISP-MkII-setup02.PNG AVRISP-MkII-setup03.PNG
AVRISP-MkII-setup04.PNG AVRISP-MkII-setup05.PNG AVRISP-MkII-setup06.PNG

Среда AVR Studio радушно приняла программатор как родной. По кнопке с иконкой микросхемы AVR можно запустить утилиту программатора. В диалоге настройки подключения (появляется при первом запуске, или при отсутствии подключения к последнему настроенному программатору) нужно указать тип программатора IAVRISP mkII, и тип подключения USB. Далее запустится окно всем известной оболочки управления программатором.

AVRISP-MkII-AVRStudio01.PNG AVRISP-MkII-AVRStudio02.PNG AVRISP-MkII-AVRStudio03.PNG

При тестировании нашел и исправил неприятный баг, связанный с зависанием программатора, после чего он "отваливался" от системы и становился недоступным (до нового переподключения USB). Зависание устройства происходило из-за зацикливания в процедуре SPI.h -> SPI_TransferByte (цикл while (!(SPSR & (1 << SPIF)));).

Причина зависания была в том, что сигнал ~SS порта SPI (порт PB0 чипа AT90USB162, вывод 14) был в процедуре SPI.h -> SPI_Init ошибочно настроен как ВХОД С НАГРУЗОЧНЫМ РЕЗИСТОРОМ (pull-up). Этот порт PB0 (сигнал ~SS порта SPI, который может использоваться для выборки аппаратуры, работающей по шине SPI) не был никуда подключен и не использовался ни в аппаратуре, ни в программе AVRISP-MKII. Из-за того, что сигнал ~SS не успевал нарасти до уровня лог. 1 (из-за емкости монтажа?) в момент начала передачи функцией SPI_TransferByte, узел SPI ошибочно детектировал "захват" шины SPI другим мастером (которого конечно же нет). Баг носит случайный характер, и иногда не проявляется (из-за шума на цепях питания и в линии ~SS). Чтобы полностью устранить баг, нужно либо повесить ножку ~SS на + питания через pull-up резистор (порт PB0 микроконтроллера AT90USB162MU для нашего случая), либо настроить сигнал ~SS порта SPI как ВЫХОД (с любым логическим состоянием, 0 или 1). Вот что я рекомендую исправить в подпрограммах SPI_Init и SPI_ShutDown:

[SPI_Init оригинальная версия, с ошибкой]

DDRB  |=  ((1 << 1) | (1 << 2));
DDRB  &= ~((1 << 0) | (1 << 3));
PORTB |=  ((1 << 0) | (1 << 3));

[SPI_Init исправленный]

//DDRB |=  (           (1 << 1) | (1 << 2));
DDRB    |= ((1 << 0) | (1 << 1) | (1 << 2));
//DDRB &= ~((1 << 0) |                     (1 << 3));
DDRB   &= ~(                               (1 << 3));
PORTB  |=  ((1 << 0) |                     (1 << 3));

[SPI_ShutDown оригинальная версия]

DDRB &= ~((1 << 1) | (1 << 2));

[SPI_ShutDown исправленный]

//DDRB &= ~(          (1 << 1) | (1 << 2));
DDRB    &= ~((1 << 0) | (1 << 1) | (1 << 2));

Подробнее о работе сигнала ~SS порта SPI можно прочитать в даташите AT90USB162, раздел 16.1 SS Pin Functionality ("If SS is configured as an input, it must be held high to ensure Master SPI operation." - можно перевести как "Если порт SS сконфигурирован как вход (тут идет речь о режиме Master SPI), то для обеспечения функционирования мастера шины (SPI) его уровень должен удерживаться в состоянии логической 1").

[AVRISP-MKII, интерфейс PDI]

Интерфейс PDI используется для программирования микроконтроллеров серии XMEGA. PDI (Program and Debug Interface) - проприетарный интерфейс Atmel для программирования и отладки устройств на микроконтроллерах (подробнее см. AVR1612 и AVR1005 [5]). Программирование микроконтроллеров серий XMEGA поддерживается в AVR Studio начиная с версии 4.18, сейчас уже доступна для закачки AVRStuduo версии 5 (см. [7]).

В качестве испытуемого чипа XMEGA для программирования был выбран ATxmega128A1, установленный на макетной плате Olimex AVR-PX128A1 (см. [9]).

AVRISP-MkII-PDI-mode-AVR-PX128A1-prog-IMAG0184.jpg

Схема подключения к программируемому чипу еще проще, используются только 3 провода (плюс четвертый питание). Если собирать программатор не на макетной плате AVR-USB162MU, то полная схема программатора AVRISP-MKII с интерфейсом PDI получится сложнее. Внимание! Почти все чипы XMEGA питаются от 3.3 вольт, поэтому перемычка SJ1 макетной платы AVR-USB162MU должна стоять в положении 2-3 на 3.3 вольта.

AVRISP-MKII-pdi-mode-AVR-USB162MU.PNG

Таблица соединений с чипом ATxmega128A1, корпус TQFP100

ATxmega128A1 сигнал AVR-USB162MU
PDI_DATA, выв. 89 PDI_IN D2
PDI_DATA, выв. 89 PDI_OUT D3
PDI_CLOCK, выв. 90 PDI_CLK D5
GND, выв. 13 (и другие) GND GND

В AVR Studio 4.18 работа с микроконтроллерами XMEGA ничем не отличается от работы с микроконтроллерами других серий. Нужно только выбрать нужный чип и интерфейс программирования PDI. На закладке HW Settings напряжение питания VTarget показывается неправильно - всегда 5 вольт, хотя это недопустимое напряжение для выбранного чипа ATxmega128A1 (максимально допустимое напряжение питания 3.6 вольт). Это происходит потому, что в аппаратуре нашего клона AVRISP-MKII отсутствует возможность измерения напряжения питания программируемого микроконтроллера, и в firmware программатора отдаваемое значение VTarget программно зафиксировано на величине 5.0 вольт.

AVRISP-MkII-AVRStudio04.PNG AVRISP-MkII-AVRStudio05.PNG AVRISP-MkII-AVRStudio06.PNG AVRISP-MkII-AVRStudio07.PNG

Клон AVRISP-MKII в режиме PDI я также попробовал в среде Atmel AVR Studio 5 (Version: 5.0.1163). После установки AVR Studio 5, если у Вас раньше была установлена AVR Studio 4, на компьютере будут мирно существовать обе версии, и можно пользоваться каждой версией. В AVR Studio 5 внешний вид оболочки программатора сильно отличается, но принцип работы не поменялся. Все так же нужно выбрать тип чипа, тип интерфейса программирования (PDI для серии AVR XMEGA), разные функции так же разбросаны по разным разделам (раньше разделы соответствовали закладкам, теперь сгруппированы в левом наборе кнопок). Я попробовал считать сигнатуру чипа, дамп памяти flash, куда была записана тест-программа Olimex, поигрался с фьюзами, все работало отлично. Новая оболочка теперь предупреждает о том, что напряжение питания чипа не соответствует допустимому, но работе это не мешает.

AVRISP-MkII-AVRStudio08.PNG AVRISP-MkII-AVRStudio09.PNG AVRISP-MkII-AVRStudio10.PNG AVRISP-MkII-AVRStudio11.PNG AVRISP-MkII-AVRStudio12.PNG

[AVRISP-MKII, интерфейс TPI]

Интерфейс TPI (Tiny Programming Interface) используется для программирования low-end микроконтроллеров Atmel серий ATtiny4, ATtiny5, ATtiny9, ATtiny10, ATtiny20, ATtiny40. TPI по сути обычный USART с двунаправленным сигналом данных и дополненный тактовым сигналом. Подробнее можно почитать в документе AVR918 [6]. Для даташита AVR918 доступны исходные коды прошивки для программатора TPI на основе микроконтроллера ATmega324P.

Схема программатора в режиме TPI очень похожа на режим PDI, отличается только цоколевкой 6-выводного разъема и наличием дополнительного сигнала RST. Если собирать программатор режима TPI не на макетной плате AVR-USB162MU, то полная схема программатора AVRISP-MKII с интерфейсом TPI получится сложнее.

AVRISP-MKII-tpi-mode-AVR-USB162MU.PNG

Таблица соединений с чипом ATtiny20, корпус TSSOP14

ATtiny20 сигнал AVR-USB162MU
PB1, выв. 3 TPI_IN D2
PB1, выв. 3 TPI_OUT D3
PB0, выв. 2 TPI_CLK D5
GND, выв. 14 GND GND
VCC, выв. 1 VCC VCC

Микроконтроллеры с интерфейсом программирования TPI непопулярны, и в России на рынке практически отсутствуют.

[Установка драйвера для программатора AVRISP mkII]

При первом подключении к компьютеру через USB операционная система Windows увидит устройство "LUFA AVRISP MkII Clone" и начнет установку драйвера. Этот драйвер имеется в составе программного пакета AVR Studio версии 4.14 build 589 (или более позднего), поэтому нужно перед установкой драйвера скачать и установить AVR Studio. После этого система Windows найдет драйвер для AVRISP MkII автоматически, нужно только указать это мастеру (от предложения мастера найти драйвер в Интернете нужно отказаться). После успешной установки драйвера у Вас в системе появится новое устройство AVRISP mkII.

AVRISP-mkII-device

[Работа с клоном AVRISP mkII в среде Atmel Studio 6]

Поскольку описанный в этой статье клон AVRISP mkII не поддерживает обновление прошивки средствами Atmel Studio 6 (меню Tools -> AVR Tools Firmware Upgrade), то работать с клоном непосредственно через родную утилиту программирования Atmel нельзя.

Однако в Atmel Studio 6 можно обойти проблему, если создать инструмент, запускающий командный файл для программирования через клон AVRISP mkII (меню Tools -> External Tools). В командной строке должна запускаться утилита консольной строки, поддерживающая AVRISP mkII (это может быть AVRDUDE, STK500.EXE). Вот пример запуска STK500.EXE для чтения сигнатуры чипа макетной платы AVR-USB-TINY45:

c:\Program Files\Atmel\AVR Tools\STK500>STK500.EXE -dATtiny85 -s -cUSB
STK500 command line programmer, v 2.4 Atmel Corp (C) 2004-2011.

Connected to AVRISP mkII on port USB:0000A0012825
Device parameters loaded
Programming mode entered
Signature is 0x1E 0x93 0x0B
Programming mode left
Connection to AVRISP mkII closed

[UPD131008 от Nobody]

Дополнение к статье, возможно будет кому-то полезно: крайние версии LUFA содержат прошивку клона AVRISP mkII, которая отлично работает с макетной платой AVR-USB162 и AVR-USB162MU [4], но сигнал RESET снимается с ноги 18 (PB4, P3 макетной платы AVR-USB162). Остальные соединения как в статье, также через защитные резисторы 200 Ом.

Исходные коды прошивки находятся в директории Projects/AVRISP-MKII исходников LUFA. Прошивка совместима с avrdude и Atmel Studio, но я пробовал только работу с Atmel Studio, по умолчанию включен режим совместимости со AVR Studio, чтобы переключить в avrdude необходимо в файле Config/AppConfig.h раскомментировать строку

//#define LIBUSB_DRIVER_COMPAT

Далее нужно изменить в файле makefile следующие строки:

BOARD = MICROSIN162F_CPU = 16000000

Вместо 16000000 нужно указать реальную частоту кварца, установленного на плате, в Гц. Для кварца допустимы частоты 8000000 и 16000000 (макетные платы AVR-USB162 и AVR-USB162M обычно поставляются с кварцем 16 МГц). Для компиляции/сборки нужно выполнить make clean и затем make в директории проекта. Если установлена Atmel Studio, то все, что нужно для компиляции, уже есть. Можно также компилировать, если установлен пакет WinAVR.

После заливки прошивки через FLIP (это фирменный бутлоадер USB компании Atmel, который имеется в плате) и сброса микроконтроллера (или переподключения к компьютеру) в системе появится USB-устройство AVRISP mkII. Если включен режим совместимости со Atmel Studio и на компьютере Atmel Studio уже установлена, то драйвера установятся автоматически.

Светодиод на плате показывает активность интерфейса. Для работы с программатором необходимо выбрать в меню Tools среды Atmel Studio пункт Device Programming, открывать или создавать проект не нужно. Скриншоты для статьи прилагаются.

AVRISP162-nobody-common-view AVRISP162-nobody-AtmelStudio1 AVRISP162-nobody-AtmelStudio2 AVRISP162-nobody-AtmelStudio3 AVRISP162-nobody-AtmelStudio4

Исходный код проекта находится в директории LUFA-130901\Projects\AVRISP-MKII [10]. Проект настроен на кварц 16MHz и совместимость с Atmel Studio. Также в поддиректории bin находятся готовые скомпилированные прошивки AVRISP-MKII для платы AVR-USB162 на частоты кварцев 8MHz и 16MHz, три типа:

• bin\AS: прошивка AVRISP-MKII в режиме совместимости с Atmel Studio.
• bin\AVRDude: прошивка AVRISP-MKII в режиме совместимости с AVRDude.
• bin\Universal: универсальная, переключение между режимами совместимости в этой прошивке осуществляется сбросом контроллера кнопкой RESET (только так, переподключение питания на режим совместимости не влияет), при этом контроллер запоминает последний выбранный режим и при подаче питания переключается в него.

В заключение приведена схема подключения внешнего коннектора ISP для внутрисхемного программирования внешних устройств на AVR.

AVRISP162-nobody-ext-connections AVRISP162-nobody-standard-ISP6 AVRISP162-nobody-nonstandard-ISP6

[UPD170825 от Maxim]

В последней версии библиотеки Lufa (LUFA 170418) прошивка программатора работает нормально и с Atmel Studio 7. Эта прошивка универсальная, т. е. она работает автоматически и с Atmel Studio, и с AVRDUDE, джампер сброса дергать не надо.

К сожалению, не могу на него четко и ясно ответить на этот вопрос, потому что время идет, и все меняется. Во-первых, не знаю, какая именно текущая сейчас версия 7-й Atmel Studio, и какие требования у неё к дескрипторам программатора AVRISP-mkII (Atmel Studio постоянно обновляется, и пользуюсь я в основном только AVR Studio 4.19). Во-вторых, версия программатора тоже может измениться, а я не автор прошивки. Поэтому Вам придется самому попробовать и все выяснить, какая именно студия совместима с Вашей прошивкой программатора.

Старая студия версии 4.19 [7] и новая (по крайней мере Atmel Studio 6 версии) вполне себе мирно уживаются на одном компьютере. Поэтому советую установить обе версии студии, и старую и новую. С AVR Studio 4.19 наверняка программатор будет работать. Если нужны подробности, то обращайтесь за информацией на сайт разработчика программатора, и прогуглите - наверняка уже кто-то разбирался с тем, как подружить программатор с новыми версиями Atmel Studio.

Кроме того, версии программатора, которые подходят к разным студиям, отличаются друг от друга только информацией в USB-дескрипторах. Поскольку исходный код программатора открыт и распространяется бесплатно, Вы можете в свое удовольствие экспериментировать с версиями, генерируя прошивки для тех студий, которые Вам больше нравятся. Исходный код программатора ищите в библиотеке LUFA, или см. [8, 10].

[Ссылки]

1. Atmel AVRISP mkII In-System Programmer (ATAVRISP2) site:atmel.com - страничка программатора AVRISP mkII на сайте Atmel.
2. AVRISP-MKII Clone (2010) site:fourwalledcubicle.com. USBTiny-MkII SLIM programmer site:mdiy.pl.
3. LUFA site:fourwalledcubicle.com - библиотека LUFA для микроконтроллеров AVR с аппаратным USB. Русское описание LUFA, документация на русском языке по API LUFA.
4. Макетная плата AVR-USB162MU.
5. AVR1612: PDI programming driver site:atmel.com. AVR1005: Getting started with XMEGA site:atmel.com - краткое описание XMEGA, как его программировать и отлаживать.
6. AVR918: Using the Atmel Tiny Programming Interface (TPI) site:atmel.com.
7. AVR Studio 4.13, 4.14, 4.19, 5.0 и не только - прямые ссылки для закачки различных версий AVR Studio (без регистрации).
8. 110620LUFA101122-public.ZIP - исходные коды программатора AVRISP-MKII (с исправленными багами), описанного в статье. Исходный код лежит в папке LUFA101122\Projects\AVRISP-MKII\, скомпилированная прошивка в подкаталоге hex, документация в подкаталоге doc.
9. AVR-PX128A1 site:olimex.com - макетная плата Olimex AVR-PX128A1 с установленным чипом ATxmega128A1.
10. 131008AVRISP162-nobody.zip - исходный код обновленного проекта AVRISP-MKII с поддержкой Atmel Studio 6 и avrdude, готовые прошивки на разные частоты кварцев.
11. Using the avrispmkII with avrdude on Windows site:eliaselectronics.com.

 

Комментарии  

 
0 #1 Александр 06.05.2016 21:34
Можно его использовать как параллельный программатор? Исправлять фьюзы и т. д.?

microsin: AVRISP-mkII (и его клоны) работает только как последовательны й низковольтный программатор (LVSP, ISP). Как высоковольтный параллельный программатор работает AVR-Doper (прогуглите, и найдете). Фьюзы AVR позволяет восстанавливать устройство AVR fusebit doctor (http://microsin.net/programming/avr/atmega-fusebit-doctor.html), очень рекомендую.
Цитировать
 

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


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

Top of Page