ucGoZilla - USB программатор микроконтроллеров AVR.

    Устройство предназначено для программирования микроконтроллеров (МК) AVR и AVR32 фирмы ATMEL. В зависимости от версии программного обеспечения управляющего контроллера, плата может работать по протоколам STK500v2 или JTAGICEmkII. Основные характеристики:

Прошивка STK500v2

  • Работа с программными средами AVRStudio 4.хх/5.хх, CodeVisionAVR, AVRDUDE, BASCOM AVR по протоколу STK500v2.
  • Программирование МК серии AT89 (только AT89S51, AT89S52) по интерфейсу ISP;
  • Программирование всех МК AVR серий AT90, ATtiny, ATmega по интерфейсу ISP;
  • Тактовая частота порта ISP от 1.21 кГц до 1.845 МГц;
  • Наличие дополнительного генератора с изменяющейся частотой от 15 Гц до 3.68 МГц (поддерживается из AVRStudio);

Прошивка JTAGICEmkII

  • Работа с программными средами AVRStudio 4.хх, AVR32Studio, AVRDUDE, IAR AWR по протоколу JTAGICEmkII.
  • Программирование всех МК AVR серий AT90, ATtiny, ATmega, ATXmega, AT32 по интерфейсам ISP, JTAG, PDI;
  • Тактовая частота интерфейсов JTAG и PDI от 26.2 кГц до 3.6 МГц;
  • Тактовая частота интерфейса ISP от 51 Гц до 3.6 МГц;

Общие характеристики платы

  • Преобразователи уровней на всех линиях интерфейсного разъема, позволяющие программировать МК с напряжением питания от 1,65 до 5 вольт;
  • Full Speed USB-устройство (12 Мб/с). Эмуляция Virtual Communication Port;
  • Работа под управлением ОС Windows XP/Vista/Seven 32/64 бит - с использованием штатного драйвера usbser.sys;
  • Работа под управлением ОС Linux. Дополнительный драйвер не требуется.
  • Относительно дешевая и доступная элементная база;
  • Нет необходимости использования дополнительных устройств для "оживления" программатора. Загрузка или обновление прошивки осуществляется специальной утилитой через USB-порт программатора.
  • Разработана двусторонняя печатная плата для возможности самостоятельного изготовления с помощью технологии ЛУТ или фотоспособом.

Достоинства и недостатки

    К основным достоинствам описываемого ниже программатора можно отнести высокую скорость работы, аппаратно поддерживаемый интерфейс USB 2.0, отсутствие необходимости использования внешнего программатора для загрузки прошивки в МК программатора, возможность программировать МК в широком диапазоне напряжения питания.

    Информация по скорости программирования для прошивки JTAGICEmkII:
Программирование ATmega16 тактовая частота 16 МГц, файл размером 14806 байт. Программа AVRDUDE 5.10
JTAG: запись 0.8 сек, верификация 0.23 сек. Чтение всей флэш-памяти 0.3 сек.
ISP: запись 1.00 сек, верификация 0.8 сек. Чтение всей флэш-памяти 0.85 сек.

Программирование ATxmega64A1, тот же файл
JTAG: запись 0.6 сек, верификация 0.4 сек. Чтение всей флэш-памяти 1.5 сек.
PDI: запись 0.5 сек, верификация 0.3 сек. Чтение всей флэш-памяти 1.2 сек.

    К недостаткам можно отнести относительную сложность изготовления ПП и "маленький шаг" выводов корпуса у управляющего МК - всего 0.5 мм.

Схема

ucGoZilla Shematic     Схема устройства приведена на рисунке. Сердцем устройства является МК AT91SAM7S64. Контроллер организует связь по USB, обработку команд от управляющего ПО и выдачу сигналов на разъем ХС2.
     Связь с компьютером осуществляется через разъем XC1 типа USB-B. Для защиты от статики и помех на линии USB в схеме установлен фильтр DA2 типа STF202. Кроме того, в этот фильтр интегрирован подтягивающий резистор, с помощью которого компьютер определяет наличие подключенного устройства на порту USB. Если возникли проблемы с приобретением фильтра в архиве для скачивания есть альтернативный вариант где вместо фильтра STF202 используются четыре дискретных резистора.
    Питание схемы устройства осуществляется от стабилизатора DA1 напряжением 3.3 вольта.
    Подключение устройства к к целевой плате, на которой расположен программируемый МК, осуществляется через разъем XC2. В режиме ISP назначение контактов этого разъема совпадает со стандартным 10-контактным ISP-разъемом, рекомендуемым фирмой ATMEL.

Назначение контактов разъема XC2:

Контакт ISP JTAG PDI
1 MOSI TDI --
2 VTREF VTREF VTREF
3 REF_CLK TMS --
4 GND GND GND
5 RESET RESET --
6 GND GND GND
7 SCK TCK PDI_CLK/RESET
8 GND GND GND
9 MISO TDO PDI_DATA
10 GND GND GND

   Микросхемы DD2-DD6 - двунаправленные конвертеры логических уровней типа 74LVC1T45 - необходимы для согласования логических уровней между МК DD1 и программируемым МК. Применение конвертеров уровней позволяет программировать МК с напряжением питания в пределах 1,65...5 Вольт. Для нормальной работы конвертеров уровней необходимо два питания. Это нужно помнить при работе с программатором.  На контакт 2 разъема ХС2 необходимо подавать напряжение питания с программируемого МК. Максимальное значение подаваемого напряжения - 5 вольт. Превышение этого значения может привести к выходу из строя конвертеров.
    В программаторе предусмотрена генерация меандра (только для прошивки версии STK500v2) для возможности тактирования программируемого МК от программатора (см. подробнее раздел Дополнительные возможности->Использование дополнительного генератора). Этот сигнал выведен на контакт 3 (REF_CLK) разъема ХС2. Частоту генерации устанавливает управляющее ПО. Генерация включается, если ПО задало частоту, отличную от нуля. Если заданное значение частоты будет равно нулю, вывод REF_CLK переводится в высокоимпедансное состояние.
    Светодиоды, установленные на плате, сигнализируют о различных состояниях устройства.
    Для индикации успешного определения устройства операционной системой служит светодиод VD1. При передаче данных по каналу USB, этот светодиод мигает с частотой около 20 Гц. При начальном программировании платы светодиод кратковременно мигает, сигнализируя об успешном программировании очередного блока данных.
    Светодиод VD4 сигнализирует об успешном входе в режим программирования. Если попытка входа в режим программирования не удалась, или, в процессе операций чтения-записи-стирания возникла ошибка, загорается VD3, и продолжает гореть до повторной попытки входа в режим программирования. При начальном программировании платы VD3 сигнализирует о неудачном программировании блока данных.

Конструкция


    Управляющий МК - AT91SAM7S64 с любыми буквенными индексами в корпусе LQFP64. Может быть заменен на МК AT91SAM7S128/256.
    Стабилизатор DA1 - любой LDO (стабилизатор с низким падением напряжения на ключевом элементе) на напряжение 3.3 вольт в корпусе SOT223.
    Буферы DD2 - DD6 - SN74LVC1T45DBV. Корпус SOT-23-6.
    Аналогов фильтра DA2 я не нашел. Как уже говорилось, в архиве для скачивания есть вариант схемы и печатной платы, где этот фильтр не устанавливается и заменен на четыре дискретных резистора.
    Все резисторы и неполярные конденсаторы в корпусе 0805. Танталовые конденсаторы С1, С4 и С12 в корпусе А10. Их можно заменить на керамические того же номинала в корпусе 0805 или 1206. Допуск по номиналам для резисторов и конденсаторов - 5%.
    Светодиоды выводные, в круглом корпусе диаметром 3 мм или плоский корпус. Шаг между выводами 2.54 мм.
    Кварц выводной (ширина между выводами 5,08 мм) - на частоту 18,432 МГц.
    Разъем USB – типа USBB-1J (Выводной на плату. Тип В).
    Разъем ISP – типа BH-10 (IDC-Вилка 2х5 шаг 2.54 мм, Г-образные выводы на плату).
    Программатор собран на двусторонней печатной плате. Плата была разработана мною специально для изготовления методом "лазерного утюга" (ЛУТ), имеет "всего" 10 переходных отверстий и рассчитана на установку компонентов в SMD-корпусе, за исключением разъемов. Рекомендуемый диаметр сверл: для переходных отверстий - 0,5 мм, для остальных - 1 мм. Два отверстия под крепление USB разъема - 2,5 мм. Большая часть деталей устанавливаются с одной стороны. C обратной стороны устанавливаются разъемы ХС1, ХС2, джамперы J1, J2, все светодиоды, кварц ZQ1.
    Габариты платы 30X60 мм.

Установка

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

Последовательность установки:

1. Собираем схему.

2. Подключаем плату к свободному порту USB компьютера. Аккуратно кратковременно замыкаем джампер JP1(ERASE). Отключаем плату от порта USB. JP1 разомкнут.

3. На неподключенной плате замыкаем джампер JP2(TEST). Подключаем плату к USB. Ждем 15 секунд. Отключаем плату от USB. Размыкаем JP2.

4. Подключаем плату к USB в третий раз. Операционная система (ОС) найдет новое устройство - "ucGoZilla Board". При предложении найти драйвер автоматически, отказаться, и указать путь к файлу "ucGoZilla.inf" из папки .../Drv. Ожидаем окончания установки.

5. Запускаем идущую в комплекте утилиту "ucGoZilla.exe" из папки .../Drv. После запуска программа определит тип МК, установленного на плате, и предложит выбрать прошивку для записи. В процессе загрузки кратковременно мигает светодиод VD1 (Good Link), сигнализируя об успешной записи очередного блока. Если во время записи произошла ошибка, то загорится светодиод VD3 (Target Error)). Процесс записи остановится. Для повторной попытки записи прошивки придется выполнить шаги 2 - 4 заново. После успешного завершения программа сообщит, что можно переподключить устройство. Отключаем прошитое устройство от порта USB.

6. Подключаем прошитую плату к порту USB. ОС обнаружит новое устройство. В зависимости от прошитого программного обеспечения это будет "PROTTOSS ucGoZilla AVR500V2" (STK500v2) или "PROTTOSS ucGoZilla AVRJTAG2" (JTAGICEmkII). Драйвера должны установится автоматически. После успешной установки драйверов светодиод VD1 (Good Link) горит постоянно - устройство установлено в системе и программатором можно пользоваться.

    Программатор для ОС является виртуальным COM-портом, и после успешной установки, ОС автоматически присвоит ему номер. Если используемое Вами ПО не поддерживает номер порта, присвоенного ОС, то этот номер необходимо установить вручную, изменив номер СОМ-порта программатора в диспетчере устройств.

Программное обеспечение

    Программное обеспечение, необходимое для использования программатора, в зависимости от используемой прошивки, должно поддерживать протоколы STK500v2 или JTAGICEmkII. Программатор тестировался со следующим ПО:

AVRStudio 4.хх

    В главном меню программы идем по пути - Main Menu->Tools->Program AVR->Connect... Далее, в появившемся окне, в зависимости от используемой прошивки, выбираем тип программатора - STK500 или JTAGICEmkII, указываем номер СОМ-порта, который ОС присвоила программатору. Далее жмем кнопку "Connect". При предложении обновить прошивку отказаться.

AVRStudio32

    Работа в этой среде возможна только с прошивкой JTAGICEmkII.
   В окне "AVR32 Targets" нажимаем на кнопку "Create new target". Заходим на вкладку "Properties" созданного программатора. Выбираем пункт "Details". В открывшемся окне выбираем тип программатора JTAGICEmkII. Устанавливаем тип подключения (Connection) - RS232. Устанавливаем требуемый номер СОМ-порта.

AVRDUDE

    При использовании прошивки STK500v2 вводим тип программатора в командной строке "stk500v2". При использовании прошивки JTAGICEmkII три варианта. Если программатор используется в режиме JTAG, то в командной строке вводим "jtag2", в режиме ISP - вводим "jtag2isp", в режиме PDI - вводим "jtag2pdi".
Поддержка XMEGA и программирование по интерфейсу PDI введено в AVRDUDE с версии 5.10.

CodeVisionAVR

    Данный продукт работает с JTAGICEmkII только через JUNGO WinDriver, по этому работать с прошивкой для JTAGICEmkII не будет.
Для версии STK500v2 процедура подключения следующая. Запускаем программу. Идем по пути - Main Menu->Settings->Programmer... Указываем AVR Chip Programmer Type - Atmel STK500/AVRISP. Устанавливаем номер COM-порта. Пользуемся.

Дополнительные возможности

Использование дополнительного генератора

    Дополнительный генератор доступен в прошивке STK500v2. при использовании программы AVRStudio. Основное его назначение - восстановление работоспособности программируемого МК, если ошибочно запрограммированы фьюз-биты, отвечающие за тактирование (CKOPT, CKSEL) и программируемый МК не запускается. В этом случае выход дополнительного генератора (контакт 3 разъема XC2) подключается на вход тактового генератора программируемого МК (обычно это вывод XTAL1). Для активации дополнительного генератора:

1. Подключаемся к программатору из под AVRStudio.
2. В окне программатора переходим на вкладку HW Settings.
3. В поле Clock Generator передвигаем движок вправо на нужную частоту отличную от нуля, или задаем частоту вручную в герцах. Частота должна быть более 14 Гц. При использовании генератора в качестве тактового генератора программируемого МК необходимо помнить, что частота тактирования программируемого МК должна, как минимум, в четыре раза превышать тактовую частоту порта ISP.
4. Нажимаем кнопку Write. Генератор включен и генерирует заданную частоту.

    Если необходимо выключить генератор то передвигаем движок в поле Clock Generator до максимального левого положения или устанавливаем частоту вручную нулевым значением. В поле частоты отобразится надпись Stopped. Нажимаем кнопку Write - генератор выключен.

    Если Вы не остановили генератор средствами AVRStudio, он не выключается автоматически при выходе из программы.

Калибровка встроенного RC-генератора МК AVR

    Возможность калибровки программируемого МК реализована в обеих прошивках, при чем в прошивке JTAGICEmkII калибровку можно производить в режимах ISP и JTAG. Подробно процесс калибровки описан в документе AVR053. Так же есть русский перевод этого документа.

    Тем не менее есть некоторые отличия от вышеуказанного метода, на что нужно обратить внимание. Оригинальные STK500 и JTAGICEmkII генерируют калибровочную частоту на линии MOSI и TDI соответственно. ucGoZilla не имеет возможности аппаратно генерировать частоту на этой линии разъема программирования, по этому генерация переназначена на линию SCK/TCK - контакт 7 разъема программирования XC2. Это необходимо учитывать при компиляции калибровочной программы. Для прошивки STK500v2. и прошивки JTAGICEmkII в режиме ISP, в исходных файлах, приложенных к документу AVR053, в inc-файле "XXX_family_pinout.inc" необходимо изменить значение макроса ISP_CAL_MOSI на соответствующее линии SCK калибруемого микроконтроллера. Для прошивки JTAGICEmkII в режиме JTAG необходимо изменить значение макроса JTAG_CAL_MOSI.

    Эталонная частота, генерируемая программатором - 32779 Гц. Это значение необходимо записать в макрос CALIB_CLOCK_FREQ в файле "isp_STK500_interface.inc".

Файлы

ucGoZilla 101016

  • JTAGICEmkII: По интерфейсу JTAG программируются только МК AVR серий ATmega16/32/64/128(A).

ucGoZilla 110130

  • JTAGICEmkII: Введена поддержка программирования семейства МК XMEGA AVR по интерфейсам JTAG и PDI;
  • STK500v2: Не работает дополнительный генератор.

ucGoZilla 110210

  • JTAGICEmkII: Расширен алгоритм программирования МК AVR по интерфейсу JTAG. Теперь по JTAG поддерживается программирование всех МК AVR имеющих JTAG интерфейс. Отдельное спасибо в решении задачи Александру Гатальскому;
  • JTAGICEmkII: Исправлена ошибка установки дескриптора чипа;
  • STK500v2: Исправлена ошибка с неработающим дополнительным генератором.

ucGoZilla 110406

  • Исправлена ошибка работы ucGoZilla с 64-битными операционными системами. Необходимо обновление прошивки и установочного inf-файла
  • Введена возможность калибровки внутреннего RC-генератора для МК AVR.
  • STK500v2: Исправлена очередная ошибка с дополнительным генератором. В предыдущих версиях реальная частота дополнительного генератора была в два раза меньше заданной. В текущей версии частота соответствует заданной.

ucGoZilla 110427

  • JTAGICEmkII: Исправлена ошибка вывода Mega AVR из состояния RESET после программирования по JTAG интерфейсу.
  • JTAGICEmkII: Исправлена ошибка чтения сигнатуры, фьюз-битов и лок-битов по ISP интерфейсу при использовании программы AVRDUDE. Ошибка присутствовала только в версии 110406.
  • STK500v2: Исправлена ошибка чтения сигнатуры, фьюз-битов и лок-битов при использовании программ AVRDUDE и CodeVisionAVR. Ошибка присутствовала только в версии 110406.
  • STK500v2: Дополнительный генератор наконец то работает так, как описано в разделе Использование дополнительного генератора.

ucGoZilla 120122

  • Исправлена потенциальная ошибка работы USB модуля. Ошибка проявлялась на некоторых машинах и приводила к неработоспособности виртуального СОМ-порта после нескольких сеансов работы с программатором.
  • Изменен алгоритм работы с модулем АЦП - напряжение питания программируемого МК отображается более точно.
  • Переработан алгоритм обработки протоколов - скорость чтения-записи стала немного быстрее.

ucGoZilla 120722

  • JTAGICEmkII: Добавлена поддержка JTAG Chain (Программирование в цепочке JTAG устройства)
  • JTAGICEmkII: Добавлена поддержка программирования микроконтроллеров семейства ATMEL AVR32
Известные проблемы

Этот раздел действителен, пополняется и редактируется для последней версии программного обеспечения ucGoZilla.

  • JTAGICEmkII: Отладка не реализована.
Обсуждение проекта
Исходный код

ucGoZilla 120722 sources

    В архиве последняя версия исходных кодов программатора (IAR) и загрузчика (Borland Builder), версии схем и печатной платы (PCAD2006).
    Проект выкладывается "как есть".

Рыжков Андрей aka PROTTOSS.

    Последнее обновление страницы 18.06.2016

Поддержка сайта и проекта

     Если Вам понравился этот проект и у Вас есть желание и возможность поддержать мой сайт

     

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