2014年11月01日 | 公開。 |
本家ArduinoのサイトにはUsing an Arduino as an AVR ISP (In-System Programmer)という解説記事があり、そこには「Arduinoを、Arduinoのブートローダの書き込みに使える」と書いてあります。しかしながら、この解説記事で紹介されているArduinoISPファームウェアは、Arduinoのブートローダの書き込みだけではなく、avrdudeというソフトと組み合わせることで、汎用のAVRライタとして使う事ができます。この記事では、ArduinoISPを汎用のAVRライタとして使う方法を解説します。
この記事を読めば、Arduino Uno用ブートローダライタシールドやArduino用ブートローダ/スケッチライタなどで、ICSPによる書き込みに対応したAVRマイコンに、プログラムを書き込む事ができるようになります。(ほとんどのAVRマイコンはICSPによる書き込みに対応しています)
商品名 | Arduino Uno用ブートローダスケッチライタシールドキット | |
税抜き小売価格 | 1440円 | |
販売店 | スイッチサイエンス | |
サポートページ | Arduino Uno用ブートローダライタシールドキットサポートページ |
商品名 | Arduino用ブートローダ/スケッチライタキット | |
税抜き小売価格 | 3000円 | |
販売店 | スイッチサイエンス | |
サポートページ | Arduino用ブートローダ/スケッチライタキットサポートページ |
本題に入る前に、まずはいくつか言葉の説明が必要です。最初にArduinoISPの説明をします。
Arduino IDEを起動し、ファイル→スケッチの例→ArduinoISPメニューを選ぶと、ArduinoISPのファームウェアのスケッチが出てきます。
このArduinoISPスケッチは、Arduino Uno等を、AVRのライタにするためのスケッチです。
ArduinoISPを用いて、ArduinoのブートローダをAVRマイコンに書き込む方法は、本家ArduinoのサイトのUsing an Arduino as an AVR ISP (In-System Programmer)という英語の解説記事に詳しく載っていますが、日本語では、当サイトのArduino Uno用ブートローダライタシールドの製作(1)の記事に詳しく載っています。
ArduinoISPを用いて、Arduinoのブートローダを書き込む情報は比較的ネット上に多くあるのですが、実はArduinoISPはブートローダを焼くためのファームウェアではなく、ArduinoをAVRISPという汎用のAVRライタの互換機にするためのファームウェアです。そのため、ブートローダ以外にスケッチも焼けますし、Atmel Studio(Atmel純正のAVR開発環境)と組み合わせて、ICSP書き込みに対応したAVRマイコンのプログラムの開発にも使えます。ArduinoISPファームウェアを用いてArduinoを汎用のAVRライタとして使うための情報は少ないため、このページにまとめようと思いました。
Atmel社のAVRマイコン(Arduino Unoに使われているATmega328PもAVRマイコンの一種)を使ってプログラム開発をされている方の中には、Atmel社純正のAVRISP mkIIというAVRライタを使っていらっしゃる方も多いでしょう。Atmel社純正のライタなので安心して使えますし、秋月電子ではたった3,200円で購入できます。(2014年10月現在)
商品名に"mkII"と付けているということは、先行機種がありました。それがAVRISPという訳なんですが、単にAVRISPと呼ぶとAVRISP mkIIと紛らわしいので、Mature AVRISPとか、AVRISP mkIとか呼ばれたりもします。(ちなみにmatureは成熟したとか、熟成したとか、満期になったというような意味ですが、個人的にはLegacy AVRISPと呼びたいような気がします。legacyは遺産とか遺物という意味です)
現行品のAVRISP mkIIは、パソコンとのインターフェースがUSBです。それに対して、先行品のMature AVRISPは、パソコンとはシリアルポート(RS-232C)接続でした。現在ではシリアルポートがついているパソコンが少ないためか、Mature AVRISPは製造中止になっています。
ただ、シリアルポート接続というのは、互換品を作る面では都合がいいのです。USB接続の場合は、AtmelのVID(ベンダーID)を書き込まないと、ドライバが互換機を認識してくれません。AtmelのVIDを勝手に使うことは、法的問題、倫理的問題を伴います。一方でシリアルポート接続の場合は、VIDの問題が元々存在しません。
Arduinoは、パソコンとはUSBで接続していますが、仮想シリアルポートを使っているため、ソフトウェア側から見ればシリアルポートに見えます。よって、適切なファームウェア(ArduinoISP)を載せれば、ArduinoはAtmel純正のMature AVRISPの互換機になるのです。
Atmel Studioは、Atmel社純正のAVRマイコンのプログラム開発環境です。無償でダウンロードでき、IDEもCコンパイラも、AVRライタのドライバも全て揃っています。Arduinoに使われているATmega328P等以外のAVRマイコンのプログラムを作ったり、あるいはATmega328Pの潜在能力を最大限に発揮するプログラムを作ろうとすると、Arduino IDEでは無理ですので、Atmel Studio等を使ってプログラムをすることになります。
Atmel Studioを使って開発するには、Arduino IDEで開発するよりも高度な知識が要求されます。しかし一方で、Arduino IDEを使って開発すると、Arduinoの環境がAVRマイコンの種類や使い方をある程度限定ししまっているので、AVRマイコンの選択肢が限られ、マイコンの能力を最大限に発揮する事もできません。良く使う機能に限定して対応している点がArduinoのお手軽さの一因なので、痛し痒しです。
なお、Atmel StudioではAVRISP mkIIには対応しているものの、Mature AVRISP(およびArduino ISP)には対応していません。Atmel Studioの前身の、AVR Studio 4ならMature AVRISPによるプログラムの書き込みに対応していたのですが、今となってはかなり古い開発環境になってしまいました。Atmel StudioがMature AVRISPによるプログラムの書き込みに対応していないので、プログラムの書き込みには後述するavrdudeというソフトを使う事になります。
avrdudeは、AVRマイコンにプログラムを書き込むための、オープンソースのソフトです。これを使えば、各種ライタを使って、AVRマイコンにプログラムを書き込めます。Arduinoの開発環境も、スケッチの書き込みにはavrdudeを使っています。avrdudeはMature AVRISP(およびArduino ISP)にも対応しています。
avrdudeはGUIを持っておらず、コマンドラインからオプションを打ち込んで使います。
avrdudeを入手するには、Windows環境の方はWinAVRをダウンロードすると、その中にavrdudeが付いてきます。WinAVRは、avr-gcc(AVRマイコン用のCおよびC++のGNU GCCコンパイラ)を中心とした、AVRマイコンの開発ツール群をパッケージにしたものです。WinAVRの最新版は、こちらのページからダウンロードできます。
なお、Arduinoもavrdudeを利用しているため、Arduinoのインストールフォルダにもavrdudeの実行ファイルがあります。例えば、Arduino IDE 1.0.5をデフォルトのフォルダにインストールした場合、C:\arduino-1.0.5\hardware\tools\avr\binの中にavrdude.exeというファイルがあるはずですが、それがavrdudeの実行ファイルです。また、C:\arduino-1.0.5\hardware\tools\avr\etcの中にavrdude.confというファイルがあるはずですが、それがavrdudeの設定ファイルです。ただし、avrdudeを使って本格的に開発をするなら、これらのファイルを使うより、WINAVRをダウンロードする方がいいでしょう。
先ほど紹介したsourceforge上のWinAVRのダウンロードページに行くと、"Looking for the latest version? Download WinAVR-********-install.exe"と書かれた部分があります。(********の部分はリリースの日付が入るので、新しいバージョンがリリースされたら変わる) このファイル名のところをクリックすると、しばらくして、WinAVRのインストール用ファイルのダウンロードが始まります。(なお、この記事を書いている2014年11月時点では、WinAVRの最新バージョンは、2010年01月10日リリースのもので、これに含まれているavrdudeのバージョンは5.10です)
適当な作業用フォルダにWinAVR-********-install.exe(********はリリースの日付)をダウンロードした後、実行してください。
そうすると、言語を尋ねられますので、Japaneseを選んで、OKボタンをクリックしてください。
そうすると、セットアップウィザードが表示されますので、次へをクリックします。
次にライセンス誓約書が表示されるので、(一通り読んで内容を確認した後に)「同意する」をクリックします。
次にWinAVRをインストールするフォルダを尋ねてきますので、指定した後、「次へ」をクリックしてください。ここではデフォルトのフォルダのC:\WinAVR-********(********はリリースの日付)のままインストールする事にします。
次にインストールオプションの指定になります。全てチェックした状態で「インストール」をクリックするといいでしょう。
なお、"Add Directories to PATH"というのは、WinAVRの実行ファイルが置かれているフォルダにパスを通す設定の事です。パスを通すと、実行したいコマンドをコマンドラインから打ち込むときに、実行ファイルの名前をフルパスで入力しないで済むので、便利です。Recommended(推奨)とも書かれていますし、このチェックは外さないようにしましょう。
インストール後、C:\WinAVR-********\binというフォルダ(********はリリースの日付)を見てください。avrdude.conf(設定ファイル)とavrdude.exe(実行ファイル)が見つかるはずです。
ここで、avrdudeが正常に起動するか確認してみます。Windows7の場合は、スタートボタン→全てのプログラム→アクセサリ→コマンド プロンプトを選択し、コマンドプロンプトを起動してください。(他のOSの場合は、それぞれのOSの方法でコマンドプロンプトを起動してください)
コマンドプロンプトが起動したら、avrdudeと打ち込んで、Enterキーを押してください。
そうすると、avrdudeのオプション一覧が表示されるはずです。
これで、WinAVR内のavrdudeが正しくインストールされている事が確認できました。
コマンドプロンプトを閉じるには、ウィンドウ右上のX印をクリックするか、exitと打ち込んでEnterキーを押します。(exitはコマンドプロンプト終了のコマンド)
次のページではavrdudeでArduinoISPを使う方法を説明します。
商品名 | Arduino Uno用ブートローダスケッチライタシールドキット | |
税抜き小売価格 | 1440円 | |
販売店 | スイッチサイエンス | |
サポートページ | Arduino Uno用ブートローダライタシールドキットサポートページ |
商品名 | Arduino用ブートローダ/スケッチライタキット | |
税抜き小売価格 | 3000円 | |
販売店 | スイッチサイエンス | |
サポートページ | Arduino用ブートローダ/スケッチライタキットサポートページ |