Главная arrow Программирование arrow AVR arrow AVR-USB162MU: макетирование и изготовление программатора AVRISP-MKII в домашних условиях Saturday, June 24 2017  
ГлавнаяКонтактыАдминистрированиеПрограммированиеСсылки
UK-flag-ico.png English Version
GERMAN-flag-ico.png Die deutsche Version
map.gif карта сайта
нашли опечатку?

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

Поделиться:

AVR-USB162MU: макетирование и изготовление программатора AVRISP-MKII в домашних условиях Версия для печати
Написал microsin   
14.06.2011

Программатор 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 (см. [2]).

USBTiny_MKii_Rev1-1_top.jpg USBTiny_MKii_Rev1-1_bottom.jpg USBTiny_MkII_Rev1-1_overview_brd_txt.jpg
USBTiny_MKii_connectors.png USBTinyMkII_Blue.jpg USBTiny_MkII_Rev2_overview_brd_txt.jpg

Исходники 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 и автоматически установила драйвер к нему. Драйвер будет присутствовать в системе и установится сам, если ранее Вы установили на компьютер AVRStudio.

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

Среда AVRStudio радушно приняла программатор как родной. По кнопке с иконкой микросхемы 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 (порт 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 поддерживается в AVRStudio начиная с версии 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

В AVRStudio 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, на компьютере будут мирно существовать обе версии, и можно пользоваться каждой версией. В AVRStudio 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 непопулярны, и в России на рынке практически отсутствуют.

[Ссылки]

1. Страничка программатора AVRISP mkII на сайте Atmel.
2. AVRISP-MKII Clone (2010).
3. Библиотека LUFA для микроконтроллеров AVR с аппаратным USB. Русское описание LUFA, документация на русском языке по API LUFA.
4. Макетная плата AVR-USB162MU.
5. AVR1612: PDI programming driver. AVR1005: Getting started with XMEGA - краткое описание XMEGA, как его программировать и отлаживать.
6. AVR918: Using the Atmel Tiny Programming Interface (TPI).
7. Прямая ссылка для закачки AVRStudio 5.0.1163 (без регистрации). 
8. Исходные коды программатора AVRISP-MKII (с исправленными багами), описанного в статье. Исходный код лежит в папке LUFA101122\Projects\AVRISP-MKII\, скомпилированная прошивка в подпапке hex, документация в подпапке doc.
9. Макетная плата Olimex AVR-PX128A1 с установленным чипом ATxmega128A1.

Последнее обновление ( 02.09.2011 )
 

Комментарии  

  1. #6 Александр
    2014-08-2218:09:08 Возникла проблема - на Win 8 не устанавливается драйвер. На семёрке без проблем. Может подскажете в чем причина?

    microsin: причин может быть несколько. Например, включенная проверка цифровой подписи сертификатов, или отсутствие какого-то файла для драйвера. Пожалуйста, прогуглите запрос "Windows 8 не устанавливается драйвер", и возьмите драйвер для программатора из свежей версии библиотеки LUFA.
  2. #5 ДИМИТРИУС
    2013-04-2920:37:55 А исходники из библиотеки LUFA для программатора под LINUX-ом компилировал или в винде?

    microsin: компилировалась прошивка для программатора AVRISP-MKII из исходного кода [8] в среде Windows, но ничего не мешает компилировать и под Linux.
  3. #4 ДИМИТРИУС
    2013-03-2411:34:02 А этот программатор, работает из под AVR Studio 6?

    microsin: AVR Studio 6 не существует, есть Atmel Studio 6. Программатор AVRISP mkII, описанный в этой статье, без танцев с бубном работает только с AVR Studio 4 (проверялось на версии 4.19, билд 730). На всех более старших студиях есть проблемы, которые могут быть решены сменой прошивки программатора (если таковую найдете). Однако, поскольку этот клон не поддерживает обновление прошивки прямо из Atmel Studio, пользоваться родной Atmel-овской утилитой программировани я лучше только из AVR Studio 4.

    В 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 © 2004-2011.

    Connected to AVRISP mkII on port USB:0000A0012825
    Device parameters loaded
    Programming mode entered
    Signature is 0×1E 0×93 0×0B
    Programming mode left
    Connection to AVRISP mkII closed
  4. #3 Денис
    2013-01-2414:01:04 Если собирать клон AVRISP mkII на макетке AVR-USB162 будет ли он программировать весь спектр приведенных выше контроллеров?

    microsin: не имеет значения, на какой макетке собирать, на AVR-USB162, AVR-USB162MU или какой-то другой. Главное условие - чтобы на макетке стоял чип AVR с аппаратной поддержкой USB (AT90USB162). Прошивку для программатора AVRISP-MKII можно перекомпилирова ть даже для другого чипа AVR USB.
  5. #2 Georgy
    2012-01-1913:09:38 Спасибо за ответ. Со всеми остальными фьюзами, кроме RST DSBL тоже экспериментиров ал, остальные влияния не оказывают. Частота генератора тоже не влияет, и каким образом CKDIV8 влияет на видимость кристалла по ISP, мне тоже непонятно. Интересней всего, что фьюз CKDIV8 успешно программируется (смотрел другим программатором AVR-Doper по тому же ISP), после чего кристал ATtiny13A становится недоступен. Пробовал экспериментиров ать с версией AVRISP-MKII на кварце 8 мГц и 16 мГц кварцами - в этом плане поведение одинаковое. Оно бы конечно ничего, но поскольку если у ATtiny13A фьюз взведен, то ее новую не зашьешь, что сильно снижает впечатление от клона AVRISP-MKII.

    microsin: согласен с Вами - так как AVR-Doper читает по ISP ту же самую ATtiny13A с взведенным фьюзом CKDIV8, то вероятно имеет место быть какая-то недоработка в схеме или, что вероятнее всего, в firmware программатора AVRISP-MKII. Если будет такая возможность, то обязательно поразбираюсь с этим багом.
  6. #1 Georgy
    2012-01-1623:58:16 Собрал, вроде работает. Правда тут же вылез один "глюк". Тренировался на ATtiny13A, у которого по умолчанию взведен ckdiv8. Пока не сбросил другим программатором это фуз, программатор мою tiny в упор видеть не хотел. Не взирая на все мои эксперименты с ISP freguency. После этого все шарит, до тех пор пока не взвожу ckdiv8. Не сталкивались с таким?

    microsin: не сталкивался, и к сожалению попробовать не на чем. Фьюз CKDIV8 по идее никаким боком не должен влиять на видимость кристалла по ISP - ведь это простой делитель тактовой частоты. Но есть другие фьюзы, которые могут выставить внешнюю частоту (от кварца) SUT_CKSEL - вот ими как раз брикнуть чип можете запросто. Тогда надо либо подавать внешнюю тактовую частоту, либо использовать не ISP, а HVSP программатор (например, AVR-Doper).

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

:D:lol::-);-)8):-|:-*:oops::sad::cry::o:-?:-x:eek::zzz:P:roll::sigh:

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

< Пред.   След. >

Top of Page
 
microsin © 2017