# ubuntuでavrdudeを使う

そこでWinでもLinuxでも使えるavrdudeの使い方をメモしておきます(よく忘れるので…)

\$avrdude -c avrispmkII -P usb -p t2313 -U flash:w:main.hex とすれば出来ます。

avrdudeのオプション

• -c:ライターの名前を指定します。(例: -c avrispmkII)
• -P:使うポートを指定します。(例: -P usb)
• -p:デバイス名を指定します。略しても構いません。mega88ならm88とか(例:-p t2313)
但し、標準ではmega88p、mega328pを扱えないみたいなので、
/etc/avrdude.confに追記にあるコードを追加しておいてください。(引用元http://www15.atwiki.jp/arduino/pages/39.html
• -U:処理する対象を指定します。

• U <メモリ名>:<コマンド>:<ファイル名>:という形をとります。

メモリ名にはflash, eeprom, hfuse, lfuse, efuseのいずれかが入り、
コマンドにはr(読み込み)、w(書き込み)、v(ベリファイ、検証)を入れます。
例:flashにmain.hexを書き込む場合：-U flash:w:main.hex

その他にもオプションはありますが、使うのはこれだけなので説明しません。

linuxでusbを使う時はroot権限が必要みたいなので、sudoを使ってください。
sudoなんて面倒だという人は、http://stackoverflow.com/questions/5412727/avrisp-mkii-doesnt-work-with-avrdude-in-linuxを見てください。

# ATmega88P
part
id               = "m88p";
desc             = "ATMEGA88P";
has_debugwire = yes;
flash_instr   = 0xB6, 0x01, 0x11;
eeprom_instr  = 0xBD, 0xF2, 0xBD, 0xE1, 0xBB, 0xCF, 0xB4, 0x00,
0xBE, 0x01, 0xB6, 0x01, 0xBC, 0x00, 0xBB, 0xBF,
0x99, 0xF9, 0xBB, 0xAF;
stk500_devcode   = 0x73;
#    avr910_devcode   = 0x;
signature        = 0x1e 0x93 0x0f;
pagel            = 0xd7;
bs2              = 0xc2;
chip_erase_delay = 9000;
pgm_enable       = "1 0 1 0  1 1 0 0    0 1 0 1  0 0 1 1",
"0 0 0 0  0 0 0 0    0 0 0 0  0 0 0 0";

chip_erase       = "1 0 1 0  1 1 0 0    1 0 0 0  0 0 0 0",
"0 0 0 0  0 0 0 0    0 0 0 0  0 0 0 0";

timeout           = 200;
stabdelay         = 100;
cmdexedelay               = 25;
synchloops                = 32;
bytedelay         = 0;
pollindex         = 3;
pollvalue         = 0x53;
predelay          = 1;
postdelay         = 1;
pollmethod                = 1;

pp_controlstack     =
0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F,
0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F,
0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B,
0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00;
hventerstabdelay    = 100;
progmodedelay       = 0;
latchcycles         = 5;
togglevtg           = 1;
poweroffdelay       = 15;
resetdelayms        = 1;
resetdelayus        = 0;
hvleavestabdelay    = 15;
resetdelay          = 15;
chiperasepulsewidth = 0;
chiperasepolltimeout = 10;
programfusepulsewidth = 0;
programfusepolltimeout = 5;
programlockpulsewidth = 0;
programlockpolltimeout = 5;

memory "eeprom"
paged           = no;
page_size       = 4;
size            = 512;
min_write_delay = 3600;
max_write_delay = 3600;
read            = "  1   0   1   0      0   0   0   0",
"  0   0   0   0      0   0  a9  a8",
" a7  a6  a5  a4     a3  a2  a1  a0",
"  o   o   o   o      o   o   o   o";

write           = "  1   1   0   0      0   0   0   0",
"  0   0   0   0      0   0  a9  a8",
" a7  a6  a5  a4     a3  a2  a1  a0",
"  i   i   i   i      i   i   i   i";

loadpage_lo     = "  1   1   0   0      0   0   0   1",
"  0   0   0   0      0   0   0   0",
"  0   0   0   0      0   0  a1  a0",
"  i   i   i   i      i   i   i   i";

writepage       = "  1   1   0   0      0   0   1   0",
"  0   0   0   0      0   0  a9  a8",
" a7  a6  a5  a4     a3  a2   0   0",
"  0   0   0   0      0   0   0   0";

mode            = 0x41;
delay           = 5;
blocksize       = 4;
;
memory "flash"
paged           = yes;
size            = 8192;
page_size       = 64;
num_pages       = 128;
min_write_delay = 4500;
max_write_delay = 4500;
read_lo         = "  0   0   1   0    0   0   0   0",
"  0   0   0   0  a11 a10  a9  a8",
" a7  a6  a5  a4   a3  a2  a1  a0",
"  o   o   o   o    o   o   o   o";

read_hi         = "  0   0   1   0    1   0   0   0",
"  0   0   0   0  a11 a10  a9  a8",
" a7  a6  a5  a4   a3  a2  a1  a0",
"  o   o   o   o    o   o   o   o";

loadpage_lo     = "  0   1   0   0      0   0   0   0",
"  0   0   0   0      0   0   0   0",
"  x   x   x  a4     a3  a2  a1  a0",
"  i   i   i   i      i   i   i   i";

loadpage_hi     = "  0   1   0   0      1   0   0   0",
"  0   0   0   0      0   0   0   0",
"  x   x   x  a4     a3  a2  a1  a0",
"  i   i   i   i      i   i   i   i";

writepage       = "  0   1   0   0      1   1   0   0",
"  0   0   0   0    a11 a10  a9  a8",
" a7  a6  a5   x      x   x   x   x",
"  0   0   0   0      0   0   0   0";

mode            = 0x41;
delay           = 6;
blocksize       = 64;
;

memory "lfuse"
size            = 1;
min_write_delay = 4500;
max_write_delay = 4500;
read            = "0 1 0 1  0 0 0 0   0 0 0 0  0 0 0 0",
"0 0 0 0  0 0 0 0   o o o o  o o o o";

write           = "1 0 1 0  1 1 0 0   1 0 1 0  0 0 0 0",
"0 0 0 0  0 0 0 0   i i i i  i i i i";
;

memory "hfuse"
size            = 1;
min_write_delay = 4500;
max_write_delay = 4500;
read            = "0 1 0 1  1 0 0 0   0 0 0 0  1 0 0 0",
"0 0 0 0  0 0 0 0   o o o o  o o o o";

write           = "1 0 1 0  1 1 0 0   1 0 1 0  1 0 0 0",
"0 0 0 0  0 0 0 0   i i i i  i i i i";
;

memory "efuse"
size            = 1;
min_write_delay = 4500;
max_write_delay = 4500;
read            = "0 1 0 1  0 0 0 0   0 0 0 0  1 0 0 0",
"0 0 0 0  0 0 0 0   x x x x  x x x o";

write           = "1 0 1 0  1 1 0 0   1 0 1 0  0 1 0 0",
"0 0 0 0  0 0 0 0   1 1 1 1  1 1 1 i";
;

memory "lock"
size            = 1;
min_write_delay = 4500;
max_write_delay = 4500;
read            = "0 1 0 1  1 0 0 0   0 0 0 0  0 0 0 0",
"0 0 0 0  0 0 0 0   x x o o  o o o o";

write           = "1 0 1 0  1 1 0 0   1 1 1 0  0 0 0 0",
"0 0 0 0  0 0 0 0   1 1 i i  i i i i";
;

memory "calibration"
size            = 1;
read            = "0  0  1  1   1  0  0  0   0  0  0  0   0  0  0  0",
"0  0  0  0   0  0  0  0   o  o  o  o   o  o  o  o";
;

memory "signature"
size            = 3;
read            = "0  0  1  1   0  0  0  0   0  0  0  0   0  0  0  0",
"0  0  0  0   0  0 a1 a0   o  o  o  o   o  o  o  o";
;
;

#&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;
# ATmega328P
#&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;&#45;

part
id              = "m328p";
desc            = "ATMEGA328P";
has_debugwire = yes;
flash_instr   = 0xB6, 0x01, 0x11;
eeprom_instr  = 0xBD, 0xF2, 0xBD, 0xE1, 0xBB, 0xCF, 0xB4, 0x00,
0xBE, 0x01, 0xB6, 0x01, 0xBC, 0x00, 0xBB, 0xBF,
0x99, 0xF9, 0xBB, 0xAF;
stk500_devcode  = 0x86;
# avr910_devcode = 0x;
signature       = 0x1e 0x95 0x0F;
pagel           = 0xd7;
bs2             = 0xc2;
chip_erase_delay = 9000;
pgm_enable       = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1",
"x x x x x x x x x x x x x x x x";

chip_erase       = "1 0 1 0 1 1 0 0 1 0 0 x x x x x",
"x x x x x x x x x x x x x x x x";

timeout         = 200;
stabdelay       = 100;
cmdexedelay     = 25;
synchloops      = 32;
bytedelay       = 0;
pollindex       = 3;
pollvalue       = 0x53;
predelay        = 1;
postdelay       = 1;
pollmethod      = 1;

pp_controlstack     =
0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F,
0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F,
0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B,
0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00;
hventerstabdelay    = 100;
progmodedelay       = 0;
latchcycles         = 5;
togglevtg           = 1;
poweroffdelay       = 15;
resetdelayms        = 1;
resetdelayus        = 0;
hvleavestabdelay    = 15;
resetdelay          = 15;
chiperasepulsewidth = 0;
chiperasepolltimeout = 10;
programfusepulsewidth = 0;
programfusepolltimeout = 5;
programlockpulsewidth = 0;
programlockpolltimeout = 5;

memory "eeprom"
paged           = no;
page_size       = 4;
size            = 1024;
min_write_delay = 3600;
max_write_delay = 3600;
read            = " 1 0 1 0 0 0 0 0",
" 0 0 0 x x x a9 a8",
" a7 a6 a5 a4 a3 a2 a1 a0",
" o o o o o o o o";

write           = " 1 1 0 0 0 0 0 0",
" 0 0 0 x x x a9 a8",
" a7 a6 a5 a4 a3 a2 a1 a0",
" i i i i i i i i";

loadpage_lo     = "  1   1   0   0      0   0   0   1",
"  0   0   0   0      0   0   0   0",
"  0   0   0   0      0   0  a1  a0",
"  i   i   i   i      i   i   i   i";

writepage       = "  1   1   0   0      0   0   1   0",
"  0   0   x   x      x   x   a9  a8",
" a7  a6  a5  a4     a3  a2   0   0",
"  x   x   x   x      x   x   x   x";

mode            = 0x41;
delay           = 5;
blocksize       = 4;
;

memory "flash"
paged           = yes;
size            = 32768;
page_size       = 128;
num_pages       = 256;
min_write_delay = 4500;
max_write_delay = 4500;
read_lo         = " 0 0 1 0 0 0 0 0",
" 0 0 a13 a12 a11 a10 a9 a8",
" a7 a6 a5 a4 a3 a2 a1 a0",
" o o o o o o o o";

read_hi          = " 0 0 1 0 1 0 0 0",
" 0 0 a13 a12 a11 a10 a9 a8",
" a7 a6 a5 a4 a3 a2 a1 a0",
" o o o o o o o o";

loadpage_lo     = " 0 1 0 0 0 0 0 0",
" 0 0 0 x x x x x",
" x x a5 a4 a3 a2 a1 a0",
" i i i i i i i i";

loadpage_hi     = " 0 1 0 0 1 0 0 0",
" 0 0 0 x x x x x",
" x x a5 a4 a3 a2 a1 a0",
" i i i i i i i i";

writepage       = " 0 1 0 0 1 1 0 0",
" 0 0 a13 a12 a11 a10 a9 a8",
" a7 a6 x x x x x x",
" x x x x x x x x";

mode        = 0x41;
delay       = 6;
blocksize   = 128;

;

memory "lfuse"
size            = 1;
min_write_delay = 4500;
max_write_delay = 4500;
read            = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0",
"x x x x x x x x o o o o o o o o";

write           = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0",
"x x x x x x x x i i i i i i i i";
;

memory "hfuse"
size            = 1;
min_write_delay = 4500;
max_write_delay = 4500;
read            = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0",
"x x x x x x x x o o o o o o o o";

write           = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0",
"x x x x x x x x i i i i i i i i";
;

memory "efuse"
size            = 1;
min_write_delay = 4500;
max_write_delay = 4500;
read            = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0",
"x x x x x x x x x x x x x o o o";

write           = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0",
"x x x x x x x x x x x x x i i i";
;

memory "lock"
size            = 1;
min_write_delay = 4500;
max_write_delay = 4500;
read            = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
"x x x x x x x x x x o o o o o o";

write           = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
"x x x x x x x x 1 1 i i i i i i";
;

memory "calibration"
size            = 1;
read            = "0 0 1 1 1 0 0 0 0 0 0 x x x x x",
"0 0 0 0 0 0 0 0 o o o o o o o o";
;

memory "signature"
size            = 3;
read            = "0 0 1 1 0 0 0 0 0 0 0 x x x x x",
"x x x x x x a1 a0 o o o o o o o o";
;
;