Atmel Studio 6.0とAVRISPmk2でoptibootをJapaninoに書き込む(Win8 64bit)

[Arduinoで遊ぶ]

作成 : 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シールド等を利用するときに必要となるため、つけてしまいました。

Japanino ICSP端子

AVRISPmk2とJapaninoを接続

AVRISPmk2のコネクタとJapaninoのICSP端子を接続します。 コネクタには向きがあるので注意です。 下の写真だと、赤いラインの入った線が左にくるようにします。

AVRISPmk2とJapaninoを接続

Japaninoを電源に接続

AVRISPmk2からJapaninoに電源は供給されません。 JapaninoのUSB端子または電池ボックスから電源を供給する必要があります。

Japaninoにoptibootを書き込む

Atmel Studioを起動して、optibootをJapaninoに書き込みます。

Tools > Device Programingをクリックします。

Atmel Studio

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'に設定されるためなので問題ありません。

FUSEビット設定

左メニューの「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 エラー

転送速度が原因で発生することがあるようです。 利用可能な転送速度は、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

[Arduinoで遊ぶ]