Программатор 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
Rating: 
0
No votes yet