小ネタ 2008-027

AVRマイコンの書き込み器を色々使ってみる
(2008-12-01)

 
 試したみたAVRマイコン用の書き込み器(ライター,プログラマー)の写真

 左上から順に、「STK500」、「AVR Dragon」、「AVR ISP mkII」、「AVR JTAGICE mkII」。
 左下から順に、「AVRSPキット」、「EZ-USBキット+AVRアダプタキット」、「FT232R」、「Arduino Diecimila改造品」、「AVR mkII Lite」。
 (STK500とJTAGICEmkIIは借り物)


 試してみた結果、結論が出て、どれを使うのか大体は決まった。
 小規模なソフトを少ないピン数の小さなAVRマイコンで開発する場合と、割と大きな規模のソフトを多ピンの大きなAVRマイコンで開発する場合とで使い分けしている。
 小さなAVRマイコンの場合、avrdudeというソフトを使ってコマンドラインからマイコンを書き込むのに、自分はAVR mkII Liteを使っている。 (AVR Studioに付属のstk500.exeというコマンドラインのソフトを使ってAVRISPmkIIを使うのも最近試しているのだが、こちらも一応使えるようだ。今後は純正のAVRISPmkIIをメインに使おうと考えている。)
 大きなAVRマイコンの場合、AVR Studioという統合環境を使ってJTAGで接続して使うとJTAGデバッグできるので、AVR Dragonを使っている。

 
WinAVR(コマンドライン)の場合に使う WinAVR+AVR Studio(統合環境)の場合に使う
少ピンのAVRの場合 書込方法: ISP
書き込み器: AVR mkII Lite等
書き込みソフト: avrdude

または

書込方法: ISP
書き込み器: AVRISP mkII
書き込みソフト: stk500.exe(AVR Studio)
書込方法: ISP
書き込み器: AVR mkII Lite等
書き込みソフト: AVR Studio
(DebugWireでデバッグも可能)
多ピンのAVRの場合 書込方法: ISPかJTAG
書き込み器: AVR Dragon か AVR JTAGICEmkII
書き込みソフト: AVR Studio
(JTAGでデバッグ可能)





 純正品か非純正品か、開発用ソフトに対応しているか、対応しているAVRマイコンの品種と書き込み用インターフェースについて注意してどれを使うのか選ばなければならない。

- 純正品か非純正品か -

 純正品のメリットとしては普遍的に入手性がよいというのがある。非純正品の場合、純正品に比べて安価だったりとか、自作品の場合は安価に自作できるというのがメリットとなる。ホビー用に使う場合には安いというのが特に重要である。純正品で安価なAVRISPmkIIが良いと思う。


- 開発用ソフトに対応しているか -

 開発用ソフトについては、AVRマイコンの場合には開発ソフトとしてWinAVR単体をコマンドラインで使うか、AVR StudioにWinAVRを組み合わせて統合環境で使うのが標準的である。AVR Studio以外にもIARという商用の開発ソフトが存在して無料の試用版も出ているのだが、試用の制限がきついのであまり使えない。

 AVR Studioの統合環境を使う場合には、対応している書き込み器を使うと統合環境内で書き込み処理をすることができるので便利である。ややこしいヒューズ設定がGUIで設定できるのが助かる。また、JTAGを使うと書き込みだけでなくデバッグ機能を使うこともできるというメリットがある。

 WinAVRをコマンドラインで使う場合には、書き込み用のソフトとしてavrdudeコマンドを使うのだが、Windows上ではUSB接続の純正書き込み器がうまく動かなかったりする。avrdudeで使っているlibUSBのフィルタドライバが不安定なせいかうまく動かないことが多い。そのため純正品の書き込み器であってもavrdudeで使うのはお薦めできない。非純正の書き込み器でavrdudeに対応しているものを使うのが良いと思う。純正品以外の書き込み器やavrdudeとは別のカスタムな書き込みソフトを使っても別に構わないのだが、特殊な物を使った手順を書いてたりすると他人が同じように書き込めなかったりして困ることがあるかもしれない。avrdudeよりもAVR Studio付属のコマンドライン版の書き込みソフトを使う方がよい。

 最近気が付いたのだが、統合環境AVR Studioには、コマンドラインでの書き込み用のソフトも付属している。avrdudeに比べて使いやすさの点で若干劣るが、USB接続の純正書き込み器に対応している。例えば、AVRISPmkIIの場合、stk500.exeというソフトを使う。stk500.exeはSTK500だけなく、他のいくつかの書き込み器にも対応しているのである。対応していない他の品物で、例えばAVR Dragonの場合はavrdragon.exeを使う。コマンドライン版の書き込み器でヒューズ設定等は16進数で指定するのが間違えやすいので、ヒューズ設定や他のいくつかの設定はコマンドラインで使わず統合環境から設定する方がよい。


- AVRマイコンの品種と書き込み用インターフェースについて -

 AVRマイコンへのプログラム書き込み方式にはいくつかの方法があり、ISPとJTAGとパラレル書き込みがある。AVRマイコンの品種によってどの書き込み方式に対応しているか異なる。

 多くのAVRマイコンがISPに対応している。基本的にはSPI方式のシリアル通信なので、ISP方式に対応した書き込み器を自作することは割と容易である。

 多ピンのAVRマイコンはJTAGに対応している。ピン数の少ないものはJTAGに対応していない。AVRマイコンの出荷状態ではJTAGとISPの両方が有効になった状態で出荷されていて、JTAGのためにマイコンのピンを割り当てたままだと使用できるI/Oのピン数がだいぶ減ってしまうのである。JTAGを使わない場合にはヒューズ設定を書き換えてJTAGを無効にすることもできる。

 表面実装パッケージのAVRマイコンだと、基板への実装後にISPやJTAGでオンボードで書き込みするのが普通である。基板を作るときに書き込み用のコネクタを用意しておく必要がある。

 DIPタイプのパッケージのものはソケットを使って実装して、基板から抜き挿しして別の書き込み器で書き込んだりできるのだが、この場合、STK500やAVR Dragonを使ってパラレルでの書き込みも可能である。ISP等のシリアル方式に比べて高速に書き込みできるというのがメリットなのだが、ISPでオンボードで書き込みできるというメリットの方が勝るので、パラレル書き込みはあまり使わない。ISPでヒューズ設定を間違えてISPやJTAGが使えない状態になった場合、パラレルだとヒューズ設定を書き換えできるので、そういう場合の非常手段としては使ったりする。

 PDIという方式が新しいAVRマイコンで使われているそうだ。ISPだと6ピンの接続が必要だが、PDIだと3ピンの接続で、書き込みとデバッグが可能ということらしい。



それぞれの書き込み器の特徴

・STK500
 本来、書き込み器ではなくて、スターターキット(Starter Kit)である。マイコンをソケットに挿して、ソフトを書き込んで、このボード上で実行することができる。
 もっとも基本的な物なのだが、値段が高く、大きくて使いにくいのであまりお薦めしない。


・AVR Dragon
 STK500よりも小型で安価なのでお薦め。
 特に、JTAGを使うのに良い。
 ISPケーブルやJTAGケーブルが付属しないので自分で用意する必要がある。
 最新版のAVR Studio 4.15 build623だとAVR DragonでJTAGが使えないので、1つ古い物を使う必要がある。(2008-12-20)


・AVRISP mkII
 安価な書き込み器なので、最初に使うのはこれがお薦め。
 AVR Studio付属のSTK500.exeを使うとコマンドラインからも使うことができる
 例えば、
 ATMEGA168にprogram.hexというファイルを書き込む場合には、
 まず、c:\Program Files\Atmel\AVR Tools\STK500にpathを通しておいて、次のようにコマンド入力する。
 stk500.exe -cUSB -I1M -dATmega168 -e -pf -vf -ifprogram.hex


・AVR JTAGICE mkII
 JTAGでデバッグする用なのだが、高価。
 自分が使ったのは本体の色がオレンジ色のものだが、発売時期により他の色の場合がある。
 ケーブルが断線して故障していたので、太い線のケーブルに取り替えて修理して使った。


・AVR mkII Lite
 ISPとDebugWireに対応したJTAGICEmkII互換品で、JTAGには対応していない。
 純正品でないので、AVR Studioの新しいバージョンだと互換性が心配である。
 LED GAMEというキットを使うのに以前、使用していた


・AVRSPキット
 StrawberryLinuxで購入したキット。(ELMというサイトで開発されたもの)


・EZ-USBキット+AVRアダプタキット
 IT-Plazaで購入したキット。(オプティマイズというサイトで開発されたもの)


・FT232Rキット
 FTDIという会社のUSB-UART用ICを使った汎用のキット。
 すzのAVR研究というサイトで、avrdudeを改造して、FT232Rに対応させている。


・Arduino Diecimila改造品
 基本的には上記のFT232Rを使う方法と一緒。
 Kosakaという方の方法を真似してみた。
 Arduino基板をそのままArduinoとして使う以外に、汎用のATMEGA168工作用基板に使う場合に便利な気がする。




注意点

 ヒューズ設定の書き込みには注意が必要である。間違えるとISPが動かない状態になってしまう。そうなると表面実装品の場合には基板から外すのに苦労することになる。

 例えば、AVRマイコンに水晶等を外付けして使うのが普通なのだが、内蔵の発振回路を使用することもできる。そのためにはヒューズ設定を内蔵発振に設定しなおす必要があるのだが、基板上に水晶を実装しないでヒューズ設定を水晶使用の設定した状態になると、ISPで書き込めなくなってしまう。