Entry

【続】 FreeBSD で動く AVR ライタ

2004年01月28日

今度のはシリアルポートを使ったもので,Atmel の標準ライタ AVR910 です。ライタばっか作ってても仕方ないんですけどね。

この前紹介したパラレルポート接続のライタは,電源を用意する必要がなくて,とても便利でした。しかし,現実問題として,うちのパラレルポートはプリンタが占領しているので,焼く度にコネクタを付け替えなくちゃいけないんです。このライタは ISP 専用で,ターゲットの回路から電源をいただいてくる仕組みです。

ところで,このライタは,制御に AT90S1200(無印)を使います。つまり AT90S1200 が焼ける環境がないと作れないというわけです。結局,パラレルライタを作っておいて損はないってことですね。

パラレルポートのライタを作るのが面倒なときは,ChaN さんが紹介されている直結型の100円ライタで焼くのが手軽かもしれません。もっとも,これは FreeBSD のプログラムで動作確認していません。基本的な仕組みはパラレルライタと変わらない(信号線をそのまま引き出している)ので,avrdude.conf をいぢれば avrdude で動きそうな感じもします。

回路図

回路図は,Atmel のアプリケーションノート「AVR910: In-System Programming」 [PDF] や,「Atmel Low Cost Programmator」 [MAPP WEB PAGE] に詳しく紹介されています。

ただ,ここにある回路図には,日本で販売されていない部品もあるので,適宜適当なものに変える必要があります。(そのうち回路図載せます) そんなもんで,うちで動いている AVR910 の回路図を描いてみました。変更点は,トランジスタとダイオードをそれぞれ,2SC1815,2SA1015,1S2076A にしたところと,クリスタルをセラロックにしたところです。ダイオードは,小信号用のものならなんでもいいと思います。普通は,1S1588 でしょうか。例によって,パスコン(C1)は,MCU の近くに付けましょう。

avr910.png

制作

とりあえず,回路図を見ながらシコシコ作っていきましょう。ライタの場合,使い勝手も重要な要素になります。部品同士の組み合わせを工夫したり,ケーブルを脱着可能にするなどすると便利に使えると思います。AT90S1200 は後でファームウェアを焼くので,ISP する予定が無い限り IC ソケットを使う方が便利です。

回路図はそこそこでかいけど,作ってみるとかわいいのができました(作ってから基板を切るので,最終的な大きさが分からないのです)。

AVR910の図

ちなみに,当初手元に 1uF の電解コンデンサが無かったので,代わりに 0.1uF の積層セラミックコンデンサを付けていましたが,何事もなく動いていました。このコンデンサはトランジスタのスイッチング用なので容量にはうるさくないようです。

ファームウェアのあれこれ

次に,取り付ける AT90S1200 のファームウェアを書き込む必要があります。AVR910 は,UART のない AT90S1200 に,ファームウェア上で UART を実装しています。なにげに高度なプログラムなんですね。

ソースをもらってくる

ファームウェアは,さっき紹介した「Atmel Low Cost Programmator」 のページでも配布しているけれど,最新版ではないので,Atmel のホームページからもらってくるのが良いと思います。現在の最新版は,version 2.2 でした。

  • AVR910.ASM
    [http://www.atmel.com/dyn/resources/prod_documents/AVR910.ASM]

えーと。これは,アセンブラのソースなので,このまま焼いても何も起きません(というか焼けない)。自前で機械語にアセンブルする必要があります。面倒臭いですね。そんなあなたのために,一応,アセンブル済みの HEX ファイルを用意しました。

  • at90isp22.hex
    [http://qune.cside.com/archives/files/at90isp22.hex]

なお,Atmel のライブラリでは,2.2 が最新だったけど,「AVRStart」では,2.3 が最新版ということで紹介されています。オリジナルの所在が分からなかったので,正式には紹介できませんが,もちろんちゃんと動作しました。ありがたいことに HEX ファイルも配布してくださっています。

アセンブル

一応 HEX ファイルを置いといたけど,どっちみちこれからアセンブラを扱うので,FreeBSD でアセンブルする方法も紹介しておきます。

FreeBSD で動くアセンブラは,

  • AVR binutils の avr-as
  • avra

あたりがあります。Atmel 純正の AVRStudio は Windows 向けなので使えません……。

ここでは,avra を使うことにします。avra は Atmel 純正と互換性のあるアセンブラです。avra 自身も ANSI C で書かれていることから可搬性が高く,対応している OS は FreeBSD をはじめとして Windows や Linux,Amiga と幅広く動きます。他方,avr-as は,ディレクティヴの方言が gcc 寄りで,ソースを少なからず修正しないといけません。巷に出回っているサンプルソースも,大半が AVRStudio でアセンブルすることを予定していることから,自分で一から作るようなことがない限り,avra を使う方が便利だと思います。

avra は Ports が無いので,ソースからインストールします。sourceforge からもらってきてください。リポジトリ上には 0.9 まで出ていたけど,make が通ったのは 0.7 でした。

もらってきたものを展開したらソースのあるディレクトリに移動して,いつものようにコンパイル・インストールです。Makefile には Linux 向けのものを使います。

% mv Makefile.linux Makefile
# gmake install clean

使い方はすこぶる簡単で,

% avra filename.asm

とすれば,HEX ファイルやらオブジェクトファイルやらが生成されます。AVR910.ASM をアセンブルするなら,

% avra AVR910.ASM

ですね。

おっと!ここでひとつ問題があります。ソースでインクルードしている"1200def.inc"なるファイルが無いんでした。I/O レジスタの名前などなどを定義しているファイルです。このファイルはあちこちに落ちている(というか,Atmel の開発セットに含まれていると思う)ので,拾ってきましょう。ここでは,PonyProg で有名な「Lanconelli Open Systems」からいただいてきました。

もらってきたら,ファイル名を "1200def.inc" にリネームしておきます。改行コードが違うようなので,

% nkf -d 1200def.inc.txt > 1200def.inc

みたいにするといいかもしれません(nkf 入ってますよね?)。できたらアセンブルです。

焼く

さてさて……やっとこさ,焼くところまできました。例のパラレルライタで焼くには,AVRDUDE というプログラムを使います。これはその昔,AVRPROG と呼ばれていたものです。Ports があるので,ここからインストールしてください。

インストールしたら,パラレルライタに AT90S1200 を乗せてポートに挿しましょう。おもむろに,

% avrdude -p 1200 -c bsd -e -U flash:w:at90isp22.hex 

と叩けば,LED がピカピカ光り始めて書き込みが始まります(AVRPROG の時にあった -i や -o といったオプションは,非推奨になりました)。うまく焼けたら,作っておいた基板に取り付けてできあがりです。

動かしてみる

できあがったところで早速テストといきたいとこだけど(導通・絶縁チェックはちゃんとしてね),AVR910 は ISP 専用のライタなので単品ではテストできません。簡単な LED 点灯回路に ISP コネクタをつけて確かめるといいと思います。焼いている様子は,こんな感じです……。左から順に,電源,ターゲット回路,AVR910です。AVR910 は,シリアルポートにつながってます。

AVR に書き込むの図

このライタを動かすには,uisp というプログラムを使います。avrdude にも AVR910 のエントリがあったけど,うまく焼けませんでした。どうやら,sio? のボーレートをうまく調整できていないようです。avrdude は FreeBSD 上で開発してるから,できないはずはないんですけどね。例によって uisp もPorts でインストールできます。

ターゲット回路は ISP のヘッダピンをつければどんなものでもいいです。例えば,"led.hex" を焼く場合,上のようにつないで以下のように叩けばを焼くことができます。シリアルポートのデバイスファイル名は,適宜変えてください。それと,ユーザを "dialer" グループに所属させたりして,シリアルポート(ここでは /dev/cuaa0)にアクセスできるようにしておくことも,忘れないでください。

% uisp -dprog=avr910 -dserial=/dev/cuaa0 -dpart=auto --erase --upload  if=led.hex

うちでは,FreeBSD Press No.9 に載っていた「ナイトライダー回路」(勝手に命名)で実験してみました。

ナイトライダー回路を動かすの図

光ってます。

Trackback
Trackback URL:
Ads
About
Search This Site
Ads
Categories
Recent Entries
Log Archive
Syndicate This Site
Info.
クリエイティブ・コモンズ・ライセンス
Movable Type 3.36
Valid XHTML 1.1!
Valid CSS!
ブログタイムズ

© 2003-2012 AIAN