create 2010.08.02
update 2010.08.26

AVRライタの自作

回路図 回路図+MBEデータファイル

 いつもなら、ファームウエア込みのプロジェクトファイルも公開するのですが、今回はChaN氏をはじめ、様々なサイトのプログラムを使用させて頂きますので、そちらからダウンロードして製作します。(基板データは私のオリジナルです)


・最近のAVR事情

 AVRに限った話ではありませんが、マイコンにプログラムを書き込む手段が無いと手も足も出ません。
 マイコンにプログラムを手軽に書き込む方法として、ブートローダーが予め書き込まれているマイコン搭載ボードを使用する方法があります。
 私見ですが、この手の製品は、起動が遅い、ボード構造の制約を受ける等のデメリットもあります。
 AVRでは、ブートローダー搭載のArduinoが結構な人気があります。これなら、USBケーブルが有れば専用の無償開発環境から直接プログラム(スケッチ)を書き込んで、実行することができます。
 しかし、私は開発環境(AVRの様な貧弱なメモリ容量でC++はキツイと思うのですが)に馴染めずに購入したまま放置しています。
 また、Arduinoは完成品を購入しなくても、ハードウエアを自作する事もできます。ただしブートローダをどうやってAVRに書き込むのか?
 やはり、マイコンにプログラムを書き込むライタが必要になります。

 大抵のマイコンメーカからは評価キットや専用ライタが発売されていますので、それを購入すれば用は足ります。
 AVRの場合は、秋月電子通商(以下秋月)で純正ライタ「AVRISPmkII」が、4000円で販売されております。恐らく国内では秋月が一番安く購入できるのではないでしょうか。
 秋月で扱っている商品は、他の店と比べると格段に安く購入できるものが多数ありますが、油断しているといつのまにか販売終了になっていたりするのが怖いです。
 いつの間にか、京セラ KTXO-18S(12.8MHz)が販売終了になっていました(泣)
 気に入った商品があったら、まとめ買いした方が良さそうです。

 AVRを使用した電子工作を楽しみたいのであれば、AVRライタを自作しましょう。
 製作時間を考えなければ、格安の部品費で製作可能なのです。
 プログラムを書き込む為のソフトウエアもフリーソフトとして存在していますでの、AVRマイコンを始める場合、部品代以外は全て無料です。

 私がAVRを選んだ理由として、ライタの製作が容易な事。開発環境(C言語・アセンブラ)が無償で提供されていて、機能制限が無いことです。
 PICの場合は、無償期間を過ぎると最適化オプションが制限されてしまいます。
 最適化オプションによって、作成されるコードの容量や、動作速度が大きく変わるので、これは痛いです。(C言語の場合です)


・ChaN氏のUSBspi(USB用SPIブリッジ)

 私が初めて作成したライタは「PonyProg」というもので、パソコンのCOMポートに接続して使うものでした。
 このライタは、AVR以外のマイコンにも対応していて、部品点数も少なく優秀だと思います。AVR/PICどちらを使うか迷っていた時に作成したものなので、両方に対応しているのはとても助かりました。
 しかし、アクセススピードが遅いこと、近年、COMポートを搭載したパソコン(特にノート)が無くなってきたことにより、新しいライタの製作を考えておりました。

 その時に、ChaN氏のAVRライタの存在を知り、ChaN氏のホームページを読んでいる内にAVRに魅力を感じる様になりました。
 AVRの書込み方法には高電圧パラレル・高電圧シリアル・ISP書込みが存在しており、ISP書込みだけサポートしていれば、基本的に問題はありません。
 但し、ヒューズ設定を間違えると、ISPではアクセスできなくなるので、その時にはAVRを廃棄するか、高電圧でヒューズを書き込むしか方法が無い様です。

 ChaN氏のページでは複数のライタの製作記事がありますが、レガシーポート(COMポート・プリンタポート)が事実上無くなってきている時代ですので、「USBspi(USB用SPIブリッジ)」を製作しました。
 しかし、この「USBspi」にはAVRが使用されていて、そのAVRにプログラムを書き込む必要があります。
 AVRライタが無いのに「USBspi」を作ることはできません。よく、鶏と卵問題として話題になっておりました。
 私は「PonyProg」を使用してAVRにプログラムを書き込みました。

 ChaN氏の技術力は、神のレベルです。QFNの「FT232RQ」とMLFの「AtTiny2313(MLF)」を使用して超小型のライタを作り上げておりました。
 私も挑戦したのですが無理でした(2つもチップを駄目にしました)ので、SSOPタイプの「FT232RL」とDIPタイプの「AtTiny2313(DIP)」を使用して、片面基板で少し大きめに(50mm×37mm)製作しました。
 このサイズは、サンハヤトの感光基板「NZ-P10K」を使用すると、ちょうど4枚作成することができます。


・鶏と卵の問題を解決する

 最近、FT232RLの「BitBang」モードを使用したAVRへのISP書込み方法を「すzのAVR研究(2009年11月28日)」で知りました。
 まさに、鶏と卵問題を解決する夢の様な技術だと思います。
 「USBspi」には、「FT232RL」を使用しているので、追加部品無しでプログラムを書くことができるのです。
 「BitBang」モードでのプログラムの実験を兼ねて、新たに基板を作成して「USBspi」を再度製作してみました。
 オリジナルの回路とは少し違いますが、ChaN氏の「USBspi」と完全互換品です。


・自己書き換えを行う

 基板が完成したら、基板上のトグルスイッチ(SW1)を上又は下に倒します。中間で止めると、AVRに電源が接続されない状態になりますので、自己プログラムができません。

 意外とFT232RLのハンダ付けが難しいです。VS1053bの実装に比べれば簡単かもしれませんが・・・


 パソコンのUSB端子に基板を接続するとウイザードが起動し、FT232RLのドライバの導入が始まります。
 Windows7の場合は、インターネット経由で自動的にドライバが導入されますが、少々古いドライバなので最新と置き換えた方が良いと思います。
 「http://logjapan.com/index.html」のサイトを参考にドライバを導入します。
 ドライバを導入したら、割り当てられたCOMポート番号を控えておきます。
 現時点(2010.08.26)でのドライバの最新は「CDM20802.zip」です。

 ドライバの導入ができたら、基板上のピンヘッダを下図の様に4本の線で接続します。(ブレッドボード用のメス-メスケーブル)がちょうど良いです)


・パソコン(Windows XP・Vista・7)の環境を構築する・・・

・「avrdude」の準備

 「http://www-ice.yamagata-cit.ac.jp/ken/senshu/sitedev/index.php?AVR%2Favrdude03#v9fde365」で公開されている、「BitBang」書込み対応の「avrdude-20100701.zip」をダウンロードします。
 「avrdude」はコマンドプロンプトで使用するプログラムですが、GUIで操作出来る「avrdude-GUI」も同梱されているので簡単に操作ができます。
 ダウンロードしたファイルを解凍すると、「avrdude-20100701」フォルダが作成されて、その中に「bin」フォルダが作成されます。
 「bin」フォルダ内に、ファイル「avrdude-GUI.exe」「avrdude.exe」「avrdude.exe」「usbtool.exe」「avrdude.rc」が作成されている筈です。

・「hidspx」の準備

 「http://www-ice.yamagata-cit.ac.jp/ken/senshu/sitedev/index.php?AVR%2FHIDaspx_news02#o2ec2e47」で公開されている
 「hidspx-2010-0823.zip」をダウンロードしてきます。
 このアーカイブに含まれる「hidspx.exe」はChaN氏の作成された「avrsp.exe」に様々なライタの対応や、機能の追加を施した強化版です。私もこれを愛用させて頂いております。
 このファイルを解凍すると「hidspx-2010-0823」というフォルダが作成されます。このフォルダ内の「bin」フォルダに含まれるファイル
 「hidspx.exe」「hidspx-GUI.exe」「hidspx.ini」「fuse.txt」を、「avrdude-20100701」の「bin」フォルダにコピーします。
 このアーカイブには「HIDaspx」という「USBspi」とは全く違うAVRライタの回路図・プログラムが同梱されています。
 「HIDaspx」は「FT232RL」を使用せずに、AVRのみでUSB通信も行ってしまう凄いライタです。このライタも最初にAVRにプログラムを書き込まなければいけません。「FT232RL」を使用していないので、「BitBang」による自己書込みはできませんが、COMポートを持ったパソコンがあれば、簡単な回路で書き込む事ができます。

・「libusb」の準備

 USBを使ったプログラムを作成するのを支援するDLLファイルです。
 「http://sourceforge.net/projects/libusb-win32/files/」から「libusb-win32-bin-1.2.1.0.zip」をダウンロードします。
 Windows以外のOS用のファイルもありますので、間違わないでダウンロードします。
 解凍したら、セットアッププログラムを実行して、デフォルト状態でインストールします。
 コントロールパネルのプログラムの追加と削除からアンインストールしても、必要なDLLファイルだけ残りますので、アンインストールしても良いと思います。

・「USBspi」のアーカイブファイルを準備

 ChaN氏の「http://elm-chan.org/works/avrx/report.html」より、「汎用SPIブリッジ Rev.4 資料」をダウンロードします。
 ファイルを解凍すると「ser2spi_r4.hex」という名前のファイルが有ります。これが、AVRマイコンに書き込むプログラムファイルです。

 以上で、プログラム書込みの環境は整いました。


・「BitBang」モードで書き込んでみる

 「avrdude-20100701」の「bin」フォルダの「avrdude-GUI.exe」をダブルクリックして起動します。

 起動したら、「Programmer」のコンボボックスから「(ft232r0) Synchronous BitBang channe...」を選択します。
 結構紛らわしい(似たような)項目がありますので、注意が必要です。
 「Programmer」のコンボボックス内の項目をみると、かなりの数のライタに対応している事がわかります。

 「Command line Option」のテキストボックスに「-P ft0 -B 19600」と入力して「Read」ボタンをクリックします。
 成功すると、デバイス名(ATtiny2313)とヒューズ設定値が表示されます。
 表示されない場合、配線と「Programmer」を入念にチェックして下さい。
 また、AVRのヒューズが何らかの理由でISP禁止等になっていても動作しません。


 「ser2spi_r4.hex」ファイルを「Flash」のテキストボックスにドラック&ドロップします。
 Flashの「Write」ボタンをクリックすると、書込みが始まります。
 書込みが終わったら、「Verify」ボタンをクリックして、正常に書き込まれているかを確認します。


 最後に「Fuse」の設定を行います。
 「Lo」に「FF」  「Hi」に「DD」  「Ex」に「FF」
 を入力して「Fuse」の「Write」ボタンをクリックします。
 念の為、「Read」ボタンをクリックして、正常にヒューズ設定が行われていることを確認します。

 ここまでの作業が終わったら、USBから基板を取り外して、ピンヘッダに差し込んでいる4本のリード線を取り去ります。
 今後、このライタのファームが更新されたら、同様の方法で自己書き換えを行う事ができます。

 再度、USBへ基板を接続すると、「USBspi」として基板が動作します。
 このライタは簡単なアダプタを作成することで、一部のPICにも書き込むことができます。

 ChaN氏オリジナルのavrsp.exe又は、hidspx.exeを使用して各AVRマイコンにISPプログラムできます。
 hidspx.exeとhidspx-GUI.exeを使用して、GUI操作することも可能です。
 私が、hidspx.exeを使用させて頂いている理由は、読み書き時にプログレスバー(進捗状況)と転送速度が表示されるのが便利だからです。
 hidspx.exeで「BitBang」に対応して頂ければ便利なんですけどね。

 hidspx.ini / avrsp.ini のファイルに記述されているテキストを全部削除して、次の2行を記入します。
 -pb3:312500
 -d0

 -pbに続く3は、FT232RLに割り当てられたCOMポート番号を記述します。デバイスマネージャで確認することが出来ます。
 その後のコロンに続く数字は、PCとの通信速度です。この数字は省略可能ですがデフォルト状態では動作しませんので、明確に312500を指定します。

 -dに続く数字は、ISP通信速度(小さい程高速)です。購入したてのAVRは内部発振クロックが1MHzになっていますので、
 -d8程度の設定にしないと、通信に失敗します。
 8MHz以上の動作クロックにした場合は、「-d0」で最高速度の通信が可能になります。

 開発中は、「-v-」オプションを指定してベリファイを省略することで、待ち時間を減らすことができます。完成時に「-v-」オプションを外してプログラムを書き込めば問題は無いと思います。


・ケースに入れてみました・・・

 今までのライタは、基板むき出しで使用していたので、ショートしてライタがフリーズしたり、ターゲットが誤動作したりと大変だったのでタカチのプラスチックケース「SW-55」に無理やり入れてみました。

 微妙に基板が大きい為に普通には入りません。そこで、基板を少し削り、更にケース内部を削ってようやく入りました。
 基板上のケーブルは「BitBang」専用の自己書き換えケーブルです。自己プログラムが終了したら外します。
 ケースに各スイッチの名前をレタリングした方が使いやすそうです。



・他のライタとの速度比較・・・

 「USBspi」「BitBang」「HIDaspx」の転送速度を比べてみました。

 測定条件
   ターゲット     AtMega1281(16MHz)
   データサイズ   101,026Bytes
   使用PC      Sony VPCCW2AFJ(Windows7 64bit)、CPU i7 M620、メモリ8GB、チップセット PM55Express
   ライティングソフト hidspx.exe(BitBangはavrdude.exe)

ライタ名 書込み時間(秒) 読込み時間(秒)
USBspi(-D0) 8秒   17秒 
BitBang(-B 460800) 43秒  14秒 
HIDaspx(-D0) 17秒  31秒 
HIDaspx(-D0) / HUB経由 19秒  29秒 

 インテルのUSBコントローラの場合、USB-HUBを使用するとHIDaspxのアクセス速度が上がる筈なのですが、逆に遅くなってしまいました。
 Core2搭載のVAIO(タイプSZ)の時は間違いなく高速になったのですが、今のチップセットでは効果が無いのか、OSが32bitでなければ効果が無いのかは分かりません。

 純正ライタ「AVRISPmkII」のアクセス速度に興味があるのですが、何方か、報告して頂ければ幸いです。

 私は、マイコンプログラム時にシミュレータを使わずに、Write&Runで開発しております。
 マイコンのフラッシュの寿命が気になりますが、今までの製作物ではフラッシュが壊れたことはありませんので、今後もこのスタイルでプログラム開発を行う予定です。
 その為に、少しでも書込み速度が速いライタが必要なのです。
 ChaN氏のライタは、まさに私にピッタリのライタな訳です。


参考サイト

 Electronic Lives Mfg.
 千秋ゼミ
 すzのAVR研究
 FTDI社

 ChaN氏をはじめ、ここまでの素晴らしい技術情報を無償で提供して頂いた方々に心より感謝致します。



【HOME】