ProMicroをArduinoのISPにする

概要

  • Pro MicroをPro Micro用のISPに仕立てた(+3.3V/8MHz版)。
  • Arduino IDEに付属の ArduinoISPスケッチを使うときは、プログラマとして、Arduino as ISP (ATmega32U4) を選択する。
  • avrdude.exe で指定するprogrammerのid (-cオプション) には、avrispではなく arduino を指定する。
Pro Micro as Arduino ISP

秋になったある日、Pro Micro +3.3V/8MHz版のUSBケーブルをPCに接続しても仮想シリアルポートが出てこなくなった。そのためArduino IDEからスケッチの書込みができなくなった。ブートローダーを開始させるためにRSTピンをGNDに落としたりするが、うまくいかない。いつの間にか別のマイコンのブートローダーでも書いてしまったのかもしれない。

しょうがないので、ISPを使ってブートローダーを書き直すことにした。以前は+5V動作のPro MiniにUSB-シリアルデバイス(FT231X)を接続してやっていたが、今回のターゲットは+3.3V動作のPro  Microなので、同じく+3.3VのPro MicroをISP装置に仕立てることにした。電圧の高い方から低い方に接続するラインにレベルシフタを入れることも考えられるが、同じ動作電圧のマイコンが使えるならその方が話は簡単だろう。

ISPやブートローダーについては、Arduino.cc が公開している Arduino as ISP and Arduino Bootloaders を参照のこと。

接続回路

2つのPro Microの接続は以下のようにした。

Pro Micro as Arduino ISP

図面左側のPro Microがターゲット(書き込まれる側)で、右側がISPになる。ISP側のUSBコネクタにケーブルを差してPCまたはハブに接続する。2つのPro Microの電源としては、ISP側のLDOレギュレータの出力(+3.3V)が供給される。オンボードのLDOには300mAくらいの出力能力があるはずなので、電源は問題ない。

ISP側が+5V動作ならば

ISPとターゲットを接続するSPI用ラインのうち、ISP側が駆動するのはSCLKとMOSIの2本だけなので、+5V動作のArduinoをISPにするならばこれら2本を+3.3Vにレベルシフトする。そして、D10とターゲットのRSTを接続するリセット用の接続もレベルシフトが必要になる。また、ターゲット側の電源としてISPのRAW(USBのVBUS相当)またはVCCから、ターゲット側のRAWに接続する。

Arduino IDE (1.8.15)

ツールメニューの書込装置に、Arduino as ISP (ATmega32U4) という項目が増えていた。以前使ったときはなかったと思うのだが、しばらく「書込装置」は開いていなかったので、いつ追加になったのかはわからない。

書き込み装置の選択

当然これを選ぶ。ツール/ブートローダを書き込む を選ぶと、なんの問題もなく、書込みが終了した。

Arduino as ISP Arduino as ISP(ATmega32U4)の相違については後述する。

avrdudeのパラメータ

フラッシュ内容の消去やヒューズの書き換えを行うときなど、avrdude.exe を直接使うことになる。avrdudeをコマンドラインから実行する場合、オプション -c に続けてISP装置名を指定する。 前にやったときは -c avrisp とか書いて通ったのだけど今回はだめだった。

Arduino IDEを使ったブートローダー書込みは成功するので、参考のために出力エリアを見てみると、以下のようになっていた。

Arduino IDEによるavrdudeの実行

-carduino とあるので、書込み装置名は arduinoとするようである。書き込み時のコマンドラインを表示するときには、以下のように環境設定で より詳細な情報を表示する:書き込み をチェックしておく必要がある。

環境設定

avrdudeに対して -c arduino を与えて実行したところ以下のように正常に動作した。

“-v” を指定しないと以下のようにヒューズのもつ値があっさりと出力される。

arduino プロトコルについて

ArduinoIDE の ツール/書込装置 で選択される内容は、…\Arduino\hardware\arduino\avr\programmers.txt に書かれている。その内容の一部を抜粋すると以下のようになっていた。

stk500 というのはATmel社が出していた AVR用の書込み装置で、ここでは制御側(PC)とのコマンドやデータのやり取りの規則(プロトコル)の名称として登場している。avrdudeのソースファイルを見ると、”stk500v1″プロトコルと”arduino”プロトコルはほとんど同じで、PC側からシリアルポートをオープンする際にちょっとした工夫が入っているだけのようだった。

最後に、ブートローダー書込みをしているときの様子です。一瞬ですが。