ATtiny firmware I/O met AVRdude

icon firmware download

In dit voorbeeld laten we zien hoe je de code (firmware) vanaf een ATtiny  kan halen (als backup) en op een andere ATtiny microcontroller kan zetten met behulp van AVRdude.

Hoe werkt het eigenlijk?
De C++ code die je programmeert in de Arduino IDE wordt bij het uploaden van de code naar de ATtiny (via Arduino) omgezet naar Assembler (via avr-gcc) en daarna omgezet naar een HEX bestand en dan geupload (via avrdude) naar de Attiny (via Arduino).
Meer informatie hierover is te vinden hier.

Je kan dus ook de code via AVRdude van de arduino afhalen en naar een (HEX) bestand wegschrijven.

Wat heb je nodig?

1) AVRdude
2) Arduino als ISP (hardware)

ATtiny aansluiten

Sluit de ATtiny aan volgens onderstaand schema:

Arduino ISP ATtiny13-25-45-85

Pinout:

Arduino pin:ATtiny pin:
D10Pin 1
D11Pin 5
D12Pin 6
D13Pin 7
GNDPin 4 (GND)
+5vPin 8 (+5v)

De Arduino programmeren als ISP

Voordat je de ATtiny kan programmeren moet je eerst de Arduino programmeren als ISP voor de ATtiny, het script daarvan is bijgeleverd bij de Arduino IDE software en is te vinden onder “voorbeelden” > “ArduinoISP”

Arduino IDE voorbeeld ISP

Schrijf deze code naar de Arduino, je Arduino is nu klaar voor gebruik om de ATtiny te programmeren.

Firmware van de ATtiny afhalen:

In dit voorbeeld maken we gebruik van avrdude.exe die in de volgende folder staat:

[ARDUINO IDE]\hardware\tools\avr\bin

Voordat je avrdude kan gebruiken kopieer het bestand avrdude.conf  naar bovenstaande folder, deze is te vinden in de folder:

[ARDUINO IDE]\hardware\tools\avr\etc

Voorbeeld van een ATtiny13 op COM poort 6:

avrdude.exe -v -c stk500v1 -p ATtiny13 -P COM6 -b 19200 -U flash:r:blink.hex:i

Toelichting:
-v = uitgebreide informatie.
-c = selecteer programmer.
-b = selecteer baudrate.
-P = connectiepoort COM* (Linux: ttyACM* of ttyUSB*)
-U = flash=geheugentype:[r=read/w=write/v=verifieer]:bestandsnaam:i=intel HEX formaat

Dat was het, er is nu een bestandje blink.hex aangemaakt met daarin de firmware van de chip:

Firmware naar de ATtiny schrijven:

Voorbeeld van een ATtiny13 op COM poort 6:

avrdude.exe -v -c stk500v1 -p ATtiny13 -P COM6 -b 19200 -U flash:w:blink.hex:i

Toelichting:
-v = uitgebreide informatie
-c = selecteer programmer.
-b = selecteer baudrate.
-P = connectiepoort COM* (Linux: ttyACM* of ttyUSB*)
-U = flash=geheugentype:[r=read/w=write/v=verifieer]:bestandsnaam:i=intel HEX formaat

Nu staat het “blink” programma er weer op!

Voor de ATtiny13 moet je de juiste baudrate opgeven  -b 19200 , anders werkt het niet!, hier volgt een samenvatting (voorbeelden):

Linux

Arduino Attiny (hardware version 3 / firmware version 3.3):

FIRMWARE > BESTAND:  sudo avrdude -v -c stk500v1 -p ATtiny13 -P /dev/ttyACM0 -b 19200 -U flash:r:/var/arduino/blink.hex:i
BESTAND > FIRMWARE:  sudo avrdude -v -c stk500v1 -p ATtiny13 -P /dev/ttyACM0 -b 19200 -U flash:w:/var/arduino/blink.hex

Windows

FIRMWARE > BESTAND:  avrdude.exe -v -c stk500v1 -p ATtiny13 -P COM6 -b 19200 -U flash:r:blink.hex:i
BESTAND > FIRMWARE: avrdude.exe -v -c stk500v1 -p ATtiny13 -P COM6 -b 19200 -U flash:w:blink.hex

Bestandsgrootte

ATtiny13 HEX bestandsgrootte: 860 bytes.