I'm heavily experimenting with ATtiny AVR's and I can't afford to buy a new AVR for every experiment, so I thought up a backup script. The idea is that I can bring my AVR back to factory defaults after I've used them. Especially fuses and calibration are tricky here I want to be able to recover, as they may change 'boot' parameters, clock speed and power efficiency.
The idea is to backup my AVR with the following script:
#!/bin/bash baud=115200 avr=attiny45 dst=$avr.`date +"%Y%m%d_%H%M%S"` port=/dev/ttyUSB0 # calibration One or more bytes of RC oscillator calibration data. # eeprom The EEPROM of the device. # efuse The extended fuse byte. # flash The flash ROM of the device. # fuse The fuse byte in devices that have only a single fuse byte. # hfuse The high fuse byte. # lfuse The low fuse byte. # lock The lock byte. # signature The three device signature bytes (device ID). # fuseN The fuse bytes of ATxmega devices, N is an integer number for each fuse supported by the device. # application The application flash area of ATxmega devices. # apptable The application table flash area of ATxmega devices. # boot The boot flash area of ATxmega devices. # prodsig The production signature (calibration) area of ATxmega devices. # usersig The user signature area of ATxmega devices. for memory in calibration eeprom efuse flash fuse hfuse lfuse lock signature application apptable boot prodsig usersig; do avrdude -p $avr -c stk500v1 -P $port -b $baud -U $memory:r:/dev/stdout:i > ./$dst.$memory.hex || rm ./$dst.$memory.hex done
The only exeption is the fuseN memory, but I don't use ATxmega and I just didn't care about that.
EDIT1: I use an ATmega168 powered Arduino Duemanilove with ArduinoISP sketch, which emulates stk500v1, to program my devices. High voltage programming is not supported.
EDIT2: Managed to succesfully unbrick my ATtiny45 with my Arduino too using the information at http://www.rickety.us/2010/03/arduino-avr-high-voltage-serial-programmer/
Now the question is as follows: The backup script seems to work as designed, but before I 'brick' my AVR, will programming the resulting files bring the AVR back to factory defaults?