Atmel Studio 6.0とAVRISPmk2でoptibootをJapaninoに書き込む(Win8 64bit)
作成 : 2013/01/24
Atmel Studio 6.0とAVRISPmk2でJapaninoにoptibootを書き込む
AVRチップ用のIDEであるAtmel Studio 6.0とAVRライタ AVRISPmk2を使って、Japaninoにoptibootというブートローダを書き込みます。 optibootはサイズが小さいためアプリケーション領域を拡大することができることと、データ転送速度が速いことが利点のようです。 ついでに、Japaninoに搭載されている水晶発振器を使用するようにします。
Arduino UNOをAVRライタにして、外部クロックを利用するようJapaninoのFUSEビットを設定していたところ、動かなくなってしまったのです。 そこで、AVRISPmk2を買ってきて、修復を試みたしだいです。 いま思えばチップが壊れたわけではなかったので、AVRライタを使わなくてなんとかなったような気がしますが、勉強になったのでよしとします。 ちなみに、AVRISPmk2は秋月で3,000円でした。
Atmel Studio 6.0をインストール
Atmel Studio 6.0はAtmel Studioのページからダウンロードでき、無償で使用できます。 AVRISPmk2のデバイスドライバは、Atmel Studioに含まれています。
「Atmel Studio 6.0 with Service Pack 2 (build 1996) Installer - Full」を選択すると、First Name, Last Name, E-mail address, Companyの入力を求められます。 入力して「Submit」ボタンをクリックすると、E-mail address宛にダウンロードURLがメールで送られてきます。
ダウンロードした「as6installer-6.0.1996-net.exe」を起動して、インストールを開始します。 MS Visual Studio, Atmel Studio, AVRISPmk2ドライバの順に、自動的にインストールされます。 AVRISPmk2ドライバのインストールでは「このデバイスソフトウェアをインストールしますか?」と何度か聞かれますが、「インストール」を選択して進めます。
AVRISPmk2とPCを接続
AVRISPmk2とPCをUSBケーブルで接続します。 AVRISPmk2の緑のランプが点灯するはずです。
AVRISPmk2の緑のランプが点灯しない場合は、デバイスドライバが動作していないかもしれません。 Atmel Studioをインストールする前に、AVRISPmk2をPCに接続するとこの状態になるようです。
デバイスマネージャで「AVRISPmk2」がエラーになっている場合は、「AVRISPmk2」を右クリックして「ドライバーソフトウェアの更新」をクリックし、
「ドライバーソフトウェアの最新版を自動検索します」をクリックすると、デバイスが有効になりました。
JapaninoにICSP端子にピンヘッダを半田付け
2.54mmピッチのピンヘッダを、JapaninoのICSP端子に半田付けします。 AVRISPmk2のコネクタとJapaninoのピンをジャンパで接続するだけでよいようですが、Ethernetシールド等を利用するときに必要となるため、つけてしまいました。
AVRISPmk2とJapaninoを接続
AVRISPmk2のコネクタとJapaninoのICSP端子を接続します。 コネクタには向きがあるので注意です。 下の写真だと、赤いラインの入った線が左にくるようにします。
Japaninoを電源に接続
AVRISPmk2からJapaninoに電源は供給されません。 JapaninoのUSB端子または電池ボックスから電源を供給する必要があります。
Japaninoにoptibootを書き込む
Atmel Studioを起動して、optibootをJapaninoに書き込みます。
Tools > Device Programingをクリックします。
Toolは「AVRISP mkII」、Deviceは「ATmega168」、Interfaceは「ISP」を選択して、「Apply」ボタンをクリックします。
左メニューの「Memories」をクリックします。 「Flash」で書き込むブートローダを選択します。 今回はArduino IDE 1.0.3に付属のものを使用するので、場所はarduino-1.0.3\hardware\arduino\bootloaders\optiboot\optiboot_atmega8.hexです。 ブートローダを選択したら、「Program」ボタンでJapaninoに書き込みます。
左メニューの「Fuses」をクリックします。 EXTENDEDに「0x04」、HIGHに「0xDE」、LOWに「0xFF」を入力して、「Program」ボタンをクリックすると、JapaninoのFUSEビットが設定されます。 Japaninoに搭載されている水晶発振器の種類がよくわからず、先人の方々の知恵に倣いました。 これで、アプリケーション領域の拡張と水晶発振器の使用が実現できます。
再度FUSEビットを読み込むとEXTENDEDが「0xFC」になりますが、これは未使用の7〜3ビットが'1'に設定されるためなので問題ありません。
左メニューの「Lock bits」をクリックします。 LOCKBITに「0x0F」を入力して、「Program」ボタンをクリックすると、Japaninoのロックビットが設定されます。
再度ロックビットを読み込むと「0xCF」になりますが、これは未使用の7〜6ビットが'1'に設定されるためなので問題ありません。
これでJapaninoのチップへの書き込みはおしまいです。 「Close」ボタンをクリックしてウィンドウを閉じ、Atmel Studioを終了します。
Arduino IDE boards.txtの変更
Arduino IDEのboards.txtに、以下の内容を追記(すでにJapaninoのエントリがある場合は修正)します。 場所は、arduino-1.0.3\hardware\arduino\boards.txtです。
############################################################## Japanino.name=Gakken Japanino Japanino.upload.protocol=arduino Japanino.upload.maximum_size=15872 Japanino.upload.speed=57600 Japanino.bootloader.low_fuses=0xFF Japanino.bootloader.high_fuses=0xDE Japanino.bootloader.extended_fuses=0x04 Japanino.bootloader.path=optiboot Japanino.bootloader.file=optiboot_8MHz.hex Japanino.bootloader.unlock_bits=0x3F Japanino.bootloader.lock_bits=0x0F Japanino.build.mcu=atmega168 Japanino.build.f_cpu=8000000L Japanino.build.core=arduino Japanino.build.variant=standard ##############################################################
変更したら、すべてのArduino IDEを閉じてから起動し直します。 サンプル等のプログラムをJapaninoに書き込むことができれば成功です。
プログラム転送エラー avrdude: stk500_getsync(): not in sync: resp=0x00
プログラムをJapaninoに転送するとき、「avrdude: stk500_getsync(): not in sync: resp=0x00」というエラーになることがあります。
転送速度が原因で発生することがあるようです。 利用可能な転送速度は、Arduino IDEに付属しているavrdude.exeを使って(地道に)調べることが可能です。 avrdude.exeは、Arduino IDEでプログラムの転送するとき、裏で動いているコマンドです。 場所は、D:\arduino-1.0.3\hardware\tools\avr\bin\です。
"-P"で指定するポートは各環境に合わせて適宜書き換え、"-b"で転送速度を指定して実行します。 Japaninoのチップとの通信に失敗したときは、Arduino IDEで転送に失敗したときと同じエラーになります。
D:\arduino-1.0.3\hardware\tools\avr\bin>avrdude -C ../etc/avrdude.conf -t -c arduino -p m168 -b 38400 -P com3 avrdude: stk500_getsync(): not in sync: resp=0x00 avrdude done. Thank you.
"-b"で指定する転送速度を、11520/57600/38400/19200/14400/9600等に変更しながら実行して、通信に成功する転送速度を探します。 私の環境では、"57600"のときだけ通信に成功しました。 成功したら、"quit"でコマンドを終了します。
D:\arduino-1.0.3\hardware\tools\avr\bin>avrdude -C ../etc/avrdude.conf -t -c arduino -p m168 -b 57600 -P com3 avrdude: AVR device initialized and ready to accept instructions Reading | ################################################## | 100% 0.00s avrdude: Device signature = 0x1e9406 avrdude> quit >>> quit avrdude: stk500_cmd(): programmer is out of sync
Arduino IDEのboards.txtを修正すれば、今度はプログラムの転送に成功するはずです。
Japanino.upload.speed=57600