Программатор USBTiny-MkII slim

Программатор USBTiny-MkII slim

О программаторе USBTiny-MkII slim

USBTiny-MkII slim - компактный и быстрый USB-программатор для микроконтроллеров AVR, совместимый с фирменным программатором AVRISP-MKII от Atmel. Немалая стоимость оригинала поспособствовала появлению его многочисленных клонов, и самым удачным из них, пожалуй, является именно USBTiny-MkII SLIM. Устройство может программировать все 8-разрядные AVR-микроконтроллеры, обладающие возможностью внутрисхемного программирования (поддерживаются интерфейсы ISP, TPI и PDI).

MkII обладает следующими возможностями:

  • Поддержка интерфейса программирования ISP (для микроконтроллеров ATTiny и ATMega)
  • Поддержка интерфейса программирования TPI (актуально для некоторых моделей ATTiny)
  • Поддержка интерфейса программирования PDI (для микроконтроллеров XMega)
  • Возможность запитать программируемый микроконтроллер от 3.3В или 5В (выбирается джампером)
  • Это быстрый программатор. 128 Кб флеша ATMega128 полностью считываются за 35 секунд (для сравнения, usbasp делает это за 70 секунд), и пишутся чуть медленнее (скорость записи ~15 Кб/сек)
  • Работа как с утилитой avrdude, так и с IDE AtmelStudio (которая видит программатор как родную железку)
  • Есть вывод CLK для воскрешения микроконтроллера с “испорченными” FUSE битами

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

Про интерфейс PDI можно почитать в атмеловском документе AVR1612.

Схема программатора

Высокая скорость работы обеспечивается использованием микроконтроллеры AT90USB162 с аппаратной поддержкой USB. Кроме микроконтроллера на плате программатора имеется двунаправленный преобразователь уровня напряжения GTL2003, LDO-стабилизатор (MCP1825S-3302ED) на 3.3В, джампер для выбора напряжения питания программируемого МК (3.3В/5В) и пара светодиодов-индикаторов режима работы.

Схема показана на рисунке:

Схема программатора usbtiny-mkii slim

Сборка и прошивка

Сборка печатной платы не должна вызывать проблем. Стоит только заметить, что стабилизатора IC3 имеет специфическую цоколёвку и не получится вместо его поставить распространённую микросхему вроде AMS1117. Тут надо ставить LF33, либо MCP1825S-3302ED, либо другой, совместимый по выводам. Также не стоит пытаться заменять преобразователь уровней GTL2003 на более распространённый и дешёвый MAX2003 - с последним будет работать плохо и нестабильно.

Светодиод LED1 можно поставить зелёного цвета свечения - он сигнализирует о подаче питания, LED2 горит при активности устройства (т.е., при чтении/записи в МК), тут более уместен, например, красный цвет свечения.

Плата в сборе выглядит так:

Плата mkii в сборе

Микроконтроллеры AT90usb162 хороши тем, что для их программирования не нужен программатор, т.к. они поставляются с уже прошимым bootloader-ом, и прошивку можно "залить" подключив устройство через USB порт. Но это (как правило) не относится к микросхемам, купленным в Китае. У последних bootloader традиционно отсутсвует. Если вы оказались "счастливым" обладателем такого МК, то придётся прошивать загрузчик самостоятельно. Это можно сделать любым другим AVR-программатором (например, usbasp) временно подпаяв проводки MISO/MOSI/SCK/RESET и питание прямо к платке. Я для этих целей соорудил платку-адаптер под разъём TQFP-32. Прошивку загрузчика можно найти в сети, либо скачать по ссылке внизу этой статьи. Также не помешает проверить FUSE-биты, они должны бать такие: HIGH = 0xD9, LOW = 0xDE

Когда загрузчик на месте, программатор можно подключать к USB и загружать в него прошивку. Для этого в интернетах обычно предлагают использовать утилиту FLIP, которая выложена на сайте Atmel, причём, разных версий и под разные ОС. Последняя верися 3.4.7 без встроенной явы не запустится на 64-битных ОС выдав ошибку о том, что Java-виртуальная машина не найдена (хотя ява стоит). Аналогичная сборка со встроенной явой выдаст точно такую же ошибку. Чтобы выяснить причину такого безобразия, я расковырял файл flip.exe и обнаружил внутри его jar-файл (он расположен почти в самом начале экзешника, и легко ищется в hex-редакторе по сигнатуре 'PK' и последующему характерному заголовку jar-ки). Вырезав и запустив этот jar, я получил ошибку JNI при загрузке динамических библиотек, которые оказались 32-битными. Вывод: дання утилита в принципе не будет работать в 64-битной Windows (причём, на сайте Atmel об этом ни слова не сказано). Ещё можно скачать старую версию FLIP 2.4.6, которая написана на чистой яве и прекрасно работает везде, в том числе и на 64-битных ОС. Но эта версия не поддерживает AT90usb162. Итог - про FLIP лучше навсегда забыть.

Atmel Studio умеет прошивать AT90usb162 "из коробки". Для этого идём в главное меню, Сервис -> Device Programming, или нажимаем Ctrl+Shift+P. В появившемся окне выбираем инструмент "Atmel Mega DFU" и микроконтроллер AT90USB162:

Atmel Studio - выбор программатора

Теперь перейдя на вкладку Memories, можем читать и писать прошивку и фьюзы:

Atmel Studio - выбор программатора

Прошивка программатора основана на проекте AVRISP-MKII из библиотеки LUFA с открытым исходным кодом. Пара слов о её конфигурировании:

Частота кварца может быть 8 МГц или 16 МГц и задаётся в файле Projects/AVRISP-MKII/makefile, параметр F_CPU, по умолчанию там 16 МГц.

В файле конфигурации Projects/AVRISP-MKII/Config/AppConfig.h помимо конфигурации выводов МК есть парочка интерсных параметров:

	#define RESET_TOGGLES_LIBUSB_COMPAT
//	#define FIRMWARE_VERSION_MINOR     0x11

Первый параметр включает возможность быстрого переключения между режимами Jungo (который для Avr/Atmel Studio) и LibUSB (для avrdude) драйвером в одной прошивке. Для переключения режимов достаточно замкнуть джампер сброса (RST), после чего в системе появится отдельное устройство с другим серийным номером. При этом программатор моргнёт светодиодами два раза, если находится в режиме Jungo и четыре раза, если включен режим LibUSB. В обоих случаях потребуется установка соответствующих драйверов (это касается Windows, в Linux и MacOS libusb установлен “из коробки”). Кстати, программатор запоминает последний выбранный режим, и после повторного подключения он стартует именно в нём. А ещё он запоминает последнюю используемую частоту SCK. И всё это включается параметром RESET_TOGGLES_LIBUSB_COMPAT. По умолчанию этот параметр включен.

Иногда после выхода очередного обновления для AtmelStudio возникали проблемы - программатор переставал поддерживаться, т.к. его версия оказывается ниже требуемой. В этом случае надо раскомментировать параметр FIRMWARE_VERSION_MINOR и указать в нём версию прошивки. Например, у меня AtmelStudio 7 захотела прошивку версии не ниже 1.18, вместо обнаруженной 1.14. После раскомментирования параметра FIRMWARE_VERSION_MINOR и установки его в 0x18 проблема была решена. На всякий случай, я увеличил его (с запасом) до 0x30, скомпилированную прошивку можно скачать в конце статьи.

Корпус

Корпус я решил распечатать на 3d-принтере, для чего была спроектирована моделька. Т.к. для программирования через ISP-разъём обычно используются 10-проводные шлейфы, то для удобства работы решено было добавить ещё 10-пиновый ISP-разъём. Последний вынесен на заднюю стенку корпуса. Сам корпус состоит из двух половинок, которые склеиваются между собой. Под джамперы, светодиоды и разъёмы программатора (и подписи к ним) сделаны окошки.

Вот так выглядит получившаяся 3d-моделька:

3D-модель корпуса программатора usbtiny-mkii slim 3D-модель корпуса программатора usbtiny-mkii slim

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

3D-модель корпуса программатора usbtiny-mkii slim

Корпус я печатал из ABS-пластика. Для придания ему большего эстетизма, корпус был отшлифован и обработан в ацетоновой бане. Т.к. под рукой не было мелкой наждачки, шлифовал лезвием обычного канцелярского ножа, располагаемым перпендикулярно обрабатываемой поверхности. После того, как поверхность распечатки стала более-менее ровной, детали были помещены на 30 минут в ёмкость с парами ацетона.

Вот как выглядел корпус до (снизу на фото) и после (сверху на фото) постобработки:

Распечатаный корпус до и после обработки в парах ацетона

Плата в корпусе:

Плата в корпусе

Для 10-пинового разъёма был вырезан небольшой кусок макетной платы (из стеклотекстолита) чтобы предотвратить продавливание контактов в будущем. После впаивания разъёма в такую платку, они точно никуда не денутся. После чего разъём подпаивался проводками с обратной стороны платы программатора и приклеивался суперклеем к нижней части корпуса. В завершении две половинки корпуса склеивались между собой.

Работа с программатором

При использовании avrdude надо в командной строке задать тип программатора так: -c avrisp2 -P usb или так -c avrispmkII -P usb.

При работе с AtmelStudio сначала необходимо установить драйвера. После первого включении программатора в USB-порт чего драйвера должны установиться автоматически. Если этого не произошло, то надо вручную указать каталог, в который установлена AtmelStudio. Устройство успешно работает как с AvrStudio4, так и с AtmelStudio6, как в 32-битный, так и в 64-битных версиях Windows.

Не знаю, на счёт более ранних версий, но AtmelStudio7 точно умеер работать с libusb-драйвером. Таким образом, можно смело переводить программатор в режим libusb (замыканием джампера RST так, чтобы после перезапуска оба светодиода моргнули два раза одновременно) и забыть про режимы.

Драйверы LibUSB под Windows проще всего установить автоматическим установлятором драйверов Zadig. Под Linux и MacOS ничего устанавливать не продётся. После скачивания Zadig в меню Options включаем "List All Devices". После чего из списка устройств выбираем "AVRISP mkII" (сначала надо перевести программатор в режим libusb). Осталось нажать кнопку для смены текущий драйвера на libusb-win32.

Если в будущем возникнет необходимость обновить прошивку MkII, то сначала замыкается джампер HWB, затем RST, после чего устройство определяется студией как "Atmel Mega DFU".

Печатные платы к программатору и основные детали можно найти в магазине.


Собранный программатор

Файлы

DownloadСкомпилированная прошивка
DownloadФайлы модели корпуса (STL)
DownloadИсходники, прошивка, схема и плата
DownloadBootloader для AT90USB162
Рейтинг: 
0
Голосов еще нет