Arduino ブートローダーを書き込む (AVR)

Arduino ブートローダーの書き込みについてです。Arduino におけるブートローダーとは、外部プログラマ (書込装置) を必要とせずに新しいファームウェアをインストールできる小さなファームウェアの事です。これがないと Arduino ボードは USB 経由でスケッチを転送できません。よって、何らかの原因でブートローダーが破損してしまった場合には、ブートローダーを再度書き込む必要があります。





書込装置 (プログラマ) の種類

書込装置 (プログラマ) には幾つか種類があります。


Arduino as ISP

Arduino を書込装置にする方法です。対象ボードの ICSP 端子に接続して書き込みます。Arduino を書込装置にするには [ファイル | スケッチ例 | 11.ArduinoISP | Arduino ISP] を書き込みます。

インジケーター用の LED を接続する事もできます。

See Also:


AVR ISP シールド (Arduino as ISP)

以下を参照してください。

Arduino as ISP の一種です。Arduino UNO が必要です。DIP タイプの AVR マイコンに直接書き込む方法です。AVRISP と呼ぶと別製品になるので注意が必要です。


Arduino ISP

以下を参照してください。

Arduino 純正の書込装置です。対象ボードの ICSP 端子に接続して書き込みます。紛らわしいですが、Arduino ISP と言ったらこちらを指します。Arduino を書込装置にしたものは Arduino "as" ISP です。しかしながら Arduino を Arduino as ISP にするためのスケッチは ArduinoISP です...本当に紛らわしいですね (w


USBasp

安価な書き込み装置です。対象ボードの ICSP 端子に接続して書き込みます。

以下を参照してください。

USBasp のピンアウトはこのようになっています。

10ピン <-> 6ピン変換コネクタのピンアウト (ICSP メス) はこのようになっています。

ブートローダーの書き込みには USBasp を使うのが圧倒的に楽です。5V のボードにも 3.3V のボードにもブートローダーを書き込めますので、これを一つ持っていればとても便利です...いや二つかな (w



Arduino as ISP (書込装置)

先述しましたが、Arduino を使って Arduino as ISP という書込装置を作る事ができます。以下に各ボードでの結線を示しますがインジケーター LED は考慮していません。


書込装置定義の追加

事前準備として書込装置の定義を追加しておきます。書込装置に UNO しか使わない場合にはこの作業は不要です。

  1. programmers.txt の場所を探す。通常は <Arduino インストールフォルダ>\hardware\arduino\avr にあるが、ボード更新を行っていると、%LocalAppData%\Arduino15\packages\arduino\hardware\avr 等にもあるかもしれない。
  2. programmers.txt を LF 改行が開けるテキストエディタで開く。
  3. arduinoasisp の定義をコピーして arduinoasisp2 のエントリを作る。
    arduinoasisp.name=Arduino as ISP
    arduinoasisp.communication=serial
    arduinoasisp.protocol=stk500v1
    arduinoasisp.speed=19200
    arduinoasisp.program.protocol=stk500v1
    arduinoasisp.program.speed=19200
    arduinoasisp.program.tool=avrdude
    arduinoasisp.program.extra_params=-P{serial.port} -b{program.speed}
    
    arduinoasisp2.name=Arduino as ISP 2
    arduinoasisp2.communication=serial
    arduinoasisp2.protocol=arduino
    arduinoasisp2.speed=19200
    arduinoasisp2.program.protocol=arduino
    arduinoasisp2.program.speed=19200
    arduinoasisp2.program.tool=avrdude
    arduinoasisp2.program.extra_params=-P{serial.port} -b{program.speed}
  4. Arduino IDE を再起動し、[ツール | 書き込み装置] の中に Arduino as ISP 2 があることを確認する。


※ arduinoasisp.program.protocol が stk500v1 ではなく、最初から arduino になっている場合にはこの作業は不要です。
※ 2020/01 現在、Arduino as ISP (ATmega32U4) が存在するため、この作業は不要かもしれません。


書込装置用スケッチの書き込み

Arduino を書込装置にするには [ファイル | スケッチ例 | 11.ArduinoISP | Arduino ISP] を書き込みます。

ボードによってはスケッチを多少変更する必要があります。


Arduino UNO を使った書込装置

ピン 信号
GND GND
13 SCK
12 MISO
11 MOSI
10 RST
5V VCC

次の接続方法も同等の配線となります。

ピン 信号
ICSP 1 MISO
ICSP 2 VCC
ICSP 3 SCK
ICSP 4 MOSI
10 RST
ICSP 6 GND

See Also:


Arduino Nano を使った書込装置

※まずは自身のブートローダーを書き換えた方がいいと思います。

ピン 信号
GND GND
13 SCK
12 MISO
11 MOSI
10 RST
5V VCC

次の接続方法も同等の配線となります。UNO 等とは ICSP コネクタの向きが逆な事に注意してください。1 番ピンはこの図だと右下になります。

ピン 信号
ICSP 1 MISO
ICSP 2 VCC
ICSP 3 SCK
ICSP 4 MOSI
10 RST
ICSP 6 GND

See Also:


Arduino Pro Mini を使った書込装置

※ボードの電圧に注意してください。

ピン 信号
GND GND
5V or 3.3V VCC
13 SCK
12 MISO
11 MOSI
10 RST

See Also:


Arduino Leonardo を使った書込装置

ピン 信号
ICSP 1 MISO
ICSP 2 VCC
ICSP 3 SCK
ICSP 4 MOSI
10 RST
ICSP 6 GND

See Also:


Arduino Micro を使った書込装置

ピン 信号
MISO MISO
5V VCC
SCK SCK
MOSI MOSI
10 RST
GND GND

次の接続方法も同等の配線となります。ICSP コネクタの向きに注意してください。1 番ピンはこの図だと左下になります。

ピン 信号
ICSP 1 MISO
ICSP 2 VCC
ICSP 3 SCK
ICSP 4 MOSI
10 RST
ICSP 6 GND

See Also:


(Arduino) Pro Micro を使った書込装置

※ボードの電圧に注意してください。

ピン 信号
GND GND
5V or 3.3V VCC
15 SCK
14 MISO
16 MOSI
10 RST

See Also:


Arduino Mega2560 を使った書込装置

ピン 信号
GND GND
52 SCK
50 MISO
51 MOSI
10 RST
5V VCC

次の接続方法も同等の配線となります。

ピン 信号
ICSP 1 MISO
ICSP 2 VCC
ICSP 3 SCK
ICSP 4 MOSI
10 RST
ICSP 6 GND

See Also:


Arduino DUE を使った書込装置

※ Arduino DUE は 3.3V です。

ピン 信号
SPI 1 MISO
SPI 2 VCC
SPI 3 SCK
SPI 4 MOSI
10 RST
SPI 6 GND

See Also:


STM32F103 (BluePill) を使った書込装置

※ STM32F103 (BluePill) は 3.3V です。

ピン 信号
G GND
3.3 VCC
PA7 MOSI
PA6 MISO
PA5 SCK
PA4 RST

See Also:


micro:bit を使った書込装置

※ micro:bit は 3.3V です。

ピン 信号
2 RST
13 SCK
14 MISO
15 MOSI
3V VCC
GND GND

See Also:



自動リセット回路の無効化

ATMega328P (Uno / Pro Mini / Nano) や ATMega2560 (Mega 2560) が載っているボードを Arduino as ISP として使う場合、自動リセット回路を無効にしなければ正しく動作しない事があります

この場合、ボードのパターンカットを行うのは現実的ではないので、RESET<->GND 間に 10μF~22μF のコンデンサを入れて対処します。

コンデンサを入れたままだと Arduino ISP が書き込めませんので、Arduino as ISP にした後で (スケッチを書き込んだ後で) コンデンサを入れます。

See Also:



ターゲット

ブートローダーが書き込まれるターゲットの設定です。


ターゲットが Uno / Nano / Leonardo / Micro / Mega2560 の場合

ICSP 端子を持つボードの場合には単純に ICSP 端子に接続すればいいです。オス<->メス や メス<->メス のジャンパーワイヤーがあると便利です。

ターゲットボードが Nano や Micro の場合は一番ピンの位置に気を付けてください。

See Also:


ターゲットが Pro Mini の場合

Pro Mini の場合には以下のような接続になります。

ピン 信号
GND GND
RST RST
VCC VCC
13 SCK
12 MISO
11 MOSI

※ボードの電圧 (5V / 3.3V) に注意してください。

See Also:


ターゲットが Pro Micro の場合

Pro Micro の場合には以下のような接続になります。

ピン 信号
GND GND
RST RST
VCC VCC
15 SCK
14 MISO
16 MOSI

※ボードの電圧 (5V / 3.3V) に注意してください。

See Also:


ターゲットが ATtiny85 の場合

ATtiny85 の場合には以下のような接続になります。

ピン 信号
1 RST RST
4 GND GND
8 VCC VCC
7 SCK / D2 / A1 SCK
6 MISO / D1 MISO
5 MOSI / D0 MOSI

ATtiny 開発ボードを使えば ICSP 端子で接続できます。

※ Arduino IDE にボードの追加が必要です。

See Also:


ブートローダーの書込

以下の手順でブートローダーを書き込みます。

  1. 書込装置 (プログラマ) とターゲットを結線する (この記事の線の色は統一されているので、書込装置とターゲットで同じ色を結線すればいい)。
  2. 書込装置 に USB を繋ぎ、PC と接続する。ターゲットの電源は書込装置から供給するため、USB ケーブルは書込装置にしか接続しない事
  3. [ツール | ボード] でターゲットのボードを指定する。
  4. ボードによっては [ツール | プロセッサ] でターゲットの MCU / クロックを指定する。
  5. [ツール | シリアルポート] で書込装置のシリアルポートを指定する。USBasp を使っている時は設定不要。
  6. 例えば書込装置が LEONARDO、ターゲットが UNO の場合には以下のようになります、
  7. [ツール | 書込装置] を Arduino as ISP または Arduino as ISP 2 または Arduino as ISP (ATmega32U4) にする (書込装置の種類によって異なる。USBasp を使っている時は USBasp にする)。
  8. [ツール | ブートローダーを書き込む] でブートローダーを書き込む。

See Also:


ここにある情報が役に立って、「調べる手間が省けたからオマイに飯でもおごってやるよ」 というハートウォーミングな方がいらっしゃいましたら、下のボタンからどうぞ。

メニュー: