ここで、いきなりArduino Leonardoの話に変わります。事の発端は、最近買ったArduino Leonardoで、スケッチのアップロード(書き込み)に頻繁に失敗したことでした。
操作法は正しいはずなのに、スケッチの書き込み時に意味不明なエラーが出たり、「マイコンボードへの書き込みが完了しました。」というメッセージが出て、かつエラーは出ていないのに、スケッチが書き込めていないなどのトラブルが頻発しました。ネットを検索すると、スケッチが書き込めなくて困っている人は他にもいるようです。
Arduinoの公式サイトを調べていたところ、Arduino IDE 1.0.3のリリースノートに、次の様な気になる記述を見つけました。
* Fixed power-up-starts-bootloader in Leonardo (and derivative) bootloaders. (Kristian Lauszus) (https://github.com/arduino/Arduino/pull/118)
気になって、Kristian Lauszusという人の記事を読むと、"Improved Leonardo bootloader (new)"というタイトルの記事の中で、
The power-on reset detection didn't work properly, but has now been fixed.
With the original firmware my board always ran the bootloader. But the updated version works perfectly. The upload process (without needing to press the reset button) also works as intended.
との説明がありました。過去のログまで追いかけたわけではないので、問題の詳細は分かりませんが、どうやら古いバージョンのファームウェア(ブートローダー+α)のパワーオンリセットの検出に問題があり、ブートローダが意図しないタイミングで起動し、スケッチのアップロードがうまくいかなかったというような事が書いてあるようです。また、それらの問題は、新しいブートローダで解決されたとも書いてあります。
ひょっとしたら、私の購入したArduino Leonardoのブートローダは、問題のある古いバージョンかも知れないと思って、新しいブートローダに書き換えてみることにしました。Arduino IDE 1.0.3以降に新しいブートローダのHEXファイルが付いているようなので、私の手元にあるArduino IDE 1.0.5に付属のブートローダを書き込むと、ブートローダが問題対策済みの物に更新されるはずです。
この記事で書いてきたとおり、ATmega328PにArduino Unoのブートローダを書き込むために、ブートローダライタシールドを以前作りましたので、これを使えばArduino Leonardoのブートローダも更新できるはずです。そして、実際にArduino Leonardoのブートローダを更新したところ、スケッチの書き込みの失敗はぴたりとなくなりました。
それでは、Arduino Leonardoのブートローダを書き換える方法を説明します。
警告:これから説明する方法を、実際試してみられる方は、ブートローダの書き換えに失敗すると、ブートしなくなり、かつ二度とブートローダの書き換えの効かない状態になる可能性があるということに注意してください。DIPソケットがついたArduio Unoの場合は、たとえブートローダの書き込みや書き換えに失敗しても、ATmega328P-PUをDIPソケットから抜いて、新しい物に交換すれば、簡単に修理できました。しかし、Arduino Leonardoの場合、マイコン(ATmega32u4)が基板に表面実装されているため、特殊な工具や技術がないと、交換修理ができません。このように、ブートローダの書き込みに失敗して困ったことになっても、当方は一切責任を取りませんので、自己責任でお試しください。
まず、以下の物を用意してください。
以上のものが用意できたら、以下の手順で、Arduino Leonardoのブートローダを書き換えてください。
注:下の図ではCOM15を選んでいますが、皆さんの環境に合わせて、COM番号を選んでください。
ArduinoISPのスケッチが正常に書き込めると、HeartbeatのLEDが明るくなったり暗くなったりを繰り返します。
ブートローダライタシールドのICSP端子とArduino LeonardoのICSP端子の対応する番号のピン(1番ピン同士、2番ピン同士…)をそれぞれつなぎます。
なお、Arduino LeonadoのICSP端子の1番ピンには、小さな白い丸が目印として付いています。
ブートローダの書き込み中は、ProgrammingのLEDが点灯します。
しばらくすると、ブートローダが書き込めるはずです。
ブートローダの書き込みが終わったら、ProgrammingのLEDは消えます。
これでArduino Leonardoのファームウェアが新しいものに書き換えられたはずです。適当なスケッチを書き込んでみてブートローダの動作を確認してください。なお、ファームウェアの書き換え直後は、IDEのマイコンボードの設定がArduino Leonardoで、COMポートの設定がArduino Unoのポートという、ちぐはぐな状態になっているはずですので、注意してください。
ブートローダライタシールドを作るのが面倒だという方は、ブートローダライタシールドに相当する回路をブレッドボードで組んでもArduino Leonardoのブートローダの書き換えができますが、接触不良などでブートローダの書き換えに失敗する確率が上がりますので、ブレッドボードを使う書き換えはお勧めしません。
商品名 | Arduino Uno用ブートローダスケッチライタシールドキット | |
税抜き小売価格 | 1440円 | |
販売店 | スイッチサイエンス | |
サポートページ | Arduino Uno用ブートローダライタシールドキットサポートページ |
商品名 | Arduino用ブートローダ/スケッチライタキット | |
税抜き小売価格 | 3000円 | |
販売店 | スイッチサイエンス | |
サポートページ | Arduino用ブートローダ/スケッチライタキットサポートページ |
商品名 | Arduino用ブートローダ/スケッチライタ(完成品) | |
税抜き小売価格 | 3600円 | |
販売店 | スイッチサイエンス マルツ | |
サポートページ | Arduino用ブートローダ/スケッチライタ(完成品)サポートページ |