アマチュア無線や電子工作,バイクの話などを徒然なるままに書き散らすメモ程度のblogです.


by jq1ocr

動く

前エントリでは,CrossPack for AVR をインストールしただけだと ATmega88P に書き込めない,ということを書きました.エラーメッセージから設定ファイルに 88P 用の記述がないためと推測されましたが,どうすればよいのか調べようというところで時間切れになったわけです.

今日はこの設定ファイルをどういじればいいか探していたところ,ここに ATmega88P 用の signature ファイルがありました.なくなると困るので再掲しておきますと,こんな感じです.
#------------------------------------------------------------
# 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;
readback_p1 = 0xff;
readback_p2 = 0xff;
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;
readsize= 256;
;
memory "flash"
paged = yes;
size = 8192;
page_size = 64;
num_pages = 128;
min_write_delay = 4500;
max_write_delay = 4500;
readback_p1 = 0xff;
readback_p2 = 0xff;
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;
readsize= 256;
;

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";
;
;
これを,/usr/local/CrossPack-AVR/etc/avrdude.conf の末尾にペーストしセーブすれば,avrdude が ATmega88P に無事対応できます.しかし,なぜ最新版の CrossPack を使っているのに,デフォルトで対応してないんでしょうね?Atmel のページを見ると,88P でさえ最新ではないらしく,現行モデルは 88PA であるとのこと.実際に 88P が入手できずに後継だけになったら,またここをいじってやらないといけません.

さて,avrdude.conf を新しくしたところで Main.c に LED を点滅させるプログラムを書いて,書き込んでみます.
$ make flash
すると,カリカリっと書いているようです.
$ make flash
avrdude -c avrisp2 -P usb -p atmega88p -U flash:w:main.hex:i

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.01s

avrdude: Device signature = 0x1e930f
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 "main.hex"
avrdude: writing flash (118 bytes):

Writing | ################################################## | 100% 0.05s

avrdude: 118 bytes of flash written
avrdude: verifying flash memory against main.hex:
avrdude: load data flash data from input file main.hex:
avrdude: input file main.hex contains 118 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 0.04s

avrdude: verifying ...
avrdude: 118 bytes of flash verified

avrdude: safemode: Fuses OK

avrdude done. Thank you.

$
すると,こんな感じになりました.
d0106518_16121628.jpg

やっと動いた〜.さて環境が確保できたところで次に進みましょう.
[PR]
by jq1ocr | 2010-05-19 08:50 | マイコン・電子工作 | Comments(0)