Duplicating/cloning an arduino chip using an "Arduino as ISP" and avrdude
So today I had to write several ATtiny85 with a small silly program I wrote years ago to control LED lighting via PWN, but the source was nowhere to be found. I could rewrite it in an afternoon, but my arduino is kind of rusty so I decided to clone an already written ATtiny85 I had around using my Arduino as ISP bought from CT3 I used for projects that didn't need a full arduino board.
Requirements:
- An Arduino as ISP board (not necessarily the one I use)
- avrdude installed
Some of the actions you'll run might need root permission if you've not configured serial access for your user, or if you have a newer kernel that controls access to dmesg.
First, I connect my Arduino as ISP and check the port it's been assigned:
~# dmesg|tail -n 10 [ 179.219531] usb 2-3.4: reset high-speed USB device number 6 using xhci_hcd [ 4137.875481] usb 9-4: new full-speed USB device number 2 using ohci-pci [ 4138.064654] usb 9-4: New USB device found, idVendor=2a03, idProduct=0043 [ 4138.064661] usb 9-4: New USB device strings: Mfr=1, Product=2, SerialNumber=220 [ 4138.064665] usb 9-4: Product: Arduino Uno [ 4138.064669] usb 9-4: Manufacturer: Arduino Srl [ 4138.064673] usb 9-4: SerialNumber: 85439303333351E02292 [ 4138.102738] cdc_acm 9-4:1.0: ttyACM0: USB ACM device [ 4138.103861] usbcore: registered new interface driver cdc_acm [ 4138.103865] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters
So, ttyACM0, fine!
Then, we put the chip we wanna read on our ISP and read it with avrdude:
~# avrdude -p t85 -P /dev/ttyACM0 -c avrisp -b 19200 -U flash:r:flash.bin:r avrdude: AVR device initialized and ready to accept instructions Reading | ################################################## | 100% 0.02s avrdude: Device signature = 0x1e930b (probably t85) avrdude: reading flash memory: Reading | ################################################## | 100% 5.89s avrdude: writing output file "flash.bin" avrdude: safemode: Fuses OK (E:FF, H:DF, L:62) avrdude done. Thank you.
Sounds about right! We've read the chip and written its contents to flash.bin. Let's swap the chip for the new empty one and write it:
~# avrdude -p t85 -P /dev/ttyACM0 -c avrisp -b 19200 -U flash:w:flash.bin avrdude: AVR device initialized and ready to accept instructions Reading | ################################################## | 100% 0.02s avrdude: Device signature = 0x1e930b (probably t85) avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed To disable this feature, specify the -D option. avrdude: erasing chip avrdude: reading input file "flash.bin" avrdude: input file flash.bin auto detected as raw binary avrdude: writing flash (1280 bytes): Writing | ################################################## | 100% 1.83s avrdude: 1280 bytes of flash written avrdude: verifying flash memory against flash.bin: avrdude: load data flash data from input file flash.bin: avrdude: input file flash.bin auto detected as raw binary avrdude: input file flash.bin contains 1280 bytes avrdude: reading on-chip flash data: Reading | ################################################## | 100% 0.93s avrdude: verifying ... avrdude: 1280 bytes of flash verified avrdude: safemode: Fuses OK (E:FF, H:DF, L:62) avrdude done. Thank you.
Great! You're good to go! :D