Библиотека LUFA (раннее название MyUSB) версия 101122
Сравнение LUFA и стека Atmel

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

  • Лицензирование: LUFA выпущен под весьма либеральной лиценизей MIT (см. Лицензия на исходный код), при этом стек Atmel накладывает некоторые ограничения на то, как и где можно использовать стек. Лицензирование LUFA должно подойти и для коммерческого, и для некоммерческого использования.
  • Демонстрационные приложения и проекты: В отличие от стека Atmel, LUFA поставляется с многими различными демками устройств USB и хоста USB и готовыми проектами, которые можно немедленно запустить и использовать. Atmel предпочитает предоставить отдельно загружаемые пакеты библиотек для каждой из демок, что требует большего количества времени и в конечном счете предоставляет меньше нужной информации конечному пользователю. LUFA содержит несколько бутлоадеров с открытым исходным кодом, который можно модифицировать по желанию пользователя, чтобы код подошел к его приложению, вместо того чтобы принуждать использовать единственный уже собранный бинарник (с закрытыми исходниками) бутлоадера DFU Atmel.
  • Централизованный код библиотеки: LUFA разработана таким образом, что позволяет использовать центральный код ядра библиотеки совместно с несколькими разными проектами. Единственное условие - необходимо каждый раз делать очистку объектных файлов (make clean) перед компилированием разных проектов библиотеки LUFA. Здесь прямой контраст по отношению к библиотеке Atmel, которая строго связана с проектом, с которым интегрирована. Использование LUFA позволяет иметь только одну копию ядра библиотеки для всех приложений, что делает обновление библиотеки для всех проектов тривиальным copy-paste процессом.
  • Чистый, понятный интерфейс API: Одно из главных достоинств LUFA в том, что в ней API сделано простым для использования. LUFA - гибкий, изменяющийся проект, который подвергся многим улучшениям API, поэтому он возможно намного удобнее в использовании и его легче понять, чем эквивалентный код стека Atmel. LUFA API является более логически завершенным, чем стек Atmel, и имеет много возможностей для ускорения разработки приложения.
  • Полная поддержка аппаратуры: LUFA поддерживает весь диапазон микроконтроллеров Atmel USB AVR (см. Поддержка устройств и аппаратуры), портирование между чипами в большинстве случаев очень простое - достаточно поменять хорошо задокументированные опции в makefile. Стек Atmel требует использования разных библиотек, основываясь на сериях USB AVR, что усложняет процедуру переноса проектов между моделями USB AVR. В дополнение LUFA имеет встроенные драйверы для всей аппаратуры макетных плат, применяющих Atmel USB AVR, благодаря чему можно быстро и просто начать работать над проектом.

Примечание переводчика: примеры LUFA можно легко запустить на множестве макетных плат, поддержка которых встроена в библиотеку LUFA изначально (см. Поддержка устройств и аппаратуры, LUFA101122\LUFA\Common\BoardTypes.h и LUFA101122\LUFA\ManPages\LUFAPoweredProjects.txt). Примеры от Atmel подходят только к конкретной фирменной макетной плате Atmel. Кроме того, примеры Atmel рассчитаны только на определенную серию AVR (напомню, что имеются микроконтроллеры USB AVR серий 2, 4, 6, 7), пакеты библиотек/прмеров Atmel для каждой серии (или набора серий) нужно загружать отдельно, и новичку в этой путанице трудно бывает разобраться.

  • Улучшенная поддержка библиотеки: Так как многие люди используют LUFA, вокруг неё построено сообщество пользователей. Вы можете быстро получить ответ на вопросы, связанные с LUFA, если либо напишете автору библиотеки (вопрос добавится в план работы автора), либо поместите вопрос в официальный список рассылки техподдержки LUFA (support mailing list).
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines