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 устройство Audio In
* USB устройство Audio Out
* USB устройство двухканального виртуального последовательного порта (Dual Virtual Serial Device)
* стандартное устройство USB HID (Generic HID Device)
* стандартный хост USB HID
* 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 хост принтера
* устройство Ethernet RNDIS (CDC)
* хост Ethernet RNDIS (CDC)
* хост Still Image
* USB устройство виртуального последовательного порта
* USB устройство виртуального последовательного порта и мыши
* USB хост виртуального последовательного порта
Пакет библиотеки LUFA также содержит загрузчики программного кода (bootloader) для следующих классов USB:
* класс CDC, протокол совместим с AVR109 (AVRDude)
* класс DFU, протокол совместим с Atmel DFU (Atmel FLIP, программатор DFU)
* класс HID, протокол Teensy (Teensy Loader)
В пакете библиотеки LUFA имеются также следующие проекты с открытым исходным кодом:
* адаптер программатора Arduino для макетной платы Benito board
* клон программатора AVRISP-MKII, совместимого со средой программирования AVRStudio (поддерживаются протоколы ISP, PDI и TPI).
* USB хост пусковой установки ракет от Дейва Флетчера
* считывающее устройство для магнитной полосы, совместимый Stripe Snoop от Денвера Джинджерича
* проект светодиодной (LED) напоминалки, с несколькими примерами для .NET хоста
* переходник 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, похожая на USBKEY плата разработки для чипа AT90USB162
- Benito #7, простейшая плата USB
- JM-DB-U2, плата разработки на чипе ATMEGA32U2
- Micropendous, набор плат разработчика AVR USB с открытым дизайном и исходниками
- макетная плата Microsin AVR-USB162, DIY-плата разработчика на чипе AT90USB162
- Minimus USB - плата, специально разработанная для PSGroove
- Nanduino, самодельная плата на чипе AT90USB162
- Teensy и Teensy++, две другие платы разработчика AVR USB
- U2DIL/U4DIL, набор плат USB AVR с разводкой DIP
- USBFOO 2, плата разработчика, основанная на чипе AT90USB162
Хобби-проекты с использованием LUFA
Далее идут известные хобби-проекты, использующие библиотеку LUFA. Многие открыты (open source), и показывают интересные способы, с которыми библиотека LUFA может быть интегрирована в многие приложения.
- Игровой джойстик с акселерометром
- Аркадный контроллер
- Модем AVR USB, беспроводной хост модема 3G
- Bicycle POV, анимационные изображения на крутящемся колесе велосипеда
- Bus Ninja, AVR-клон популярного проекта BusPirate
- CAMTRIG, дистаннционное устройство триггера камеры
- Донгл эмулятор драйвера CD для файлов ISO
- ClockTamer, конфигурируемый тактовый генератор
- EMUCOMBOX, адаптер USB-RS422 для семплеров E-Mu Emax
- Estick JTAG, ARM JTAG отладчик
- "Fingerlicking Wingdinger", контроллер MIDI
- Транслятор последовательных выражений Garmin GPS USB в стандарт NMEA
- Генератор стандартных устройств HID (Generic HID Device Creator)
- Ghetto Drum, контроллер MIDI барабана
- Декодер посылок инфракрасного пульта (IR Remote) в нажатия клавиатуры
- Контроллер светодиодной панели (LED Panel controller)
- PSGroove, доморощенный донгл для взлома Playstation 3
- Одиночный матричный светодиодный дисплей (Single LED Matrix Display)
- Донгл защищенного хранилища Linux (Linux Secure Storage Dongle)
- MakeTV Episode Dispenser
- MidiMonster, плата шлюза USB-MIDI
- Mobo 4.3, управляемый по USB вседиапазонный (160..10 метров) трансивер HF SDR
- USB-модификация контроллера NES
- Opendous-JTAG, open source отладчик ARM JTAG
- Openkubus, аппартный open source донгл для аутентификации
- Orbee, a USB connected RGB Orb for notifications
- программируемый контроллер XBOX
- Reprap LUFA, основанный на LUFA 3D-принтер
- Ридер карт SD
- Картридж SEGA Megadrive/Genesis Development
- Stripe Snoop, ридер магнитных карт
- Teensy плейер файлов .WAV на карте SD
- Сенсорный экран (Touchscreen Input Device)
- Интерфейс USB для устройств Playstation Portable
- Userial, конвертер USB <--> Serial с поддержкой протоколов SPI, I2C и других
- XUM1541, адаптер для Commodore 64 - драйв floppy в USB
Коммерческие проекты на библиотеке LUFA
Следующий список показывает известные коммерческие продукты на библиотеке LUFA. Некоторые из них - открытый исходный код, хотя многие - "черный ящик", без предоставленного исходного кода.
- Arduino Uno, официальная плата Arduino
- ARPS Locator
- Digital Survey Instruments магнитометр и указатель
- Penguino, плата Arduino со встроенным отладчиком/программатором, основанном на LUFA
- PIR-1, интерфейс инфракрасного управления для потребительской электроники
- Множество продуктов компании Busware
- MIDIFighter, контроллер USB-MIDI
- Retrode, USB ридер катриджа игровой консоли (USB Games Console Cartridge Reader)
- USBTINY-MKII, клон программатора AVRISP-MKII
- Плата разработки на 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 - тут можно найти ссылки на закачку последнего стабильного релиза.
2. WinAVR - бесплатная среда разработки для AVR на платформе Windows.
3. AVR-USB162 - макетная плата с чипом Atmel AT90USB162.
4. Переведенная на русский язык документация Doxygen по библиотеке LUFA.
|