Usb avr – AVR и USB. Подключаем устройства на AVR к USB порту

USB для AVR. Введение / Habr


Речь пойдет об популярном интерфейсе USB, а именно как заюзать этот самый USB на простых микроконтроллерах AVR. Планирую написать несколько топиков с примерами кода и разъяснениями как со стороны микроконтроллера, так и со стороны компьютера. Конечно на просторах интернета полно всяческих примеров на данную тематику, но в лучшем случае это исходник в котором сам черт ногу сломит, да краткое, на страничку, его описание.

Начну с того, что ранее широко распространенные интерфейсы как COM, LPT, MIDI в настоящее время морально устарели, но ещё нередко присутствует на современных компьютерах и используется в промышленном и узкоспециализированном оборудовании. Так что для связи какой нибудь собственной железки с компьютером давно уже пора осваивать что-то другое. Как вариант ещё можно использовать всякие конверторы/переходники/эмуляторы, но они не всегда работают как оригинальный интерфейс, порождая массу проблем.

Всё хватит пустой болтовни, приступим к делу. Как использовать USB в собственных устройствах?

  • Можно взять микроконтроллер, который имеет аппаратную поддержку USB интерфейса (например AT90USB* ). Далее нужно знать как с ним работать и написать для него специальную прошивку. Ну и на последок также необходимо написать драйвер для компьютера, если ваше устройство не стандартного класса USB.
  • Использовать универсальный конвертор USB в «другой» интерфейс. В качестве «другого» может быть RS232, I2C,… При таком раскладе нам не нужно знать как работает USB, не нужно писать специальную прошивку и драйвер для компьютера. За нас всю работу делает конвертор, и как правило драйвер уже написан производителем конвертора.
  • Взять обычный микроконтроллер без аппаратной поддержки USB и программно эмулировать интерфейс USB. Тут возникает проблема в производительности нашего микроконтроллера. Скорость USB очень большая: LowSpeed — 1.5Mbit/s, FullSpeed — 12Mbit/s, HighSpeed — 480Mbit/s. Я вообще молчу за USB 3.0. Поэтому дома на коленке получится только LowSpeed USB, и то з некоторыми трудностями. Правда в большинстве случаев для самодельных устройств этого более чем достаточно.

Мы настоящие джедаи, поэтому пойдем по пути эмуляции. На данный момент уже существует три готовых проекта для программной эмуляции USB на микроконтроллерах AVR:

Проект от Igor Češko был первым, написан полностью на ассемблере и он послужил своего рода вдохновением для V-USB. На его основе сделан заслуживающий внимания универсальный ИК приемник для компьютера, а также множество других проектов. V-USB в свою очередь написан на C, правда с использованием ассемблерного кода в местах критических к производительности и точности эмуляции. USBtiny является производным от более ранней версии V-USB, имеет меньше возможностей из-за чего теоретически он проще для понимания.

Я остановился на реализации от V-USB, думаю вот основные преимущества:
  • V-USB опубликован на принципах GNU General Public License Version 2, так же имеется коммерческая лицензия
  • полная эмуляция USB 1.1 low-speed устройств за исключением обработки ошибок связи и электрических характеристик
  • запускается практически на всех AVR-ках, нужно минимум 2 килобайта флеша, 128 байт RAM и частота 12, 15, 16, 16.5 или 20 МГц.
  • V-USB предоставляет свободную пару идентификаторов (Vendor-ID и Product-ID)
  • хорошо задокументированный код на C, легче разбираться


Я в своих экспериментах с USB прошивку для МК писал языком C на AVR-Studio 4 + WinAVR, программу для ПК разрабатывал при помощи Borland C++ Builder 6.0 как самый быстрый и простой вариант. Соответственно такими будут все будущие примеры. Вообще выбор средств разработки очень ответственный шаг, но холивар по поводу что лучше C или Assembler устраивать не нужно. Я скажу просто: это лишь инструменты в наших руках. Нужно владеть всеми а использовать тот что удобней и правильней в поставленных перед собой целях. Естественно в умелых руках любой инструмент эффективный.
Также нужно отдельно сказать про идентификаторы VID и PID. Это 16-битные числа, при помощи которых операционная система определяет устройства и подгружает нужный драйвер. Для того, чтобы получить Vendor-ID нужно заплатить usb.org 2000$. Интересные мысли по поводу легальности использования VID/PID можно прочитать на страничке эмбеддера BSVi. Тот факт, что V-USB предоставляет свободную пару VID/PID (легально купленную в usb.org) очень греет душу. Но что делать когда нужно одновременно подключить несколько USB устройств с одинаковыми VID/PID? Ничего страшного, помимо этих VID/PID каждое USB устройство имеет VENDOR_NAME и DEVICE_NAME идентификаторы, потом в примерах я покажу как этим воспользоваться.
Несколько ссылок по сабжу:
  • www.usb.org/developers/docs — официальная документация по USB. Не легкая для чтения, но наиболее полная.
  • www.beyondlogic.org/usbnutshell/usb1.htm — хороший обзор важных частей USB спецификации. Легче раскуривать чем официалку…
  • www.lvr.com/usb.htm — много хороших ссылок связанных с USB

В заключение напишу, что все условия для создания USB 1.1 устройств доступны каждому:
  • дешевые микроконтроллеры AVR
  • программная эмуляция USB, выберем V-USB
  • свободная пара Vendor-ID и Product-ID (вместе с V-USB)
  • множество примеров как для микроконтроллера так и для компьютера

Остается только одно — желание разобраться! А потом творить чудеса на копеечных микроконтроллерах всем мажорам на зависть.

Планирую написать ещё один топик, с практической реализацией бегущей строки, принимающей данные через USB.

habr.com

USB программатор AVR — USBAsp

Вид сверху

!!! ЭТЕНШН !!!
Появилась схема USB программатора которая НЕ требует предварительной прошивки управляющего микроконтроллера.

Так как у многих уже давным давно нет ни COM ни LPT порта, то я решил выложить схему USB программатора для AVR. Это будет широко известный в узких кругах USBASP. Схема простая как три копейки, но COM или LPT порт все же потребуется — для того, чтобы прошить управляющий контроллер. Так что можешь сходить к другану. Программатор строится на контроллере ATMega48 или ATMega8. Нужна именно 8 или 48, без всяких индексов L. Так как у нас требуется частота выше чем 8 Мгц.

Сборка

Так как я стараюсь не выкладывать непроверенные решения, то я повторил этот программатор. Чисто для себя, поприколу. Подобрал наиболее компактную схему и перевел ее в формат Sprint Layout. Изготовил печатную плату, стравил. Засверловал и напаял компоненты. Микросхему рекомендую ставить на панельку.

Прошивка программатора
Далее замыкаем перемычку J1 и J2 и подключаем к разьему стандартный последовательный программатор, да хоть тот же программатор Громова. Программатор должен иметь свое питание, иначе нужно подать его на схему.

И заливаем в проц прошивку. Для ATMega8 одна прошивка, для ATmega48 другая. Дальше нужно выставить биты конфигурации.

Для ATMega48:
Старший байт FUSE выставляется как 0хDD, младший 0xFF. На картинке я привел скриншот из UniProf с правильно расставлеными битами конфигурации для контроллера ATMega48.

Если применяется контроллер ATmega8, то байты FUSE таковы:
Старший 0xC9, младший 0xEF

Настройка в работу
После прошивки нужно снять перемычку J1 и все, можно втыкать в комп. Сразу же должно обнаружитсья USB устройство. Скармливаем ему дрова и у нас в системе появляется новый девайс — USBAsp. Если система ругается на драйвера, говорит, что это не драйвер, а фуфел какой то. Значит контроллер либо криво прошился, либо ты забыл снять перемычку J1.

Перемычка J3 используется для прошивки контроллеров у которых частота не превышает 1.5 МГц. Я ее поставил, без нее у меня мега 8 не хотела определяться. Потом подправил меге Fuse биты, чтобы она заработала на 8 Мгц, перемычку не снял, но работает. Слышал, что подправили и теперь перемычку можно не дергать туда сюда.

Красный светодиод показывает, что программатор подключен к USB и запитан. Зеленый, что идет обращение к прошиваемому контроллеру.

Прошивающий софт
Все, теперь можно подключать к программатору провод и тыкать им в прошиваемые контроллеры.
Единственная софтина которая поддерживает этот программатор это AVR-чувак, она же дудка, она же AVRDUDE. Мощнейший консольный программатор. Не стоит пугаться его консольности, во первых батники никто не отменял, а во вторых не него существует несколько оболочек.

ВНИМАНИЕ! В той GUI оболочке что находится в архиве ИНВЕРСНЫЕ FUSE!!! То есть если в даташите написано, что дефолтные SCKEL3..0 = 0100 то тут будет показан 1011!!! Короче, как в PoniProg. Чего эти утырки так вертят эти несчастные FUSE я понять не могу, хоть бы предупреждали, а то бы залочил кристалл нахрен.

Вот, пример командной строки для прошивки через USBAsp — Записываем main.hex во флеш ATmega8:

   avrdude -c usbasp -p atmega8 -U flash:w:main.hex
В архив usbasp.rar я сложил все файлы необходимые для этого программатора:
  • Прошивка для ATMega 48 и ATMega 8
  • Драйвер для винды
  • Схема
  • Печатная плата в формате Sprint Layout
  • Фотки
  • AVRDUDE
  • GUI к AVRDUDE

UPD:
Для тех у кого вдруг пишет, что архив битый, я выложил то же самое в ZIP —USBASP.ZIP

Проверено — работает! Пользуйтесь 🙂

Страничка автора USBASP — там обновления прошивок, драйверов и варианты разводок плат.

Страничка разработчика GUI оболочки для AVRDude

!!!WARNING!!!
Тут появилась подтвержденная инфа, что новая прошивка (с оригинального сайта автора) может не работать на некоторых компах. У меня в архивах лежит старая прошивка, от 2007 или даже 2006 года. Она может не работать на самых новых компах. Короче, не работает — попробуй другую версию прошивки. С сайта автора или из моего архива.

З.Ы.
Также существует программатор AVR910, работающий также через USB и имеющий практически идентичную конструкцию. Чем он лучше/хуже я не знаю. Но можете попробовать сделать его. А я в скором времени выложу описание изготовления и использования JTAG адаптера для внутрисхемной отладки AVR.

easyelectronics.ru

USB для AVR. Часть 1. Вводная / Связь железа с компьютером. / Сообщество EasyElectronics.ru


Здравствуйте, решился я испытать свои творческие таланты 🙂 Речь пойдет об популярном интерфейсе USB, а именно как заюзать этот самый USB на простых микроконтроллерах AVR. Планирую написать несколько топиков с примерами кода и разъяснениями как со стороны микроконтроллера, так и со стороны компьютера. Конечно на просторах интернета полно всяческих примеров на данную тематику, но как писал DI HALT в правилах конкурса: «в лучшем случае это исходник в котором сам черт ногу сломит, да краткое, на страничку, его описание.»

Начну с того, что ранее широко распространенные интерфейсы как COM, LPT, MIDI в настоящее время морально устарели, но ещё нередко присутствует на современных компьютерах и используется в промышленном и узкоспециализированном оборудовании. Так что для связи какой нибудь собственной железки с компьютером давно уже пора осваивать что-то другое. Как вариант ещё можно использовать всякие конверторы/переходники/эмуляторы, но они не всегда работают как оригинальный интерфейс, порождая массу проблем.

Всё хватит пустой болтовни, приступим к делу. Как использовать USB в собственных устройствах?

  1. Можно взять микроконтроллер, который имеет аппаратную поддержку USB интерфейса (например AT90USB* ). Далее нужно знать как с ним работать и написать для него специальную прошивку. Ну и на последок также необходимо написать драйвер для компьютера, если ваше устройство не стандартного класса USB.
  2. Использовать универсальный конвертор USB в «другой» интерфейс (например Преобразователь USB-UART на FTDI FT232RL). В качестве «другого» может быть RS232, I2C,… При таком раскладе нам не нужно знать как работает USB, не нужно писать специальную прошивку и драйвер для компьютера. За нас всю работу делает конвертор, и как правило драйвер уже написан производителем конвертора.
  3. Взять обычный микроконтроллер без аппаратной поддержки USB и программно эмулировать интерфейс USB. Тут возникает проблема в производительности нашего микроконтроллера. Скорость USB очень большая: LowSpeed — 1.5Mbit/s, FullSpeed — 12Mbit/s, HighSpeed — 480Mbit/s. Я вообще молчу за USB 3.0 🙂 Поэтому дома на коленке получится только LowSpeed USB, и то з некоторыми трудностями. Правда в большинстве случаев для самодельных устройств этого более чем достаточно.
Мы настоящие джедаи, поэтому пойдем по пути эмуляции 🙂 На данный момент уже существует три готовых проекта для программной эмуляции USB на микроконтроллерах AVR:
Проект от Igor Češko был первым, написан полностью на ассемблере и он послужил своего рода вдохновением для V-USB. На его основе сделан заслуживающий внимания универсальный ИК приемник для компьютера, а также множество других проектов. V-USB в свою очередь написан на C, правда с использованием ассемблерного кода в местах критических к производительности и точности эмуляции. USBtiny является производным от более ранней версии V-USB, имеет меньше возможностей из-за чего теоретически он проще для понимания.

Я остановился на реализации от V-USB, думаю вот основные преимущества:
  • V-USB опубликован на засадах GNU General Public License Version 2, так же имеется коммерческая лицензия
  • полная эмуляция USB 1.1 low-speed устройств за исключением обработки ошибок связи и электрических характеристик
  • запускается практически на всех AVR-ках, нужно минимум 2 килобайта флеша, 128 байт RAM и частота не меньше 12 MHz
  • V-USB предоставляет свободную пару идентификаторов (Vendor-ID и Product-ID)
  • хорошо задокументированный код на C, легче разбираться

Я у своих экспериментах с USB прошивку для МК писал языком C на AVR-Studio 4 + WinAVR, программу для ПК разрабатывал при помощи Borland C++ Builder 6.0 как самый быстрый и простой вариант. Соответственно такими будут все будущие примеры (кстати ATMEL уже выпустила 5-ю версию студии). Вообще выбор средств разработки очень ответственный шаг, но холивар по поводу что лучше C или Assembler устраивать не нужно. Я скажу просто: это лишь инструменты в наших руках. Нужно владеть всеми а использовать тот что удобней и правильней в поставленных перед собой целях. Естественно в умелых руках любой инструмент эффективный 🙂

Также нужно отдельно сказать про идентификаторы VID и PID. Это 16-битные числа, при помощи которых операционная система определяет устройства и подгружает нужный драйвер. Для того, чтобы получить Vendor-ID нужно заплатить usb.org 2000$. Интересные мысли по поводу легальности использования VID/PID можно прочитать на страничке эмбеддера BSVi. Тот факт, что V-USB предоставляет свободную пару VID/PID (легально купленную в usb.org) очень греет душу. Но что делать когда нужно одновременно подключить несколько USB устройств с одинаковыми VID/PID? Ничего страшного, помимо этих VID/PID каждое USB устройство имеет VENDOR_NAME и DEVICE_NAME идентификаторы, потом в примерах я покажу как этим воспользоваться.

Несколько ссылок по сабжу:
www.usb.org/developers/docs — официальная документация по USB. Не легкая для чтения, но наиболее полная.
www.beyondlogic.org/usbnutshell/usb1.htm — хороший обзор важных частей USB спецификации. Легче раскуривать чем официалку…
www.lvr.com/usb.htm — много хороших ссылок связанных с USB

В заключение напишу, что все условия для создания USB 1.1 устройств доступны каждому:

  • дешевые микроконтроллеры AVR
  • программная эмуляция USB, выберем V-USB
  • свободная пара Vendor-ID и Product-ID (вместе с V-USB)
  • множество примеров как для микроконтроллера так и для компьютера
Остается только одно — желание разобраться! А потом творить чудеса на копеечных микроконтроллерах всем мажорам на зависть 🙂
Продолжение: USB для AVR. Часть 2. HID Class на V-USB

we.easyelectronics.ru

Миниатюрный USB программатор для AVR микроконтроллеров / Habr

Как театр начинается с вешалки, так программирование микроконтроллеров начинается с выбора хорошего программатора. Так как начинаю осваивать микроконтроллеры фирмы ATMEL, то досконально пришлось ознакомится с тем что предлагают производители. Предлагают они много всего интересного и вкусного, только совсем по заоблачным ценам. К примеру, платка с одним двадцатиногим микроконтроллером с парой резисторов и диодов в качестве обвязки, стоит как «самолет». Поэтому остро встал вопрос о самостоятельной сборке программатора. После долгого изучения наработок радиолюбителей со стажем, было решено собрать хорошо зарекомендовавший себя программатор USBASP, мозгом которого служит микроконтроллер Atmega8 (так же есть варианты прошивки под atmega88 и atmega48). Минимальная обвязка микроконтроллера позволяет собрать достаточно миниатюрный программатор, который всегда можно взять с собой, как флэшку.

Автором данного программатора является немец Thomas Fichl, страничка его разработки со схемами, файлами печатных плат и драйверами.
Раз решено было собрать миниатюрный программатор, то перерисовал схему под микроконтроллер Atmega8 в корпусе TQFP32 (распиновка микроконтроллера отличается от распиновки в корпусе DIP):

Перемычка J1 применяется, в случае если необходимо прошить микроконтроллер с тактовой частотой ниже 1,5МГц. Кстати, эту перемычку вообще можно исключить, посадив 25 ногу МК на землю. Тогда программатор будет всегда работать на пониженной частоте. Лично для себя отметил, что программирование на пониженной скорости на доли секунды дольше, и поэтому теперь перемычку не дёргаю, а постоянно шью с ней.
Стабилитроны D1 и D2 служат для согласования уровней между программатором и USB шиной, без них работать будет, но далеко не на всех компьютерах.
Светодиод blue показывает наличие готовности к программированию схемы, red загорается во время программирования. Контакты для программирования выведены на разъем IDC-06, распиновка соответствует стандарту ATMEL для 6-ти пинового ISP разъема:

На этот разъем выведены контакты для питания программируемых устройств, здесь оно берется напрямую с USB порта компьютера, поэтому нужно быть внимательным и не допускать кз. Этот же разъем применяется и для программирования управляющего микроконтроллера, для этого достаточно соединить выводы Reset на разъеме и на мк (см. красный пунктир на схеме). В авторской схеме это делается джампером, но я не стал загромождать плату и убрал его. Для единичной прошивки хватит и простой проволочной перемычки. Плата получилась двухсторонняя, размерами 45х18 мм.

Разъем для программирования и перемычка для снижения скорости работы программатора вынесены на торец устройства, это очень удобно

Прошивка управляющего микроконтроллера

Итак, после сборки устройства осталось самое важное — прошить управляющий микроконтроллер. Для этих целей хорошо подходят друзья у которых остались компьютеры с LPT портом 🙂 Простейший программатор на пяти проводках для AVR
Микроконтроллер можно прошивать с разъема программирования, соединив выводы Reset микроконтроллера (29 нога) и разъема. Прошивка существует для моделей Atmega48, Atmega8 и Atmega88. Желательно использовать один из двух последних камней, так как поддержка версии под Atmega48 прекращена и последняя версия прошивки датируется 2009 годом. А версии под 8-й и 88-й камни постоянно обновляются, и автор вроде как планирует добавить в функционал внутрисхемный отладчик. Прошивку берем на странице немца. Для заливки управляющей программы в микроконтроллер я использовал программу PonyProg. При программировании необходимо завести кристалл на работу от внешнего источника тактирования на 12 МГц. Скрин программы с настройками fuse перемычек в PonyProg:

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

Установка драйвера

Установка велась на машину с системой Windows 7 и никаких проблем не возникло. При первом подключении к компьютеру выйдет сообщение об обнаружении нового устройства, с предложением установки драйвера. Выбираем установку из указанного места:

Выбираем папку где лежат дрова и жмем Далее

Мигом появится окно с предупреждением о том, что устанавливаемый драйвер не имеет цифровой подписи у мелкомягких:

Забиваем на предупреждение и продолжаем установку, после небольшой паузы появится окно, сообщающее об успешном окончании операции установки драйвера

Все, теперь программатор готов к работе.

Khazama AVR Programmer

Для работы c программатором я выбрал прошивальщик Khazama AVR Programmer. Замечательная программка, с минималистичным интерфейсом.

Она работает со всеми ходовыми микроконтроллерами AVR, позволяет прошивать flash и eeprom, смотреть содержимое памяти, стирать чип, а также менять конфигурацию фьюз-битов. В общем, вполне стандартный набор. Настройка фьюзов осуществляется выбором источника тактирования из выпадающего списка, таким образом, вероятность залочить кристалл по ошибке резко снижается. Фьюзы можно менять и расстановкой галок в нижнем поле, при этом нельзя расставить галки на несуществующую конфигурацию, и это тоже большой плюс в плане безопасности.

Запись фьюзов в память мк, как можно догадаться, осуществляется при нажатии кнопки Write All. Кнопка Save сохраняет текущую конфигурацию, а Load возвращает сохраненную. Правда я так и не смог придумать практического применения этих кнопок. Кнопка Default предназначена для записи стандартной конфигурации фьюзов, такой, с какой микроконтроллеры идут с завода (обычно это 1МГц от внутреннего RC).
В общем, за все время пользования этим программатором, он показал себя с наилучшей стороны в плане стабильности и скорости работы. Он без проблем заработал как на древнем стационарном пк так и на новом ноутбуке.

Скачать файл печатной платы в SprintLayout можно по этой ссылке

Ну вроде все, если возникнут вопросы, постараюсь ответить.

habr.com

LUFA - бесплатная библиотека USB для микроконтроллеров Atmel AVR | avr-working-with-usb

LUFA переводится как Lightweight USB Framework for AVRs, т. е. "облегченная рабочая среда USB для микроконтроллеров AVR" (старое название библиотеки MyUSB). Это библиотека и примеры программ (все с открытыми исходными кодами, разрешающая лицензия MIT), реализующие полный стек протоколов USB на микроконтроллерах ATmel, которые имеют аппаратную поддержку интерфейса USB - серии AT90USBxxxx and ATMEGAxxUx, например AT90USB162. Поддерживаются все известные Atmel USB AVR и отладочные платы USB AVR.

Библиотека в настоящий момент имеет стабильные релизы, доступные для загрузки и использования в проектах пользователей. Поддерживается работа в режиме USB устройства и USB хоста (режим хоста имеет некоторые ограничения).

Библиотека LUFA написана специально для бесплатного компилятора AVR-GCC и использует некоторые выражения языка, специфичные только для GCC - чтобы сделать интерфейс API библиотеки более наглядным и упрощенным. В среде Windows для использования AVR-GCC можно свободно скачать и использовать пакет WinAVR.

В архив библиотеки LUFA добавлены многочисленные примеры демонстрационных программ, которые показывают, как использовать библиотеку. Примеры разработаны для макетных плат USBKEY, STK525, STK526, EVK527, XPLAIN и RZUSBSTICK (в большинстве случаев в двух вариантах - Low Level API и USB Class Driver). Вот список примеров:

    * USB хост аксессуара Android
    * USB устройство Audio In
    * USB хост Audio In
    * USB устройство Audio Out
    * USB хост Audio Out
    * Bulk Vendor Device
    * USB устройство двухканального MIDI (Dual MIDI Device)
    * USB устройство двухканального виртуального COM-порта (Dual Virtual Serial Device)
    * Стандартное устройство USB HID (Generic HID Device)
    * Хост стандартного устройства USB HID (Generic HID Host)
    * USB джойстик
    * USB хост джойстика
    * USB клавиатура
    * USB устройство клавиатура/мышь
    * USB хост клавиатуры
    * USB клавиатура в двойном режиме (хост или устройство)
    * устройство памяти USB ("флешка", MSD, Mass Storage Device)
    * USB устройство Mass Storage/клавиатура
    * USB хост Mass Storage
    * USB устройство MIDI Device
    * USB хост MIDI
    * USB мышь
    * USB хост мыши
    * USB хост принтера
    * USB устройство Ethernet RNDIS (CDC)
    * Хост Ethernet RNDIS (CDC)
    * Хост Still Image
    * USB устройство виртуального последовательного порта
    * USB устройство виртуального последовательного порта и мыши
    * Комбинированное USB устройство Virtual Serial / Mass Storage Device
    * USB хост виртуального последовательного порта

Пакет библиотеки LUFA также содержит загрузчики программного кода (bootloader) для следующих классов USB:

    * Класс CDC, протокол совместим с AVR109 (AVRDude)
    * Класс DFU, протокол совместим с Atmel DFU (Atmel FLIP, программатор DFU)
    * Класс HID, протокол Teensy (Teensy Loader)
    * Класс Printer, который использует драйверы USB, встроенные в операционную систему
    * Класс Mass Storage, который использует драйверы USB, встроенные в операционную систему

В пакете библиотеки LUFA имеются также следующие проекты с открытым исходным кодом:

    * Адаптер программатора Arduino для макетной платы Benito board
    * Клон программатора AVRISP-MKII, совместимого со средой программирования AVR Studio (поддерживаются протоколы ISP, PDI и TPI) [6]
    * USB хост пусковой установки ракет от Дейва Флетчера
    * Считывающее устройство для магнитной полосы, совместимый Stripe Snoop от Денвера Джинджерича
    * HID Device Report viewer
    * Проект светодиодной (LED) напоминалки, с несколькими примерами для .NET хоста
    * Контроллер медиа-плеера
    * Тональный генератор MIDI
    * Проект контроллера для управления реле (OBinou Relay Board)
    * Переходник USB - последовательный порт
    * Логгер данных температуры, который записывает данные в собственную память Dataflash, в дисковый раздел FAT
    * Веб-сервер с использованием uIP, работающий через подключенное устройство RNDIS
    * Программатор XPLAIN PDI, основанный на мосте UART - USB

[Отличия LUFA от стека библиотек Atmel]

Atmel предоставляет официальный стек библиотек USB AVR stack, который может использоваться в пользовательских проектах и продуктах. Так как и LUFA, и стек Atmel предназначен для одной и той же цели и функциональности в проектировании устройств USB, то часто спрашивают - чем лучше LUFA по  сравнению с официальным стеком библиотек Atmel USB stack. Ниже описаны некоторые из преимуществ LUFA по отношению к официальному стеку.

Лицензирование: LUFA выпущен в соответствии с очень либеральной лицензией MIT (см. Source Code License), в то время как стек Atmel вводит несколько ограничений относительно того, как и где её библиотека может использоваться. Лицензирование LUFA одинаково хорошо подходит и для коммерческих и для некоммерческих объектов.

Демонстрационные примеры и проекты: в отличие от стека Atmel, LUFA поставляется со многими демонстрационными примерами для режима устройства USB и режима хоста USB в проектах, готовых для немедленного запуска. У Atmel отдельные примеры разбросаны по разным местам демонстрационных примеров AVR USB, что требует большего количества времени для поиска и предлагает меньше вариантов конечному пользователю. LUFA также содержит несколько загрузчиков (bootloader CDC и DFU) с открытым исходным кодом, которые могут быть изменены в соответствии с пожеланиями пользователя вместо того, чтобы быть вынужденным использовать единственный предварительно созданный загрузчик DFU Atmel (с закрытым исходным кодом).

Central Library Code: LUFA разработан, чтобы позволить коду ядра центральной библиотеки быть совместно использованным среди нескольких проектов (при условии очистки make clean скомпилированных объектных файлов между различными проектами). Это находится на прямом контрасте по отношению к библиотеке Atmel - библиотека Atmel строго связана с проектом, в который интегрирована. LUFA позволяет использовать только одну копию ядра библиотеки, которое будет необходимо для всех приложений, и делает обновление библиотеки используемым во всех проектах тривиальный процессом copy-and-paste.

Чистый API: одна из основных целей проекта LUFA состоит в том, чтобы сделать API удобным. В то время как LUFA - гибкий проект, который подвергся многим усовершенствованиям API, то его проще использовать и легче понять, чем эквивалентный код стека Atmel. API LUFA более полон, чем стек Atmel, и содержит много функций, чтобы ускорить разработку приложений.

Полная поддержка аппаратных средств: LUFA поддерживает весь ряд микроконтроллеров AVR USB Atmel (см. "Device and Hardware Support" в документации LUFA), с портированием между микросхемами, являющимися во многих случаях столь же простым, как единственный переключатель компиляции (makefile -> MCU). Стек Atmel требует, чтобы различные библиотеки использовались на основании определенной серии микроконтроллера AVR USB, что усложняет процесс перемещения между моделями AVR USB. Кроме того, LUFA содержит драйверы для всех аппаратных средств, содержащихся на базовых макетных платах AVR USB Atmel (и многих популярных платах других производителей), благодаря чему Вы можете быстро и легко начать программировать на LUFA.

Лучшая поддержка Библиотеки: так как множество людей теперь используют LUFA, вокруг этой библиотеки появилось сообщество. Вы можете быстро получить ответы на вопросы, связанные с LUFA электронной почтой от автора библиотеки, или отправив запрос на официальный LUFA support mailing list.

LUFA не единственный (хотя наверное, наилучший) стек, доступный для AVR USB. Здесь перечислены другие известные стеки AVR USB.

[Проекты, основанные на библиотеке LUFA]

LUFA в настоящий момент используется повсюду в мире, во многих приложениях - коммерческих и некоммерческих. Ниже приведен список (состояние на начало 2011 года) известных публичных проектов, основанных на LUFA, использующих библиотеку LUFA разными способами. Для получения дополнительной информации о каждом проекте посетите их домашнюю страницу. Если у Вас есть проект, который Вы хотели бы добавить в этот список, напишите автору библиотеки LUFA.

Платы для разработки (Development Boards) AVR-USB, использующие LUFA

В следующем списке - известные платы для разработки программ с микроконтроллерами AVR USB, с которыми рекомендуется использовать LUFA для стека USB. Некоторые из них имеют открытый дизайн, и все доступны для приобретения как полноценные макетные платы для разработки.

- AVR-USB-162 site:olimex.com, похожая на USBKEY плата разработки для чипа AT90USB162
- Duce Benito site:dorkbotpdx.org, простейшая плата USB
- JM-DB-U2, плата разработки на чипе ATMEGA32U2, MT-DB-U2 (MT-DB-U1) site:u2.mattair.net ATmega32U2 (AT90USB162) USB Dev Board
- Micropendous site:micropendous.org, набор плат разработчика AVR USB с открытым дизайном и исходниками
- Макетная плата Microsin AVR-USB162, DIY-плата разработчика на чипе AT90USB162
- Minimus USB site:minimususb.com - плата, специально разработанная для PSGroove
- Nanduino, самодельная плата на чипе AT90USB162
- Teensy, Teensy++ site:pjrc.com, две другие платы разработчика AVR USB
- U2DIL/U4DIL site:reworld.eu, набор плат USB AVR с разводкой DIP
- USBFOO V2 - AVR USB Device site:kernelconcepts.de, плата разработчика, основанная на чипе AT90USB162

Хобби-проекты с использованием LUFA

Далее идут известные хобби-проекты, использующие библиотеку LUFA. Многие открыты (open source), и показывают интересные  способы, с которыми библиотека LUFA может быть интегрирована в многие приложения.

- Arduino + accelerometer as joystick for Second Life site:cjdavies.org, игровой джойстик с акселерометром
- USB Arcade Joystick using a Minimus 32 site:jamie.lentin.co.uk, аркадный контроллер
- avrusbmodem site:code.google.com, модем AVR USB, беспроводной хост модема 3G
- bicycleledpov site:code.google.com, Bicycle POV - анимационные изображения на крутящемся колесе велосипеда
- bus-ninja AVR Bus-Pirate-a-like site:github.com, AVR-клон популярного проекта BusPirate
- CAMTRIG Camera trigger device with precise timing and analog input site:code.astraw.com, дистанционное устройство триггера камеры
- USB CD Emulation site:cdemu.blogspot.com - донгл эмулятор драйвера CD для файлов ISO
- clock-tamer site:code.google.com, ClockTamer, конфигурируемый тактовый генератор
- EMuSer (previously called EmuComBox) site:users.skynet.be, адаптер USB-RS422 для семплеров E-Mu Emax
- Estick JTAG site:code.google.com, ARM JTAG отладчик
- MIDI Fingerlicking Wingdinger site:noisybox.net, контроллер MIDI
- garmin-transmogrifier site:github.com - транслятор последовательных выражений Garmin GPS USB в стандарт NMEA
- Generic HID - DIY USB HID site:generichid.sourceforge.net, генератор стандартных устройств HID (Generic HID Device Creator)
- Ghetto Drum site:noisybox.net, контроллер MIDI барабана
- Hacking a USB Infrared receiver site:netzhansa.blogspot.com - декодер посылок инфракрасного пульта (IR Remote) в нажатия клавиатуры
- Panels Controller site:projects.peterpolidoro.net - контроллер светодиодной панели (LED Panel controller)
- PSGroove site:github.com, доморощенный донгл для взлома Playstation 3
- Bumble-b control a LED matrix site:guysoft.wordpress.com - одиночный символьный индикатор, матричный светодиодный дисплей (Single LED Matrix Display)
- TomMD / teensy site:github.com - донгл защищенного хранилища Linux (Linux Secure Storage Dongle)
- MakeTV Episode Dispenser
- Midi Monster site:dorkbotpdx.org, плата шлюза USB-MIDI
- Mobo 4.3 Project site:sites.google.com, управляемый по USB вседиапазонный (160..10 метров) трансивер HF SDR
- Nintendo NES controller as a USB joystick site:projects.peterpolidoro.net, USB-модификация контроллера NES
- Opendous-JTAG, open source отладчик ARM JTAG
- OpenKubus site:code.google.com, аппаратный open source донгл для аутентификации
- Orbee - USB controlled glowing orb Orbee site:franksworkshop.com.au, a USB connected RGB Orb for notifications
- Pan-Galactic Gargantuan Gargle Brain (PG3B) site:code.google.com - программируемый контроллер XBOX
- Reprap LUFA site:code.google.com, основанный на LUFA 3D-принтер
- Teensy2 USB Mass Storage with an SD card site:elasticsheep.com - ридер карт SD
- UMDKv1, UMDKv2 site:makestuff.eu - картридж SEGA Megadrive/Genesis Development
- Stripe Snoop USB Adapter site:ossguy.com, ридер магнитных карт
- Teensy2 USB WAV player site:elasticsheep.com - проигрыватель WAV-файлов на карте SD
- Touchscreen USB site:capnstech.blogspot.ru - сенсорный экран (Touchscreen Input Device)
- Интерфейс USB для устройств Playstation Portable
- Userial, конвертер USB <--> Serial с поддержкой протоколов SPI, I2C и других
- XUM1541 firmware for the ZoomFloppy site:root.org, адаптер для Commodore 64 - драйв floppy в USB

Коммерческие проекты на библиотеке LUFA

Следующий список показывает известные коммерческие продукты на библиотеке LUFA. Некоторые из них - открытый исходный код, хотя многие - "черный ящик", без предоставленного исходного кода.

- Arduino Uno site:arduino.cc, официальная плата Arduino
- Digital Survey Instruments site:indiamart.com - магнитометр и указатель
- Penguino AVR, плата Arduino со встроенным отладчиком/программатором, основанном на LUFA
- PIR-1 site:promixis.com, интерфейс инфракрасного управления для потребительской электроники
- busware.de projects site:busware.de - множество продуктов компании Busware
- MIDIFighter site:midifighter.com, контроллер USB-MIDI
- Retrode site:retrode.org, USB ридер картриджа игровой консоли (USB Games Console Cartridge Reader)
- USBTiny MkII Programmer site:tom-itx.dyndns.org, клон программатора AVRISP-MKII
- xmega site:xmega.mattair.net - плата разработки на XMEGA, использующая LUFA на встроенном программаторе

[Альтернативные стеки библиотек USB AVR - Аппаратные стеки (Hardware USB AVR Stacks)]

Это известные альтернативные стеки USB, которые разработаны для и выполнены исключительно на серийных микроконтроллерах AVR USB, которые содержат аппаратные средства контроллера USB на микросхеме - с целью получения максимальной скорости и наибольшего количества функций.

Name: Atmel USB AVR Stack (Atmel Inc.)
Стоимость: Free (бесплатно)
License: ограниченная лицензия Atmel (Atmel Limited License, подробности см. в Atmel download)
Website: http://atmel.com/dyn/products/app_notes.asp?family_id=607#USB
Описание: официальный стек AVR USB Atmel для их 8-разрядной линейки AVR USB. Каждая серия AVR USB разделена на отдельный стек библиотеки для загрузки, который является совместимым и для AVR-GCC и и для IAR.

Name: Dr. Stefan Salewski's AT90USB1287 Stack (Dr. Stefan Salewski)
Стоимость: Free (бесплатно)
License: GPL
Website: http://www.ssalewski.de/AT90USB_firmware.html.en
Описание: GPL-библиотека, специально предназначенная для AT90USB1287, написанная доктором Штефаном Салевским, немецким Физиком. Компилируется для AVR-GCC и потенциально может быть изменена, чтобы работать над другими моделями AVR USB.

Name: PJRC Teensy Stack (Paul Stoffregen)
Стоимость: Free (бесплатно)
License: BSD
Website: http://www.pjrc.com/teensy/usb_debug_only.html
Описание: несколько неполный стек в виде как набора демонстрационных примеров USB, эта библиотека специально предназначена для линейки PJRC Teensy AVR USB и должна быть изменена для использования с другими микроконтроллерами AVR USB. Эти минимальные примеры кода показывают внутреннее функционирование контроллера USB без абстракции, существующей в большинстве других стеков AVR USB.

[Альтернативные стеки библиотек USB AVR - программные стеки(Software AVR Stacks)]

Известные альтернативные стеки USB, которые могут работать на обычных (без аппаратной поддержки USB) моделях AVR. Используется bit-banged (эмулированная) версия протокола USB. Стек ограничен в возможностях из-за циклов, требуемых для выделения поддержкой шины USB, но предлагает дешевый способ реализовать функциональность USB в проекте.

Name: AVR309: Software USB (Atmel)
Стоимость: Free (бесплатно)
License: не установлена (None Stated)
Website: http://www.atmel.com/dyn/Products/app_notes.asp?family_id=607
Описание: официальная программная реализация USB от Atmel, в виде апноута, содержащего работу Igor Cesko. Минимальная реализация на языке ассемблера, обеспечивающая только работу USB HID. Меньше опций компиляции, чем у библиотеки V-USB (см. ниже).

Name: V-USB (Objective Development)
Стоимость: бесплатно (Free) для некоторых пользователей, см. описание лицензии на сайте Objective Development
License: Dual GPL2/Custom
Website: http://www.obdev.at/products/vusb/index.html
Описание: хорошо реализованный и полный USB 1.1 стек программного обеспечения для нескольких моделей AVR. В основном реализовывается Низкоскоростной HID. Используется во многих коммерческих и некоммерческих проектах, с представленными пользователем проектами, доступными для просмотра на веб-сайте компании. Применяет код языка C использованием кода ассемблера для секций, строго ограниченных по времени выполнения.

[Ссылки]

1. LUFA site:fourwalledcubicle.com - тут можно найти ссылки на закачку последнего стабильного релиза, а также предыдущих релизов.
2. WinAVR site:sourceforge.net - бесплатная среда разработки для AVR на платформе Windows.
3. AVR-USB162 - макетная плата с чипом Atmel AT90USB162.
4. Переведенная на русский язык документация Doxygen по библиотеке LUFA.
5. 110626LUFA101122.ZIP - пакет с русифицированной библиотекой LUFA (переведены комментарии в файлах и документация, добавлена поддержка платы AVR-USB162MU).
6. AVR-USB162MU: макетирование и изготовление программатора AVRISP-MKII в домашних условиях.

microsin.net

AVR-USB-MEGA16: как сделать STK500-совместимый ISP и HVSP программатор (AVR-Doper) | avr-working-with-usb

Статья посвящена клону программатора STK500. Протокол STK500 разработан изначально фирмой Atmel, и поэтому описанный программатор принимается как "родной" большинством популярных программ - AVR Studio, CodeVisionAVR, BASCOM-AVR, avrdude. Программатор может быть изготовлен в двух вариантах - "облегченном", в этом случае он работает как стандартный ISP-программатор, и "полном", в этом случае дополнительно поддерживается возможность программирования чипа "высоковольтным" методом (HVSP), позволяющим восстанавливать чипы AVR (в данной версии программатора имеются сокеты для чипов с 8 и 14 ножками), брикнутые неправильной установкой фьюзов.

Программатор работает на основе исходников программатора AVR-Doper (см. ссылки [2]), который был изначально рассчитан на микроконтроллер ATmega8. Портирование программатора AVR-Doper на макетную плату AVR-USB-MEGA16 (микроконтроллер ATmega32) позволило решить проблему "курицы и яйца" (т. е. чем запрограммировать программатор) - благодаря наличию в макетной плате AVR-USB-MEGA16 бутлоадера USBasp. Программатор питается и обменивается данными с компьютером через подключение по USB. Протокол USB обрабатывается программно, с помощью популярной библиотеки V-USB. Далее для краткости я буду называть описываемый программатор просто как AVR-Doper.

Для начала несколько слов о возможностях AVR-Doper - чем он хорош и что умеет.

- HVSP позволяет использовать ножку RESET для ввода и вывода (I/O), что особенно полезно для чипов, у которых мало ножек - с 8 и 14 выводами.
- простая аппаратура программатора позволяет собрать его на односторонней печатной плате. Не требуется никаких специальных чипов для USB.
- совместимость с протоколом STK500 компании Atmel, протокол работает через встроенный преобразователь USB <--> RS232.
- настраиваемая частота тактов ISP позволяет прошивать микроконтроллеры, тактируемые с очень низкой частотой, например 32 кГц.
- частота тактов ISP может быть снижена перемычкой, если программное обеспечение не позволяет менять тактовую частоту ISP clock.
- имеется второй преобразователь USB <--> Serial для обработки отладочного вывода из программируемого устройства.
- коннектор HVSP совместим с программатором HVProg, это другой совместимый с STK500 программатор (см. ссылки [6]).
- Open Source (включая firmware и принципиальную схему).
- использует питание от USB, внешние источники питания не нужны.
- может использоваться как альтернативное firmware для плат metaboard (для построения на ней программатора), см. http://www.obdev.at/goto?t=metaboard-prog
- может использоваться как альтернативное firmware для программатора USBasp, разработанного Thomas Fischl, см. http://www.fischl.de/usbasp/
- список программируемых чипов внушает уважение как минимум, достаточно посетить страницу, посвященную STK500, на сайте Atmel (см. ссылки [4]).

AT90CAN128, AT90CAN128 Automotive, AT90CAN32, AT90CAN32 Automotive, AT90CAN64, AT90CAN64 Automotive, AT90PWM1, AT90PWM2, AT90PWM216, AT90PWM2B, AT90PWM3, AT90PWM316, AT90PWM3B, AT90PWM81, AT90S1200, AT90S2313, AT90S2323, AT90S2343, AT90S4433, AT90S8515, AT90S8535, AT90USB1286, AT90USB1287, AT90USB162, AT90USB646, AT90USB647, AT90USB82, ATmega103, ATmega128, ATmega1280, ATmega1280R212, ATmega1280R231, ATmega1281, ATmega1281R212, ATmega1281R231, ATmega1284, ATmega1284P, ATmega1284PR231, ATmega1284RZAP, ATmega128A, ATmega128RZAV, ATmega128RZBV, ATmega16, ATmega161, ATmega162, ATmega163, ATmega164A, ATmega164P, ATmega164P Automotive, ATmega164PA, ATmega165, ATmega165P, ATmega165PA, ATmega168, ATmega168 Automotive, ATmega168A, ATmega168P, ATmega168PA, ATmega169, ATmega169A, ATmega169P, ATmega169P Automotive, ATmega169PA, ATmega16A, ATmega16HVA, ATmega16M1, ATmega2560, ATmega2560R212, ATmega2560R231, ATmega2561, ATmega2561R212, ATmega2561R231, ATmega256RZAV, ATmega256RZBV, ATmega32, ATmega323, ATmega324A, ATmega324P, ATmega324P Automotive, ATmega324PA, ATmega325, ATmega3250, ATmega3250A, ATmega3250P, ATmega325A, ATmega325P, ATmega325PA, ATmega328, ATmega328P, ATmega328P Automotive, ATmega329, ATmega3290, ATmega3290A, ATmega3290P, ATmega329A, ATmega329P, ATmega329PA, ATmega32A, ATmega32C1 Automotive, ATmega32HVB, ATmega32M1, ATmega32M1 Automotive, ATmega32U4, ATmega406, ATmega48, ATmega48 Automotive, ATmega48A, ATmega48P, ATmega48PA, ATmega64, ATmega640, ATmega644, ATmega644A, ATmega644P, ATmega644P Automotive, ATmega644PA, ATmega644PR231, ATmega644R212, ATmega645, ATmega6450, ATmega6450A, ATmega6450P, ATmega645A, ATmega645P, ATmega649, ATmega6490, ATmega6490A, ATmega6490P, ATmega649A, ATmega649P, ATmega64A, ATmega64C1 Automotive, ATmega64M1, ATmega64M1 Automotive, ATmega64RZAPV, ATmega64RZAV, ATmega8, ATmega8515, ATmega8535, ATmega88, ATmega88 Automotive, ATmega88A, ATmega88P, ATmega88PA, ATmega8A, ATtiny11, ATtiny12, ATtiny13, ATtiny13A, ATtiny15L, ATtiny167, ATtiny2313, ATtiny2313A, ATtiny24, ATtiny24 Automotive, ATtiny24A, ATtiny25, ATtiny25 Automotive, ATtiny26, ATtiny261, ATtiny261 Automotive, ATtiny261A, ATtiny28L, ATtiny4313, ATtiny43U, ATtiny44, ATtiny44 Automotive, ATtiny44A, ATtiny45, ATtiny45 Automotive, ATtiny461, ATtiny461 Automotive, ATtiny461A, ATtiny48, ATtiny84, ATtiny84 Automotive, ATtiny85, ATtiny85 Automotive, ATtiny861, ATtiny861 Automotive, ATtiny861A, ATtiny88, ATtiny88 Automotive 

Короче говоря, программируется все, что шевелится.

[ISP - облегченный вариант AVR-Doper]

Для облегченного варианта программатора (поддерживающего только ISP) необходимо собрать на макетном поле платы AVR-USB-MEGA16 следующую схему:

Коротко о назначении элементов схемы:

1. Микросхема 74HC126N нужна для согласования уровней сигналов при раздельном питании программируемого устройства и программатора.
2. Перемычка JP1 нужна для переключения питания программируемого устройства. Когда перемычка JP1 установлена, то программируемое устройство и микросхема 74HC126N питаются от программатора (в конечном счете от +5 вольт USB). Когда перемычка JP1 снята, то программируемое устройство и микросхема 74HC126N питаются от программируемого устройства, и это напряжение питания может отличаться от +5 вольт (например, быть +3.3 вольта).
3. Резисторы R17 и R19 служат для измерения напряжения питания программируемого устройства.
4. Коннектор SV1 ISP служит для подключения программируемого устройства. На этот разъем также выведены сигналы последовательного порта RXD и TXD микроконтроллера, что позволяет микроконтроллеру служить мостом между отлаживаемым микроконтроллером и виртуальным COM-портом компьютера. Эту возможность при желании можно использовать для отладки программы в программируемом устройстве (например, для отладочного вывода printf). Резисторы R10 и R11 нужны как ограничители тока (по крайней мере R11), так как в стандартном коннекторе ISP10 ножки 8 и 10 могут соединяться в землей GND.
5. На контакт 3 разъема SV1 ISP выводится тактовая частота для программируемого микроконтроллера, которая может использоваться для оживления микроконтроллера, тактовый генератор которого не может запуститься из-за ошибки в установке фьюзов. Тактовая частота CLK может быть изменена под управлением программы на компьютере (например, в AVR Studio).
6. Перемычка JP2 Slow SCK служит для снижения частоты тактов программирования ISP, если программное обеспечение не позволяет менять частоту тактов ISP.
7. Перемычка JP3 USB HID служит для перевода программатора AVR-Doper из стандартного режима USB CDC (виртуальный COM-порт) в нестандартный (по отношению к протоколу STK500) режим USB HID. Этот режим не поддерживается AVR Studio, однако может понадобиться на операционных системах типа Linux или FreeBSD, где иногда могут быть проблемы с программным обеспечением в режиме USB CDC для AVR-Doper. Например, популярный консольный программатор avrdude поддерживает режим USB HID программатора AVR-Doper. Если перемычка USB HID установлена (состояние перемычки считывается при включении питания программатора), то активируется режим USB HID.

Больше никаких особенностей схема не имеет, все тупо и просто. Внешний вид собранного программатора:

Назначение установленных на плату деталей:

JP1 Power переключает тип питания программируемого устройства (см. описание принципиальной схемы).
JP2 Slow SCK переключает частоту тактов ISP (см. описание принципиальной схемы).
JP3 USB HID переключает тип интерфейса программатора (см. описание принципиальной схемы).
SV1 ISP разъем для подключения программируемого устройства (см. описание принципиальной схемы).

12-выводный коннектор мама у нижнего края платы пока никуда не подключен. Он предназначен для расширения функционала программатора - добавления возможности HVSP.

Правильно собранный и прошитый (с помощью встроенного в макетную плату bootloader-а USBasp) программатор никакой наладки не требует и начинает работать сразу.

Внимание! Чтобы правильно работал ADC для измерения напряжения, нужно не забыть выпаять резистор R3 платы AVR-USB-MEGA16 (т. к. используется внутренний источник опорного напряжения 2.56 вольт).

Программатор AVR-Doper в "боевом положении" - считывается память flash у микроконтроллера ATmega32, установленного на макетной плате AVR-USB-MEGA16.

[Установка AVR-Doper в операционной системе Windows]

Процесс несложный, разберем его по шагам.

1. Снять перемычку JP3 USB HID (если она установлена). Программатор у нас будет работать в режиме USB CDC (виртуальный COM-порт), этот режим работает по стандартному протоколу STK500, что позволит использовать программатор в большинстве популярных IDE для программирования AVR (AVR Studio, CodeVisionAVR, BASCOM-AVR и др.).
2. Подключить программатор по USB к компьютеру. При первом подключении операционная система обнаружит новое устройство и запросит драйвер. В качестве драйвера нужно подсунуть файл avrdoper.inf или avrdoper-vista.inf (эти файлы можно найти в архиве по ссылке [5]). При предупреждении о неподписанном (unsigned) программном обеспечении выбрать "установить все равно".
3. После установки в системе появится еще один COM-порт, его номер можно подсмотреть в Диспетчере Устройств. Номер COM-порта нужно знать, чтобы правильно запустить STK50/AVR-Doper в популярных программах (AVR Studio, CodeVisionAVR, BASCOM-AVR и др.).

[HVSP - полный вариант AVR-Doper]

Этот вариант схемы немного сложнее, но зато он поддерживает сразу 2 режима программатора STK500 - ISP и HVSP.

Схема взята почти один-в-один с оригинального варианта, с минимальными переделками - поменял силовой транзистор преобразователя на MOSFET, и добавил индикационный светодиод REG_LED LED1, показывающий нагрузочный режим регулятора напряжения преобразователя (устанавливать этот светодиод необязательно). Схема состоит из двух частей - PARTA и PARTB. Часть PARTA целиком собрана на макетной плате AVR-USB-MEGA16 и почти полностью повторяет схему облегченного варианта AVR-Doper, так что облегченный вариант можно легко допаять, подключив коннектор-маму JP4. Часть PARTB собрана на отдельной подсоединяемой плате и содержит преобразователь напряжения, транзисторные ключи и сокет для подключения программируемых микросхем в корпусах DIP8 и DIP14. Схема никаких особенностей не имеет и наладки не требует - правильно собранная, начинает работать сразу. На фото показан внешний вид дополнительной платы PARTB и программатор в сборе. Два маленьких коннектора ISP и JTAG на макетной плате AVR-USB-MEGA16 используются только для жесткости - как механическое крепление платы PARTB.

Самое сложное в изготовлении было найти дроссель (в описании сказано, что подойдет любой 0.3 .. 3 мГн). Я поступил просто - взял готовый дроссель от материнской платы с ферритовым сердечником (внимание: кольцевой, тороидальный сердечник не подойдет), замерил его индуктивность, снял обмотку, при этом посчитав витки. Далее просто намотал новую обмотку на требуемую индуктивность подходящим проводом (индуктивность катушки прямо пропорциональна квадрату числа витков, поэтому рассчитать количество витков просто). У меня получился отличный дроссель на 1.7 мГн (216 витков эмалированного провода диаметром 0.12 мм). Сверху надел термоусадочную трубку и прогрел феном (воздушный поток 150 градусов Цельсия).

В режиме HVSP программатор работает в несколько раз быстрее, чем в режиме ISP (с чем связано - не знаю, наверное с особенностью протокола). Кроме того, есть полный доступ к фьюзам, позволяющим использовать ножку RESET чипа как порт ввода/вывода, что весьма полезно, если для разработки устройства на микроконтроллере Вам не хватает ножек. 

[Программное обеспечение для AVR-Doper]

Как я уже упоминал, выбор программного обеспечения богатый - как минимум AVR Studio, BASCOM-AVR и кроссплатфоменный avrdude. Сначала ничего не хотел про это писать, все вроде и так понятно, но потом все-таки решил сделать краткий обзор. Фаворит, ИМХО, среди всех программ - оболочка программатора AVR Studio. У CodeVisionAVR наблюдались глюки - после обращения к программатору программа отказывалась видеть программатор до его перетыкания в USB. Неплохая программная оболочка у программатора в BASCOM-AVR - есть возможность навигации по данным прошивки (простейший HEX-редактор). Для постоянно повторяющихся операций лучше всего подойдет консольная программа avrdude.

Все программы объединяет необходимость перед первым использованием программатора выбрать в настройках его тип (STK500 или AVRISP) и настроить COM-порт, к которому подключен программатор. Особых трудностей это не вызывает - все делается в соответствующем меню настроек, а номер COM-порта легко узнать через Диспетчер Устройств.

AVR Studio

Набор возможностей программы впечатляет. Есть доступ к всем режимам программирования, фьюзам, битам защиты, имеется настройка частот SCK ISP и частоты тактирования чипа CLK, считывание уровня напряжения питания чипа, калибровка встроенного тактового генератора и проч. Бегло рассмотрим возможности программы, пробежавшись по закладкам.

Первая закладка Main позволяет выбрать из выпадающего списка тип программируемого чипа, выбрать режим программирования (ISP или HVSP), полностью стереть чип, прочитать его сигнатуру.

Есть также возможность установить частоту тактов SCK ISP, выбрав её из ряда частот.

Закладка Program позволяет программировать flash и eeprom чипа (для этого есть кнопки Program и система выбора файла), сверить память чипа с файлом (кнопки Verify), а также скидывать в hex-файл содержимое памяти (кнопки Read). Можно также сохранить состояние фьюзов и бит защиты в файл формата ELF, а также записать фьюзы и биты защиты данными из ELF-файла.

Переход на закладку Fuses автоматически считывает состояние перемычек, и показывает их в виде чекбоксов и в HEX-формате. В этом окне можно перемычки записывать, проверить, прочитать.

Закладка LockBits позволяет манипулировать битами защиты. Принцип работы и возможности тут те же самые, что и для закладки Fuses.

Закладка Advanced позволяет считывать или менять калибровочные данные для внутреннего тактового генератора RC.

Закладка HW Settings позволяет узнать напряжение питания программируемого чипа, а также установить тактовую частоту генератора CLK. Генератор применяемого для чипа, у которого нет кварца, либо если по каким-то причинам у чипа не работает тактовый генератор. Тактовая частота CLK выводится на ножку 3 разъема SV1 ISP программатора AVR-Doper. Я обычно этот сигнал не использую.

Закладка HW Info позволяет получить информацию по железу и прошивке программатора AVR-Doper. Сюда заглядывать нет особой необходимости.

Закладка Auto позволяет делать групповые заранее настроенные операции с чипом, которые доступны на других закладках. Я этой возможностью почти никогда не пользуюсь.

CodeVisionAVR

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

BASCOM-AVR

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

avrdude

Программатор AVR-Doper поддерживается консольной утилитой avrdude в режиме USB HID, начиная с версии 5.3 (более ранние версии требуют патча и перекомпиляции). Утилита работает и под Windows, и под *nix (Linux, FreeBSD). Для Windows avrdude можно скачать в составе пакета WinAVR. Версия avrdude, с которой я экспериментировал, была 5.5 (версию можно узнать командой avrdude -v). Для работы с avrdude нужно установить перемычку JP3 USB HID и переподключить USB-интерфейс программатора. Для проверки работоспособности программатора можно ввести команду avrdude -c stk500v2 -P avrdoper -p atmega32 (для чипа atmega32):

А вот пример сохранения памяти flash в файл на диске c:\001.hex:

В режиме USB HID программатор работает намного быстрее, чем в режиме USB CDC с программами AVR Studio и BASCOM-AVR. Поэтому для часто повторяющихся операций лучше всего выбрать avrdude. Имеется также написанная для avrdude графическая оболочка avrdude-gui.exe.

Еще пробовал программатор AVR-Doper с программой CrossStudio/CrossWorks AVR 1.3. Программатор определяется и работает, однако подробно не тестировал, поскольку опыта работы с CrossStudio/CrossWorks у меня нет.

[Словарик терминов]

AVR популярное семейство микроконтроллеров компании Atmel. Разделяется на подгруппы AVR Classic, AVR Tiny и AVR Mega. Последние два семейства самые современные и как правило поддерживают технологию аппаратной отладки debugWIRE через ножку RESET, либо отладку через JTAG.

firmware программное обеспечение для микроконтроллера. Обычно термин применяется отдельно от термина software, чтобы подчеркнуть, что программа работает не на PC, а в "железячном" устройстве.

fuses фьюзы, перемычки. Под этим термином понимаются энергонезависимые настройки (т. е. сохраняющиеся между выключениями питания), влияющие на потребительские свойства микроконтроллера AVR. Например, фьюзами может быть запрограммирован тип тактового генератора (кварцевый или внутренний), включение по умолчанию сторожевого таймера, коэффициент деления тактовой частоты и многие другие опции. 

ISP аббревиатура In System Programming. Означает возможность записи программы firmware в чип (микроконтроллер) прямо на плате, на которой чип установлен.

HVSP аббревиатура High Voltage Serial Programmer - программатор, поддерживающий программирование чипа повышенным напряжением.

STK200 название уже несколько устаревшего протокола (разработан Atmel) обмена данными с программатором.

STK500 название популярного открытого протокола (разработан Atmel) обмена между программатором и компьютером, к которому программатор подключен. Протокол работает поверх подсоединения программатора через стандартный COM-порт (обычный, или виртуальный, работающий через USB).

брикнутый чип микроконтроллер, приведенный в нерабочее (и непрограммируемое через ISP) состояние. Восстановить такой чип можно только через HVSP.

[Ссылки]

1. STK200-совместимый программатор, собранный на базе макетной платы AVR-USB-MEGA16.
2. AVR-Doper - STK500 compatible In-System Programmer (ISP) and High Voltage Serial Programmer (HVSP) site:obdev.at.
3. Программаторы для AVR.
4. STK500 site:atmel.com.
5. 101229AVR-Doper.2008-11-27.zip - исходный код программатора AVR-Doper (ISP и HVSP версия, собранная на макетной плате AVR-USB-MEGA16), документация, принципиальная схема, драйвер (avrdoper.inf, avrdoper-vista.inf), фотографии.
6. HVProg site:der-hammer.info - еще один клон STK500 (подключается к компьютеру не через USB, а через RS-232, т. е. обычный COM-порт).

microsin.net

USB программатор для AVR — AVR devices

Программатор это пожалуй один из основных инструментов разработчика устройств на микроконтроллерах. Ведь именно он позволяет вдохнуть жизнь в микросхему. Такой инструмент должен быть качественным и отвечать современным требованиям:

  • Иметь интерфейс USB, а не устаревшие COM или LPT
  • Поддерживаться популярными программами
  • Поддерживать прошивку самых распространённых контроллеров
  • Прошивать с высокой скоростью

Конечно программатор можно и купить, но у Atmel к сожалению слишком неадекватные цены на средства программирования и отладки. В сети очень много схем различных программаторов, но как правило вышеизложенным требованиям они не удовлетворяют. Особенно это касается интерфейса подключения к компьютеру. Например у  USBasp интерфейс USB реализован программно, и гарантии что он будет работать на всех компьютерах нет. Так какой же программатор собрать? Я предлагаю аналог AVRISP mkII.


Клоном его назвать не поворачивается язык, уж слишком сильные схемотехнические различия между оригиналом и данным программатором. Аналог фирменного это очень хорошо, ведь фирменные программаторы поддерживаются AVR Studio и многим другим популярным софтом т.к. протокол обмена программы и программатора открыт. Открыт так же исходный код прошивки данного программатора. В будущем я планирую доработать его, добавив буфер и светодиод индикации активности.  Буфер нужен для того чтобы обезопасить микроконтроллер в случае если на выводы программирования попадёт повышенное напряжение или произойдет короткое замыкание. Буфер стоит копейки, а микроконтроллер далеко не самый дешевый. В данной схеме вся защита возложена на токоограничивающие резисторы, поставленные в разрыв линий программирования. Их можно и не ставить но безопасности ради я рекомендую. Вот собственно схема:

Впервые рисовал схему в Eagle так что сильно не пинать =) Рулезная вещица кстати!
С вывода UCAP можно снимать напряжение 3.3 вольта, через него запитан сам микроконтроллер. Это сделано для того, чтобы можно было безболезненно прошивать микроконтроллеры питающиеся от 3.3 вольт. У данного программатора  очень хорошо решена проблема «курицы и яйца». Обычно, чтоб сделать USB программатор вроде того же USBasp, сначала нужно найти другой программатор чтоб запрограммировать контроллер для будущего программатора. С этим программатором всё иначе. Туда уже зашит загрузчик который позволит обновить прошивку по USB при помощи утилиты FLIP от Atmel. Я к сожалению узнал об этом когда уже прошил контроллер другим программатором и эту возможность протестировать не удалось. Перемычка нужна видимо для управления загрузчиком. Для работы с программатором должны быть установлены драйвера. Как правило они ставятся вместе со студией. Если драйвера не нашлись то обновляем студию. Когда драйвера поставятся — можно шить. Список поддерживаемых контроллеров огромен, присутствует поддержка ATXmega (лично не проверял). Шьёт программатор быстро. Для эксперимента написал прогу которая занимает всю память контроллера Atmega32. Прошивка заняла 5 секунд, чтение примерно 2 секунды. Испытания проводились при тактировании контроллера от 16 Мгц. Это очень хорошие результаты, такого никогда не добиться на простейших пяти проводках или программаторе Громова. По сложности изготовления он примерно такой же как и два вышеупомянутых. Трудности могут возникнуть только с запайкой TQFP корпуса, да и они преодолимы. Я впервые за пол года накосячил в разводке платы пришлось допаять проводок:

Резисторы можно заюзать самые обычные выводные, но я что-то совсем обленился сверлить дырки и перешел на SMD монтаж. Кстати типоразмер 1206 можно паять обычным паяльником с тонким жалом. Просто нужно немного приноровится. Исправленная печатка прилагается и в случае чего можно её поправить как нужно. В дальнейших планах засунуть всё это дело в нормальный корпус и юзать в качестве основного программатора.
Сайт автора
Ещё ссылка по теме
Прошивка
Печатная плата

avrdevices.ru

Отправить ответ

avatar
  Подписаться  
Уведомление о