How to Update the Firmware on a USBasp V2.0

REVISED 2018-07-16

If you buy a cheap USBasp V2.0 ICSP programmer on eBay, chances are, avrdude will give you the following warning message:

avrdude: warning: cannot set sck period. please check for usbasp firmware update.

While it’s just a benign warning message which can be ignored with no ill effects, it’s still a constant irritant. Furthermore, it also prevents my speed up technique from working, because it relies on changing the sck period. To get rid of the warning, you must update the firmware to the latest version: usbasp.2011-05-28.tar.gz

If you have another ICSP programmer already, such as a USBtinyISP, programming in the new firmware is quite simple. If you have more than one USBasp, you can even use them to program each other. Here are the steps:

0. Verify that you have a USBasp V2.0, and that it has a 12MHz crystal and an ATMEGA8 or ATMEGA8A MCU onboard. DO NOT CONNECT IT TO THE USB PORT OF YOUR COMPUTER.

1. Short the JP2 (self-programming) jumper.

2. Connect the USBasp V2.0 to the USBtinyISP (or other ISP) using a 10-pin ribbon cable


3. Flash in the new firmware: avrdude -c usbtiny -p atmega8 -U flash:w:usbasp.atmega8.2011-05-28.hex

4. Reprogram the USBasp’s fuses: avrdude -c usbtiny -p atmega8 -u -U hfuse:w:0xc9:m -U lfuse:w:0xef:m

If you’re not using a USBtinyISP, substitute the proper parameter after -c (e.g. -c usbasp).

Note that the usbasp.2011-05-28.tar.gz archive doesn’t contain a compiled .hex file, so you have to re-compile it using WinAVR. Instead, you can just use my hex file, which I compiled directly from the sources:

If you don’t have another ICSP programmer, you can use an Arduino, following these instructions: Updating firmware on USBASP bought from eBay. However, you may also have to also set the fuses according to Step 3 above. My PC wouldn’t recognize the reprogrammed USBasp until I set the fuses.

24 thoughts on “How to Update the Firmware on a USBasp V2.0”

  1. cannot set sck period update firmware,,,,

    i am using usbasp programmer, interfacing with atmega8 microcontroller,
    i want to burn program into atmega8 controller, using usbasp programmer , the same error i am getting ,,

    what can i do? how to solve this error?

    i need command line based setting. if any hardware setting are their it’s ok, please please…………i am new to this controller & linux…….how to over come this error sir…?

    1. You can just ignore the error. It’s just a warning. Or, if you don’t want to see it anymore, follow my article to update its firmware.

  2. Hi,

    I made my own USBasp and set fuses and programmed it just like you did, and now the red LED is glowing, but is not recognized by windows (device descriptor request failed). Do you maybe know what could be the issue?

  3. I used your info as a reference although I re-flashed mine using an Arduino. The fuse bits were relevant. Thanks for sharing!

    1. It sounds like there was an error when you flashed the firmware. It should work. Did you see any errors from avrdude when you flashed it?

  4. Sam Would you mind posting an .eep file so I can use avrdudess to set the fuses. I have been able to flash my Chinese USBASP using another like unit which uses an ATMEGA8L. I am now unable to get that one to be recognized by my WIN7 computer, suspect the fuses.


    1. Hi Alan, sorry, I didn’t see this until just now, but I see that you figured out how to set the fuses yourself.

  5. Hi, i do like u wrote. Work for me. After flashing, only 1 code can be written on chip (atmega 32 through arduino sw), if i want write another, i obtain error:
    avrdude: error: programm enable: target doesn’t answer. 1
    avrdude: initialization failed, rc=-1
    Double check connections and try again, or use -F to override
    this check.

    After unplug and plug usbasp back – work for 1 cycle again.
    Any idea?

      1. Strange, I’ve never had that problem, and I have 3 USBasps. Lately, though, I have been finding different variations of the hardware

  6. side note: some usbasp clones prevents firmware reads and setting fuses, therefore you need to do a chip erase first. just upgraded mine. thank you 🙂

  7. Great post. I updated my new USBASP using your .hex file and worked fine. I also use Khazama AVR GUI. It helps understand which fuse is what! My new chinese USBASP has only one unamed jumper under the ATmega8, acessible only by solder side. I assumed as JP2 and it worked. By the way, I installed a male jumper there for future updates! Thank you for your post.

  8. Ok I have two of those low cost USBasp burners. Now what I understand how to connect them .. just use the 10 pin ribbon cable and be sure to set the jp2 on the one to be programmed. But what software do I used to program it with? The Arduino IDE?? Thanks Great day to you.

  9. How do you do this? Verify that you have a USBasp V2.0, and that it has a 12MHz crystal and an ATMEGA8 or ATMEGA8A MCU onboard. The chip is real small. It says Atmel and there is a 12.00 MHZ clock ship how do you know if it is V2.0? Thanks again

Leave a Reply