しなぷすのハード製作記

Arduino Uno用ブートローダライタシールドの製作(3)

ツイート
シェア
このエントリーをはてなブックマークに追加
フォロー
目次へ  前のページへ (1) (2) (3) 次のページへ

6.Arduino Leonardoで、スケッチの書き込み時に問題発生

ここで、いきなり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のブートローダを更新したところ、スケッチの書き込みの失敗はぴたりとなくなりました

広告

7.Arduino UnoとブートローダライタシールドでArduino Leonardoのブートローダを書き換える方法

それでは、Arduino Leonardoのブートローダを書き換える方法を説明します。

警告:これから説明する方法を、実際試してみられる方は、ブートローダの書き換えに失敗すると、ブートしなくなり、かつ二度とブートローダの書き換えの効かない状態になる可能性があるということに注意してください。DIPソケットがついたArduio Unoの場合は、たとえブートローダの書き込みや書き換えに失敗しても、ATmega328P-PUをDIPソケットから抜いて、新しい物に交換すれば、簡単に修理できました。しかし、Arduino Leonardoの場合、マイコン(ATmega32u4)が基板に表面実装されているため、特殊な工具や技術がないと、交換修理ができません。このように、ブートローダの書き込みに失敗して困ったことになっても、当方は一切責任を取りませんので、自己責任でお試しください。

まず、以下の物を用意してください。

以上のものが用意できたら、以下の手順で、Arduino Leonardoのブートローダを書き換えてください。

【手順1】 ブートローダライタシールドをArduino Unoに装着し、SW1をAUTO RESET側に設定する。
写真8(再掲)、SW1をAUTO RESET側に設定
↑ 画像をクリックすると拡大
写真8(再掲)、SW1をAUTO RESET側に設定
【手順2】 Arduino UnoとパソコンをUSBケーブルで接続する。
【手順3】 ファイル→スケッチの例メニューからArduioISPのファームウェア(スケッチ)を開く
図13、ArduinoISPのスケッチを開く
図13、ArduinoISPのスケッチを開く
【手順4】 ツール→マイコンボードメニューでArduino Unoを選択する
図14、Arduino Unoを選択する
図14、Arduino Unoを選択する
【手順5】 ツール→シリアルポートメニューでArduino Unoのポート番号(COM番号)を指定する
図15、シリアルポートを選択する
図15、シリアルポートを選択する

注:下の図ではCOM15を選んでいますが、皆さんの環境に合わせて、COM番号を選んでください

【手順6】 Arduino UnoにArduinoISPのスケッチを書き込む
図16、スケッチを書き込む
図16、スケッチを書き込む

ArduinoISPのスケッチが正常に書き込めると、HeartbeatのLEDが明るくなったり暗くなったりを繰り返します。

図12(再掲)、Heartbeat LEDの点滅
図12(再掲)、Heartbeat LEDの点滅
【手順7】 ブートローダライタシールドのSW1をKILL RESET側に切り替える
【手順8】 ツール→マイコンボードメニューでArduino Leonardoを選択する
図17、Arduino Leonardoの選択
図17、Arduino Leonardoの選択
【手順9】 ブートローダライタシールドとArduino LeonardoのICSP端子同士をケーブルで接続する

ブートローダライタシールドのICSP端子とArduino LeonardoのICSP端子の対応する番号のピン(1番ピン同士、2番ピン同士…)をそれぞれつなぎます。

写真15、ICSP端子同士をケーブルで接続
↑ 画像をクリックすると拡大
写真15、ICSP端子同士をケーブルで接続

なお、Arduino LeonadoのICSP端子の1番ピンには、小さな白い丸が目印として付いています。

写真16、ICSP端子の1番ピンの印
↑ 画像をクリックすると拡大
写真16、ICSP端子の1番ピンの印
【手順10】 ツール→書き込み装置メニューでArduino as ISPを選ぶ
図18、Arduino as ISPを選択
図18、Arduino as ISPを選択
【手順11】 ツール→ブートローダを書き込むメニューを選び、Arduino Leonardoにブートローダーを書き込む
図19、ブートローダを書き込む
図19、ブートローダを書き込む

ブートローダの書き込み中は、ProgrammingのLEDが点灯します。

写真17、ProgrammingのLEDの点灯
写真17、ProgrammingのLEDの点灯

しばらくすると、ブートローダが書き込めるはずです。

図20、書き込み終了時のメッセージ
図20、書き込み終了時のメッセージ

ブートローダの書き込みが終わったら、ProgrammingのLEDは消えます。

写真18、ProgrammingのLEDの消灯
写真18、ProgrammingのLEDの消灯
【手順12】 ICSP端子に接続していたケーブルをはずす

これでArduino Leonardoのファームウェアが新しいものに書き換えられたはずです。適当なスケッチを書き込んでみてブートローダの動作を確認してください。なお、ファームウェアの書き換え直後は、IDEのマイコンボードの設定がArduino Leonardoで、COMポートの設定がArduino Unoのポートという、ちぐはぐな状態になっているはずですので、注意してください。

ブートローダライタシールドを作るのが面倒だという方は、ブートローダライタシールドに相当する回路をブレッドボードで組んでもArduino Leonardoのブートローダの書き換えができますが、接触不良などでブートローダの書き換えに失敗する確率が上がりますので、ブレッドボードを使う書き換えはお勧めしません

ツイート
シェア
このエントリーをはてなブックマークに追加
フォロー
目次へ  前のページへ (1) (2) (3) 次のページへ

このページで使われている用語の解説

関連ページ

関連製品

Arduino Uno用ブートローダスケッチライタシールドキット 商品名 Arduino Uno用ブートローダスケッチライタシールドキット
税抜き小売価格 1200円
販売店 スイッチサイエンス
サポートページ
Arduino用ブートローダ/スケッチライタキット 商品名 Arduino用ブートローダ/スケッチライタキット
税抜き小売価格 2200円
販売店 スイッチサイエンス 妙楽堂
サポートページ
このサイトの記事が本になりました。
書名:Arduino 電子工作
ISBN:978-4-7775-1941-5
工学社の書籍の内容の紹介ページ
本のカバーの写真か書名をクリックすると、Amazonの書籍購入ページに移動します。
サイトマッププライバシーポリシーお問い合わせ用語集
しなぷすのハード製作記