Arduinoのbootloaderについて深追い

bootloader領域のサイズはfuseで指定できる。
データシート( http://reef.path.ne.jp/~hero/hero.htm )で確認してみると、
 extended_fuses=0x00
 BOOTSZ1/0=0,0 => 1024word = 2KB
 16KB-2KB = 14KB => 1024*14=14336(0x3800)
 high_fuses=0xca
 BOOTSZ1/0=0,1 =>  512word = 1KB
  8KB-1KB =  7KB => 1024* 7= 7168(0x1c00)

アプリの最大サイズ14336,7168とatmega/Makefile,atmega8/Makefileの--section-start=.text=0x3800/0x1c00に対応している。

http://www.geocities.jp/arduino_diecimila/
http://bird.dip.jp/mt/archives/2008/04/19/1649.html
などではupload.maximum_size=7168としているが、
mega88でもefuse=00でbootloader=2KBの設定なので
最大サイズは8K-2K=6K => 6144(0x1800) なのではないか?
6144byte以上のスケッチを書き込むと壊れる??


% avr-size atmega88/ATmegaBOOT_88_ng.hex
  text    data     bss     dec     hex filename
     0    1642       0    1642     66a atmega88/ATmegaBOOT_88_ng.hex
% avr-size lilypad88/LilyPadBOOT_88.hex                
  text    data     bss     dec     hex filename
     0    1960       0    1960     7a8 lilypad88/LilyPadBOOT_88.hex
% avr-size atmega/ATmegaBOOT_168_diecimila.hex
  text    data     bss     dec     hex filename
     0    1958       0    1958     7a6 atmega/ATmegaBOOT_168_diecimila.hex
% avr-size atmega/ATmegaBOOT_168_ng.hex
  text    data     bss     dec     hex filename
     0    1702       0    1702     6a6 atmega/ATmegaBOOT_168_ng.hex
% avr-size atmega/ATmegaBOOT_168_atmega328.hex
  text    data     bss     dec     hex filename
     0    1950       0    1950     79e atmega/ATmegaBOOT_168_atmega328.hex
% avr-size atmega/ATmegaBOOT_168_pro_8MHz.hex
  text    data     bss     dec     hex filename
     0    1968       0    1968     7b0 atmega/ATmegaBOOT_168_pro_8MHz.hex
% avr-size atmega8/ATmegaBOOT.hex
  text    data     bss     dec     hex filename
     0    1002       0    1002     3ea atmega8/ATmegaBOOT.hex

mega8のbootloaderは1KB以内なので、
mega88等mega8のbootloaderを改造したほうがいいかもしれない。
そうしたら7168byteまで使える。
atmegaとatmega8(とlilypadとbt)はなにが違うのだろうか。特別な機能がある?

というか、mega88でarduinoクローンを作るなんて無駄なことはやめて
bootloader無しで直接書き込みをする手順を確立したほうが役に立つのではないか。
mega88で8192byteまで使えるようになる。mega168で16384byte、mega328で32768まで。

そもそもarduinoにbootloaderがあるのはなぜか?

AVRライタなしでアプリケーションを書くため。

AVRライタを持っているならばブートローダ不要。

「完成版をmega88で安くすませる」という目的ならばbitbangでDuemilanoveをAVRライタ化して
スケッチ本体をbootloader無しで焼いた方がよいに違いない。

赤外線シリアル通信をするbootloaderを作ったらバカバカしいかもしれない。
単方向通信で光通信でベリファイなしの書き込みとか。
リセットをかけられないか。

そういえば、リセットはどうやっているのだろう。
シリアルの特殊な信号線をつかってるのかな。

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2009年04月21日 22:27
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。