I just wanted to share a problem I ran into and a quick solution for it.
When using a generic USBASP with an ATtiny1634, communication with the device would only work for the first avrdude command issued, and would fail for every command after that. Read, write, scan, whatever. I could only use the device again if I disconnected and reconnected it. As you can imagine, it got a little annoying after a while.
In my case, it turns out that adding "-B12" to the avrdude options worked around the problem. Lower values didn't work reliably, and higher values did, but are slower.
For whatever reason, the first access to the device works fine at the default speed, but subsequent accesses don't. Running at a slower speed all the time was less of a burden than manually disconnecting and reconnecting all the time.
There might be better ways around the issue (USBASP firmware upgrade maybe?), and it might be some quirk of my own environment, but this served as a quick and easy workaround for me. If you run into a similar problem, it might be worth a shot. It might be worth trying a higher "-B" value and then adjusting downward from there until you get the right mix of speed and reliability.
The same adapter worked fine for an ATtiny84A and ATtiny40. So, I'm guessing that certain combinations of USBASP and MCU might exhibit this behaviour.
I hope this helps.
Here's the error message without this option so that it shows up in searches:
avrdude: auto set sck period (because given equals null)
avrdude: error: program enable: target doesn't answer. 1
avrdude: initialization failed, rc=-1
Double check connections and try again, or use -F to override