LUFA (2010)

LUFA (Lightweight USB Framework for AVRs, formerly known as MyUSB) is my first foray into the world of USB. It is an open-source complete USB stack for the USB-enabled Atmel AT90USBxxxx and ATMEGAxxUx AVR microcontroller series, released under the permissive MIT License (see documentation or project source for full license details). The complete line of Atmel USB AVRs and USB AVR boards are supported by the library, as are any custom user boards, via custom board hardware drivers supplied by the user.

The library is currently in a stable release, suitable for download and incorporation into user projects for both host and device modes. For information about the project progression, check out my blog.

LUFA is written specifically for the free AVR-GCC compiler, and uses several GCC-only extensions to make the library API more streamlined and robust. You can download AVR-GCC for free in a convenient windows package, from the the WinAVR website.

Included with the library source are many demonstration applications showing off the use of the library. Currently the library includes the following demonstration applications designed for the USBKEY, STK525, STK526, EVK527, XPLAIN and RZUSBSTICK boards (most in both Low Level API and Library USB Class Driver variants):

  • Audio In Device
  • Audio Out Device
  • Dual Virtual Serial Device
  • Generic HID Device
  • Generic HID Host
  • Joystick Device
  • Joystick Host
  • Keyboard Device
  • Keyboard/Mouse Device
  • Keyboard Host
  • Keyboard Host/Device Dual Mode
  • Mass Storage Device
  • Mass Storage/Keyboard Device
  • Mass Storage Host
  • MIDI Device
  • MIDI Host
  • Mouse Device
  • Mouse Host
  • Printer Host
  • RNDIS (CDC) Ethernet Device
  • RNDIS (CDC) Ethernet Host
  • Still Image Host
  • Virtual Serial Device
  • Virtual Serial/Mouse Device
  • Virtual Serial Host

LUFA also contains USB bootloaders for the following USB classes:

The following LUFA powered open source projects are also included in the LUFA package:

Downloads