AVR-USB162MU: макетирование и изготовление программатора AVRISP-MKII в домашних условиях |
Добавил(а) microsin | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Программатор AVRISP-MKII от компании Atmel - весьма серьезное устройство, которое может прошивать (только прошивать, внутрисхемную отладку он делать не умеет) большой список микроконтроллеров по протоколам ISP, PDI и TPI. Вот этот список, взятый с сайта Atmel: Atmel AVR 8- and 32-bit Automotive Atmel AVR 8- and 32-bit - AVR XMEGA Atmel AVR 8- and 32-bit - megaAVR Atmel AVR 8- and 32-bit - tinyAVR MCU Wireless - Bundles Сделано довольно много попыток клонировать устройство, самые лучшие из клонов пожалуй 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, которые хитро перемигиваются при подключении к компьютеру (и причем по-разному, в зависимости от того, какой драйвер установлен), и при обмене данными (когда прошивается чип).
Примечания (1), (2). Поведение светодиодов зависит от прошивки программатора, и от того какой установлен драйвер. Подробнее см. документацию по ссылкам [2] и документацию к исходным кодам программатора.
Печатная плата программатора интересна тем, что с обратной стороны платы на контактные площадки выведены свободные порты 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 (в моем макете этот сигнал не используется и никуда не подключен). Вот вид собранного простого макета: Исходники взял из библиотеки 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
Назначение сигналов в таблице (центральная колонка): MOSI - Master Output Slave Input. Выход программирующего микроконтроллера, мастера шины SPI (в нашем случае это чип AT90USB162MU), вход программируемого чипа (в нашем случае это ATtiny2313A). Шина для последовательной передачи данных в программируемый чип (через протокол ISP передача команд, данных для записи в память или во фьюзы). В левой колонке перечислены наименование ножек и номера выводов чипа ATtiny2313A (корпус PDIP20), а в правой колонке - наименование ножек макетной платы AVR-USB162MU (см. [4]). Если делать программатор AVRISP-MKII в режиме ISP на макетной плате AVR-USB162MU, то схема получается безумно простой (полная схема программатора AVRISP-MKII с интерфейсом ISP, если её собирать не на макетной плате AVR-USB162MU, будет посложнее). Попробовал подключить новоиспеченный программатор AVRISP-MKII к компьютеру. Операционная система Windows XP радостно нашла новое устройство LUFA AVRISP MkII Clone и автоматически установила драйвер к нему. Драйвер будет присутствовать в системе и установится сам, если ранее Вы установили на компьютер AVR Studio. Драйвер (информационный файл avrispmkii.inf) при установке AVRStudio автоматически копируется в папку %windir%\inf. Среда AVR Studio радушно приняла программатор как родной. По кнопке с иконкой микросхемы AVR можно запустить утилиту программатора. В диалоге настройки подключения (появляется при первом запуске, или при отсутствии подключения к последнему настроенному программатору) нужно указать тип программатора IAVRISP mkII, и тип подключения USB. Далее запустится окно всем известной оболочки управления программатором. При тестировании нашел и исправил неприятный баг, связанный с зависанием программатора, после чего он "отваливался" от системы и становился недоступным (до нового переподключения 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 оригинальная версия, с ошибкой]
[SPI_Init исправленный]
[SPI_ShutDown оригинальная версия]
[SPI_ShutDown исправленный]
Подробнее о работе сигнала ~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]). Схема подключения к программируемому чипу еще проще, используются только 3 провода (плюс четвертый питание). Если собирать программатор не на макетной плате AVR-USB162MU, то полная схема программатора AVRISP-MKII с интерфейсом PDI получится сложнее. Внимание! Почти все чипы XMEGA питаются от 3.3 вольт, поэтому перемычка SJ1 макетной платы AVR-USB162MU должна стоять в положении 2-3 на 3.3 вольта. Таблица соединений с чипом ATxmega128A1, корпус TQFP100
В AVR Studio 4.18 работа с микроконтроллерами XMEGA ничем не отличается от работы с микроконтроллерами других серий. Нужно только выбрать нужный чип и интерфейс программирования PDI. На закладке HW Settings напряжение питания VTarget показывается неправильно - всегда 5 вольт, хотя это недопустимое напряжение для выбранного чипа ATxmega128A1 (максимально допустимое напряжение питания 3.6 вольт). Это происходит потому, что в аппаратуре нашего клона AVRISP-MKII отсутствует возможность измерения напряжения питания программируемого микроконтроллера, и в firmware программатора отдаваемое значение VTarget программно зафиксировано на величине 5.0 вольт. Клон 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, интерфейс 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 получится сложнее. Таблица соединений с чипом ATtiny20, корпус TSSOP14
Микроконтроллеры с интерфейсом программирования TPI непопулярны, и в России на рынке практически отсутствуют. [Установка драйвера для программатора AVRISP mkII] При первом подключении к компьютеру через USB операционная система Windows увидит устройство "LUFA AVRISP MkII Clone" и начнет установку драйвера. Этот драйвер имеется в составе программного пакета AVR Studio версии 4.14 build 589 (или более позднего), поэтому нужно перед установкой драйвера скачать и установить AVR Studio. После этого система Windows найдет драйвер для AVRISP MkII автоматически, нужно только указать это мастеру (от предложения мастера найти драйвер в Интернете нужно отказаться). После успешной установки драйвера у Вас в системе появится новое устройство AVRISP mkII. [Работа с клоном 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 Connected to AVRISP mkII on port USB:0000A0012825 [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, открывать или создавать проект не нужно. Скриншоты для статьи прилагаются. Исходный код проекта находится в директории LUFA-130901\Projects\AVRISP-MKII [10]. Проект настроен на кварц 16MHz и совместимость с Atmel Studio. Также в поддиректории bin находятся готовые скомпилированные прошивки AVRISP-MKII для платы AVR-USB162 на частоты кварцев 8MHz и 16MHz, три типа: • bin\AS: прошивка AVRISP-MKII в режиме совместимости с Atmel Studio. В заключение приведена схема подключения внешнего коннектора ISP для внутрисхемного программирования внешних устройств на AVR. [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. |