2010年4月25日日曜日

B041 : Tiny SD card moduleにブートローダを載せる(AVR109対応)

随分前に対応しようと思い立っていた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]ギリギリ。

0 件のコメント:

コメントを投稿