随分前に対応しようと思い立っていたAVR109にようやく対応させた。
以前やった時にうまく書けなかったのはボードのクロック精度が原因。
ここ数日モニタを実装していて、思った以上にRC内蔵クロックの精度が悪いことが分かった。
エコーバックのテストでやたらと文字が化ける。
データシートを見返してみると確かに。
あらら。
実験用途とは言え、オシレータは載せておきたかったところではある。
デモアプリケーション起動時に100[us]で割り込みを発生させるようにしてオシロスコープで観察し、モニタコマンドでOSCCALを調整できるようにした。
この状態でエコーバックテストをすると当然問題ない。
ブートローダの問題もきっとこれだろうと気付き早速試す。
ブートローダには2[KB]を割り当てた。
ワード先頭アドレスは0x0C00でmakefileで.textのベースアドレスを指定する時には0x1800となる。
AVRISP mkIIでブートローダを書き込む。
次にやるのはブートローダ経由で書き込むアプリケーション。
現在実装しているデモアプリケーションは既にフラッシュの大部分を使い切っている。今回はブートローダの動作を確認するだけなので、機能をザクザク削って6[KB]に収めたバージョンを作った。
後はavrdudeの書き込み機器指定をavr109としてポートにシリアルポートを指定するだけ。
#!/bin/sh
AVRDUDE=avrdude
MCU=atmega8
PORT=/dev/ttyUSB0
PROGRAMMER=avr109
TARGET=sdcmod
FLAGS="-p $MCU -P $PORT -c $PROGRAMMER"
WRITE_FLASH="-U flash:w:$TARGET.hex"
$AVRDUDE $FLAGS $WRITE_FLASH $WRITE_EEPROM
これで書き込みを実行。
べリファイまでの動作を確認した。
B041の場合FATの実装が入るのでブートローダの搭載はあまり現実的ではないかもしれない。
書き込んだアプリケーションはFATの実装+エコーバックの実装だが、6[KB]ギリギリ。