Download V-USB

Please download the latest version of V-USB from the list below. The version number is the release date in ISO date format (YYYYMMDD). Versions older than 20080418 were distributed as part of the PowerSwitch project. Please download older versions there. V-USB was distributed under the name AVR-USB before April 2009.

V-USB's git repository is on

For release notes, see the list under the download box.

A version with Russian documentation can be downloaded here. Please use this version as documentation reference only and download our latest release for the code.

Release Notes

Release 2012-12-06

  • Define a separate type for usbMsgPtr so that projects using a tiny memory model can define it to an 8 bit type in usbconfig.h. This change also saves a couple of bytes when using a scalar 16 bit type.
  • Inserted "const" keyword for all PROGMEM declarations because new GCC requires it.
  • Fixed problem with dependence of usbportability.h on usbconfig.h. This problem occurred with IAR CC only.

Release 2012-01-09

  • Fixed bug in usbDriverSetup() which prevented descriptor sizes above 255 bytes.
  • Fixed wrong hex value for some IDs in USB-IDs-for-free.txt.

Release 2010-07-15

  • Use vector INT0_vect instead of SIG_INTERRUPT0 if defined. This makes V-USB compatible with the new "p" suffix devices (e.g. ATMega328p).
  • USB_CFG_CLOCK_KHZ setting is now required in usbconfig.h (no default anymore).
  • New option USB_CFG_DRIVER_FLASH_PAGE allows boot loaders on devices with more than 64 kB flash.
  • Other minor fixes.

Release 2009-08-22

  • Fixed a bug in the 12.8 MHz module: End Of Packet detection was made in the center between bit 0 and 1 of each byte. This is where the data lines are expected to change and the sampled data may therefore be unstable. We therefore check EOP only if bits 0 and 1 have both been read as 0 on D-.
  • Fixed a bit-stuffing problem in the 16 MHz module: If bit 6 was stuffed, the unstuffing code in the receiver routine was ca. 1 cycle too long. If multiple bytes had the unstuffing in bit 6, the error summed up until the receiver was out of sync.
  • Updated bits in Configuration Descriptor’s bmAttributes according to USB 1.1 (in particular bit 7, it is a must-be-set bit now).
  • Included option for faster CRC routine (thanks to Sławomir Fraś for the code).
  • Improved documentation about USB-IDs.

Release 2009-04-15

  • Hid-mouse example used settings from hid-data example, fixed that.
  • Renamed project to V-USB due to a trademark issue with Atmel®.

Release 2009-03-23

  • Integrated a module with CRC checks at 18 MHz by Lukas Schrittwieser.
  • Removed libusb-win32 dependency for hid-data example in It was never required and confused many people.
  • Added extern uchar usbRxToken to usbdrv.h.

Release 2008-11-26

  • Fixed assembler code in example code osctune.h. Previous version did not work when the OSCCAL register was outside the I/O addressable range.
  • Code can now be licensed under GPL version 3 or version 2, it’s your choice.

Release 2008-10-22

  • Fixed bug in libs-host/hiddata.c function usbhidGetReport().
  • Fixed bug with long transfers (above 254 bytes total).
  • AVR’s internal RC oscillator is now supported at 12.8 MHz.
  • Added hook to SOF code so that oscillator can be tuned to USB frame clock.
  • Added example code for oscillator tuning to libs-device.
  • Use control transfer recipient "device" instead of "interface" in HID examples.
  • Fixed USB Reset detection for high speed CPU clocks.
  • Added timeout to waitForJ loop. Helps preventing unexpected hangs.
  • Code size optimizations.

Release 2008-05-13

  • New configuration option USB_CFG_LONG_TRANSFERS for transfer sizes above 254 bytes.
  • Added support for 20 MHz CPU clock, the assembler module was contributed by Jeroen Benschop.
  • Better code size optimization with gcc 4.
  • Restructured usbdrv.c so that it is easier to read and understand.
  • Built-in configuration descriptor allows up to two interrupt-in endpoints now.

Release 2008-04-18

  • USB_INITIAL_DATATOKEN defaults to USBPID_DATA1 now, which means that we begin interrupts transfers with USBPID_DATA0.
  • Changed defaults in usbconfig-prototype.h (is now an example for a custom class device).
  • Added free USB VID/PID pair for MIDI class devices.
  • Restructured AVR-USB as separate package, not part of PowerSwitch anymore.

Release 2008-02-28

  • Added hooks so that application firmware can be informed about USB reset and address assignment.
  • Added optional routine usbMeasureFrameLength() which can be used to calibrate the AVR’s internal RC oscillator based on the USB frame time.

Release 2008-02-16

  • Fixed a bug in 16.5 MHz module where interrupt handler modified a register before it was pushed. This bug was introduced with code restructuring in version 2007-12-01.
  • Optimized CRC computation (saved a couple of bytes in code size).

Release 2008-02-05

  • Fixed bug in 15 and 16 MHz module which caused USB enumeration to fail on some hosts.

Release 2008-01-21

  • Renamed all include-only assembler files from *.S to *.inc so that users don’t accidentally link them.
  • Distribute leap bits more evenly in transmit loop of 16 MHz module.

Older Releases

For changes in oder versions please see the PowerSwitch project.