工作>Arduinoブートローダ
はじめに
Arduinoを使うには「ブートローダ」というものが必要です. この記事ではそのブートローダの導入方法を紹介していきます.
ブートローダとは
ブートローダはイメージとしてはパソコンでいうOSみたいなものです. ブートローダが書き込まれていると, Arduinoという方式で簡単なプログラムでマイコンを動作させることができます.
本家Arduinoから販売されているもの(例:Arduino UNO)等はブートローダが書き込まれているのでそのまま使えますが,
- Arduino UNOのチップを交換したい
- ブートローダが書き込まれていないキット等で使いたい
という場合は新たにブートローダを書き込む必要が出てきます. ブートローダが書き込まれていないキットとは 秋月電子で販売されているマイコンボードキット などを指しています.
何が必要なのか
パターン1 : ブートローダが書き込まれているチップを持っている場合
この場合は, ブレッドボードなどを持っていればブートローダを簡単に書き込むことができます. 本ページに示す書き込み基板を作ると便利です.
パターン2 : ブートローダが書き込まれているチップを持っていない場合
この場合でもブートローダを書き込むことは可能です. ただし, 面倒です. BitBang法という手段や, やAVRISP mkIIを使う方法がありますがいずれも手間のかかる作業が必要ですし, 特に後者はAVRISP mkII自体3700円(秋月価格)するなど「手軽に」とは行きません.
以上より, 私からは「ブートローダ書き込み済のチップ」を購入する等をおすすめします. 1つだけでもそのチップがあれば, 以下に示す方法でコピーするような感覚でブートローダ書き込みチップを増やすことが可能です.
参考: SWITCHSCIENCE - Arduinoブートローダ書き込み済みATMega328P-PU
ブートローダ書き込み専用基板の製作
ブレッドボードやジャンパーピンなどを持っている方は Arduino - ArduinoISP の記事等にある回路で追加に何かを取り揃える事なくブートローダ書き込みができます.
しかし, 将来いくつかのチップを書く可能性がある場合はこの手段を取ることはあまりお勧めできません. ブートローダを書き込む毎に配線をする必要があり手間になるということと, 配線ミスによりマイコンを壊してしまう可能性があるということが理由です.
そこで私は「専用基板」を作ってしまえばいいだろうと思い, 製作に取り掛かりました. 以下で紹介していきます.
必要な部品
部品 | 参考 | 備考 | |||||
---|---|---|---|---|---|---|---|
名称 | 値 | 個 | 販売店 | 通販コード | 単価[円] | 計[円] | |
両面基板 | Cサイズ | 1 | 秋月 | P-03231 | 100 | 100 | (注)片面基板は不可 |
ICソケット | 28ピン300mil | 1 | P-01339 | 70 | 70 | ||
コンデンサ | 22pF | 2 | P-03620 | 5 | 10 | 1袋100円・20個入 | |
0.1uF | 2 | P-06165 | 4 | 8 | 1袋100円・25個入 | ||
水晶振動子 | 16MHz | 1 | P-08671 | 30 | 30 | ||
抵抗 | 10kΩ | 1 | R-25103 | 1 | 1 | 1袋100円・100個入 |
合計: 219円 (単価計算)
以下はオプションです. 母体となるマイコンにArduinoISPスケッチを書き込む際, 基板を外さずに使えるようスイッチをつけたり, LEDを光らせたい場合は以下が必要です. (なくてもブートローダは書けます)
部品 | 参考 | 備考 | |||||
---|---|---|---|---|---|---|---|
名称 | 値 | 個 | 販売店 | 通販コード | 単価[円] | 計[円] | |
スイッチ | 2回路2接点 | 1 | 秋月 | P-04028 | 90 | 90 | |
LED | 赤 | 2 | I-02320 | 10 | 20 | 好きな色・輝度をお選びください. | |
抵抗 | 1kΩ | 1 | R-25102 | 1 | 1 | 1袋100円・100個入 |
回路図
基本的には Arduino - ArduinoISP に準拠しています. 追加点はArduino UNO利用時に推奨されている10uFの取り付けと, オプションとしてLEDとスイッチが書かれています.
※クリックするとPDFファイルが表示されます.
注意点
- 図内番号 "JP1" はArduinoのボードのPOWER部分(左下)の番号です. 1番ピンがVinに, 6番ピンがRESETピンにあたります.
- 図内番号 "JP2" はArduinoのボードのJ1部分(左上)の番号です. 1番ピンがボードの8番ピンに, 8番ピンがAREFピンにあたります.
- C1とC2はバイパスコンデンサです. それぞれIC(ソケット)に近い場所に取り付けてください.
実装図
注意点
- 図中ではQF1(クリスタル・水晶振動子)は3ピンのものが指定されていますが, 利用するのは2ピンのものです.
- ハンダ付けをする際はTOP面(赤線)のジャンパーを先に取り付けてください.
製作の様子
書き込み方法
手順は以下の通りです.
- ArduinoのボードをUSBケーブルで接続する
- 製作したボードに書き込みたいチップを取り付ける
- 製作したボードをArduinoのボードに取り付ける
- Arduinoのボードにスケッチを書き込む
- ブートローダを書き込む
それでは各手順を説明します.
1. ArduinoのボードをUSBケーブルで接続する
※画像は 秋月電子基板利用Arduinoボード です.
2. 製作したボードに書き込みたいチップを取り付ける
ブートローダ書き込み済みのチップ(コピー元)をArduinoのボード側に取り付けます.
3. 製作したボードをArduinoのボードに取り付ける
※製作した基板にスイッチを取り付けていない方は手順3.と4.を入れ替えてください.
製作したボードをArduinoのボードに取り付けます. Arduino UNOなどの場合はピン数が合いませんが, 「右寄せ」で取り付けてください.
4. Arduinoのボードにスケッチを書き込む
スケッチを書きます. この際, スイッチはOFF(奥側)にしてください.
- ファイル
- スケッチの例
- ArduinoISP
書き込みに失敗する場合は, マイコンボードやシリアルポートの設定, 製作した基板のスイッチのON/OFFを確認してください. なお, Arduino UNOブートローダが書き込まれている場合は, マイコンボード設定をArduino UNOにする必要があります.
5. ブートローダを書き込む
スイッチをON(手前)にします. ここで, 製作したボード右側のLEDが点滅していたら前段階まで成功しています.
続いて, ブートローダを書き込みます.
書き込み装置を「Arduino as ISP」にし,
ブートローダを書き込みます. 「書き込みが完了しました」と表示されたら成功です.
エラー発生時
Double check connections and try again, or use -F to override this check.
→ 回路が間違っています. 配線を確認してください.
avrdude: stk500_getsync(): not in sync: resp=0x00
→ マイコンボードまたはシリアルポートの設定が間違っています.
ATmega168Pにブートローダを書き込む際の注意点
Arduinoのソフトウェアの記述の関係上, ATmega168Pへのブートローダでエラーが発生します. そこで, 定義文を書き換える必要があります.
C:\Program Files (x86)\Arduino\hardware\tools\avr\etc\avrdude.conf
メモ帳などで開きます.
#------------------------------------------------------------
# ATmega168
#------------------------------------------------------------
part
id = "m168";
desc = "ATMEGA168";
has_debugwire = yes;
flash_instr = 0xB6, 0x01, 0x11;
eeprom_instr = 0xBD, 0xF2, 0xBD, 0xE1, 0xBB, 0xCF, 0xB4, 0x00,
0xBE, 0x01, 0xB6, 0x01, 0xBC, 0x00, 0xBB, 0xBF,
0x99, 0xF9, 0xBB, 0xAF;
stk500_devcode = 0x86;
# avr910_devcode = 0x;
signature = 0x1e 0x94 0x06;
ここのsignatureの部分を
signature = 0x1e 0x94 0x0b;
と書き換えます. ブートローダを書き終えたら元に戻してください. (今後スケッチを書く時にエラーが発生します)
面倒な作業ですが, Arduinoのソフトウェア側が対応しないと出来ません... なお, ATmega328Pではこの問題は発生しません.
おまけ
基板加工機により, 「ブートローダ書き込み専用基板」を製作しました. 回路はFT232RLを利用した秋月電子の回路に, 当記事の回路を組み合わせたものです. チップを量産する方は一台作ってみてはいかがでしょうか.
困った時は
同じような方法でArduinoのブートローダを書こうとしている方は国内外多くいるので, エラーメッセージ等を検索するとだいたいは解決します. 力になれるかはわかりませんが, それでも分からないといった時は お問い合わせ-さささっ.jp にでも相談してください.