2011年9月28日水曜日

Arduino as ISP


Arduino はUSB シリアル接続で、簡単にプログラムを書き込むことが出来ます。
その他に、ICSP (In Circuit Serial Programming) 端子で書き込む方法があります。

この方法は、普通の使い方をする上では、全く必要ありません。
これまでこの端子は、気になりつつも使わずにいました。
前回、変則的ながら使う事になったICSP 端子の、本来の使い方を調べてみました。

ICSP を使ったプログラマは市販品を購入することも、自作することもできます。
今回は、「Arduino を使ったISP プログラマ(書き込み器)」というものがあるので、使ってみます。(ISP (In-System Programmer) とICSP は同じような意味だと思います。)

Examples の中にある「ArduinoISP」というプログラムを書き込みます。

注意:このプログラムはArduino Uno には対応していないそうです。

このプログラムを書き込んだArduino (2009: Duemilanove 以前) をプログラマとして使い、他のArduino、あるいは生のAVR にプログラムを書き込む事が出来ます。
Bootloader を書くこともできるので、2台目、3台目のArduino を自作する際に活用できます。


2台のArduino を接続します。(ISP:書き込み器, TARGET:新しく書き込む方、ICSP のピン番号は基板上の白いマーカーを1番に)

実際やってみると、例によって罠が有りました。

error: avrdude: stk500_getsync(): not in sync: resp=0x15

Mac 環境では、オートリセットが邪魔をするそうです。
対処法がこちらで解説されていました。

上記サイトを参考に、ISP側の 5V-Reset 間に 110Ωの抵抗を挿入して対処しました。
(上記サイトの「ATmega168 とATmega168p の問題」は、ATmega328p を使用する場合は関係ありませんでした。

配線を簡単にするため、専用のケーブルを作成しました。
これで、生のAVR にブートローダーやプログラムを書き込む事が出来ます。



Arduino ISP を使ったブートローダーの書き込み手順

1) Arduino (Duemilanove以前) に通常の手順で「ArduinoISP」 を書き込む
2) ISP 仕様のArduino と、新しくプログラムを書き込むArduino を接続する

3) Tools > Serial Port は1) のArduino を接続したポートを選択する。
4) Tools > Board は新しくプログラムを書き込むArduino に合わせる。
 ATmega328p に Uno 相当のブートローダー(Optiboot) を書く場合は "Arduino Uno" を、
 Duemilanove 相当のブートローダーを書く場合は "Arduino Duemilanove or Nano w/ ATmega328" を選択。

5) Tools > Burn Bootloader > w/ Arduino as ISP を選択する(ブートローダーの書き込み開始)

Arduino ISP を使ったプログラム書き込み
接続方法は上記手順と同じ、ただし、書き込み方法を設定ファイルで指示する必要があります。
preferences.txt にupload.using=arduinoisp を書き込む方法と、board.txt に同様の記述をする方法があります。
前者は、今後の書き込みを全てISP で行うので、後者をお勧めします。
設定ファイルの場所や、記入方法は、こちらを参考に。

*******

「簡単・お手軽なArduino」からちょっと離れてしまいますが、秋月の基板を使ってArduino を増産したり、ATmega8u2 をいじる場合に、ICSP 経由の書き込みは便利ではないでしょうか。


0 件のコメント:

コメントを投稿