ATtiny2313 USBtinyISP Notes
A short follow-up to How to Build a USBtinyISP. The original post covers the build; these are two things I end up doing …
By Prabeesh Keezhathra
- 2 minutes read - 365 wordsAtmel AVR chips power a lot of hobby and embedded projects, small, cheap, well-documented. To get code onto them you need a programmer, and commercial ISPs run $20-$40 for something that’s basically an ATtiny running open-source firmware. The USBtinyISP flips that: it’s a DIY programmer built around an ATtiny2313, costs a few dollars in parts, and works with almost any AVR target (ATtiny, ATmega, etc.).
This post walks through building one.
The reference design is well documented, Adafruit’s USBtinyISP guide has the schematic, PCB layout, and firmware image. Follow that for the build.

There’s a chicken-and-egg problem: to flash the USBtinyISP firmware onto the ATtiny2313, you need another programmer. Any working ISP (a friend’s, a commercial unit, an Arduino-as-ISP) will do, you only need it once.
Once the firmware is on the 2313, the board becomes self-sufficient.
Fuse bits control clock source, brown-out detection, and reset behavior. For the USBtinyISP running at 12 MHz from an external crystal, set:
1avrdude -c usbasp -p t2313 \
2 -U hfuse:w:0xdf:m \
3 -U lfuse:w:0xef:m
If you’re bootstrapping with a serial-port ISP instead of USB, swap -c usbasp for -c stk200.
Once built and flashed, the USBtinyISP shows up as a USB device. avrdude talks to it out of the box:
1# Read the target chip's signature to confirm the wiring
2avrdude -c usbtiny -p m8 -n
3
4# Flash an ATmega8 with a compiled hex file
5avrdude -c usbtiny -p m8 -U flash:w:firmware.hex
Most AVR toolchains, Arduino IDE, PlatformIO, plain avr-gcc + avrdude, accept usbtiny as a programmer type, so you can use the same board across workflows.
| Target family | Example chips | Notes |
|---|---|---|
| ATtiny | ATtiny13, ATtiny85, ATtiny2313 | Fully supported |
| ATmega (8-bit) | ATmega8, ATmega328P, ATmega32 | Fully supported |
| AVR32 (32-bit) | AT32UC3 series | Check target datasheet first |
Here’s the board I ended up with:
