Программирование AVR: работа с USB LUFA - бесплатная библиотека USB для микроконтроллеров Atmel AVR Tue, March 19 2024  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.

LUFA - бесплатная библиотека USB для микроконтроллеров Atmel AVR Печать
Добавил(а) microsin   

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 в домашних условиях.

 

Комментарии  

 
0 #3 Давид 23.08.2021 18:59
У нас есть готовая система, имеется свой USB драйвер и устройство USB. К сожалению, поставщик микросхем подводит, и решили перевести аппаратную часть на AT90USB162, не меняя драйвер на ПК. У нас зарегистрирован свой VID/PID. Наш USB класс Vendor Device Class. Мы в старом чипе используем USB Control Transfer передачу, потому что на микросхеме не было USB, мы его эмулировали через ножки GPIO (USB 1.0). Есть у Вас готовые примеры которые помогут в разработке устройства?

micosin: в библиотеке LUFA как раз и есть такие примеры для практически всех популярных классов устройств USB. К сожалению, Вы не пишете, на каких чипах устройство USB было изначально, и какие задачи выполняло. Поэтому ничего конкретного посоветовать не могу, кроме как смотреть готовые примеры устройств USB на основе чипа AT90USB162, которые есть в библиотеке LUFA и на сайте Microchip.

За основу выберите любой проект примера из LUFA, самый на ваш взгляд простой. Замените в нем структуры дескрипторов на такие же, как использовались в старом устройстве. Задайте класс устройства 0xFF (класс производителя). Поменяйте код, который обрабатывает управляющие транзакции, на свой код, чтобы он делал то же самое, что и в старом устройстве.
Цитировать
 
 
+1 #2 игорь 28.08.2013 15:42
Подскажите поддерживает ли эта библиотека скорость передачи данных full speed, и если да, то какие типы конечных точек?

microsin: Ваш вопрос поставлен некорректно. Термины low speed, full speed, high speed относятся исключительно к аппаратуре, к хабам, чипам Atmel, то есть условно говоря к "проводочкам". Типы конечных точек относятся только к протоколу USB, никак не к аппаратуре. Также и библиотека LUFA относится к программной начинке, т. е. к реализации классов USB (HID, MSD, CDC и проч.).
Цитировать
 
 
0 #1 Дмитрий 06.03.2010 02:51
Что-то складывается впечатление, что LUFA никак не совместим с AT90USB162. Практически все проекты выдают ошибку при компиляции с помощью WinAVR, если в makefile установлен именно этот чип. В основном речь идёт о недоступности каких-либо возможностей (not available on this AVR). Или я что-то не так делаю?

microsin: скорее всего что-то не так делаете. Большинство проектов, которые рассчитаны на устройства USB (мыши, клавиатуры, преобразователи USB-COM) вполне себе хорошо компилируются и даже работают.
Цитировать
 

Добавить комментарий


Защитный код
Обновить

Top of Page