2007年03月27日

AVR910プロトコルとデバイスコード

AVR910では、t コマンドでサポートされているデバイスの一覧を返し、T コマンドでデバイスを選択するという仕様になっています。そして、定義されているデバイスは、AT90S2313とか ATtiny26 とか ATmega8 ぐらいまでで、新しいデバイスは定義されていません。

このデバイス一覧にないものはサポートできないと思われるかも知れません。が、新しいデバイスに対応できる仕組みは用意されていて、いくつかの書き込みソフトはそれに対応しています。

仕組みその1 -- T コマンドで 0 を指定する。
uisp の場合 -dpart=auto と指定することでこの動作になります。
avrdude の場合 -F を指定することで warning は出ますがこの動作になります。


仕組みその2 -- . コマンド(ニューユニバーサルコマンド)
4バイトのデータを送り、最後の1バイトを読み込みリターンするコマンドで、すべてのISPコマンドを実行できる拡張です。avrdude や uisp では (AVR910で定義されていない)上位ヒューズバイトの書き込みなどはこのコマンドを使って実装しています。


それなら デバイスの一覧なんて必要ないんじゃないか?と思われるかも知れません。それはほぼ正しいです。

デバイスコードの役割は、2つあります。

役割1:シリアルプログラミングモードに入る方法の指定
AT90S1200だけ 特別扱いしているようです。他のはシリアルプログラミング許可命令で 第3バイト目が 0x53 かどうか確認していますが、AT90S1200 は確認なしです。

役割2:遅延の時間指定
ページモードを持っていないデバイスでは、1バイト書き込む毎に遅延をいれていたりします。


これらの処理は、はっきり言って新しいデバイスでは関係なさそうです。0 が指定できなくて、なにか指定しなければならない場合 0x20 -- AT90S2313でも指定しておけば良いのではないかと思います。(というより、AVR910そのものを使う場合は、0 より 0x20 が良いかも知れません。)。ライタソフトは、普通 デバイスコードより、シグネチャーで制御すると思います。( 少なくとも avrdude, uisp はそうなっています。)

USB910はどうしているか?

USB910では、新しいデバイス専用です。AT90S1200 をはじめとして、ページモードを持たないもの(AT90S8515、AT90S8535、AT90S4433 ) は、はなから切捨てています。デバイスリストは、互換性の点から 0x20 のみ返しています。T コマンドでなにがきても動作には関係ありません。
ページ書き込みの時間は 一律 10ms 取っています。これ以上の時間が必要なデバイスはわずかなので対応していません。もし ATmega163 とか該当するものを使いたい場合ソースコードの twd_xx を修正してビルドしなおす必要があります。

というわけで、AVR910は新しいデバイスに対応できないというのは、誤解だと思います。(といってもあまりに古いのはダメです。すくなくとも . コマンドに対応している必要があります。)
posted by すz at 05:32| Comment(0) | TrackBack(0) | USB910B
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/30760382
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック