Arduinoのブートローダって何?(2)

このページをスマホなどでご覧になる場合は、画面を横長にする方が読みやすくなります。
目次へ  前のページへ (1) (2) 次のページへ
2014年02月02日 公開。

4.ブートローダが起動する条件

前回はArduinoのブートローダの仕組みの概略を説明しましたが、ここからは、もう少しブートローダの動作を詳しく説明します。

ブートローダはArduino Unoに内蔵されているマイコン(ATmega328P)にリセットが掛かると起動しますが、リセットが掛かる条件は次の3つが考えられます。

  1. パソコンがArduino Unoにスケッチを書き込もうとする時
  2. 電源が投入された時
  3. ユーザーがArduino Unoのリセットボタンを押した時

パソコンがArduino Unoにスケッチを書き込もうとする時は、USBポートから、マイコンにリセットを要求する信号を送ります。前のページで説明したとおり、Arduino Unoには、そのリセット要求を受けて、マイコンにリセットをかける回路が組み込まれています。それ以外にも、Arduino Unoの電源が投入された時や、ユーザーがリセットボタンを押した時にも、マイコンにリセットが掛かります。1~3のいずれのケースでもブートローダは起動しますが、1のケースと、2あるいは3のケースとでは、ブートローダの動作が異なります。

まず、1のケースについて説明します。

5.スケッチ書き込み時のブートローダの動作

スケッチを書き込む際のブートローダの動作を、時間順に説明します。

図6、スケッチの書き込みの手順(その1)
図6、スケッチの書き込みの手順(その1)

(1) パソコンがUSBポート経由でマイコンをリセット

ユーザーがArduino IDE上でスケッチをArduino Unoに書き込もうとすると、パソコンはUSBポートから、マイコンをリセットする要求信号を出します。USB-シリアル変換器が、その要求を受け、マイコンのリセット回路にリセット信号を送ります。

(2) ブートローダが起動しシリアル通信線を監視

マイコンにリセットが掛かると、フラッシュメモリ内のブートローダが起動します。ブートローダ(を実行しているCPU)は、シリアル信号線からスケッチが送られてこないか監視します。

図7、スケッチの書き込みの手順(その2)
図7、スケッチの書き込みの手順(その2)

(3) パソコンがスケッチをUSBポートから送信

パソコンは、スケッチをUSBポートから送信します。送信されたスケッチは、USB-シリアル変換器でシリアル信号に変換された後、マイコンのシリアルインターフェースに送られます。

(4) ブートローダがスケッチをシリアルインターフェースで受信し、フラッシュメモリに書き込む

シリアル信号線を監視していたブートローダ(を実行しているCPU)は、スケッチを受信すると、それをフラッシュメモリに書き込みます。その際、ブートローダを上書きしないように、フラッシュメモリ内の他の領域に書き込みます。また、元々スケッチがフラッシュメモリに書き込まれている場合は、そのスケッチに、パソコンから送られてきたスケッチを上書きします。

(5)フラッシュメモリに書き込まれたスケッチに実行を移す

受信したスケッチを全てフラッシュメモリに書き込むと、ブートローダは終了し、書き込んだスケッチに実行を移します。

注:上記手順の(3)と(4)は、便宜上別手順として書きましたが、実際には同時進行するものです。スケッチ全体を一度に転送すると、受信バッファとして使うRAMの容量が不足するため(Arduino UnoのRAMは2kBしかない)、スケッチを細かいパケットに分けて、何度も送信します。パケットの送信とフラッシュメモリへの書き込みを、スケッチ全部が転送し終わるまで繰り返します。

広告

6.電源投入時あるいはリセットボタン押下時のブートローダの動作

次に、電源がONになった時や、ユーザーがリセットボタンを押した時のブートローダの動作を、時間順に説明します。

図8、電源投入時またはリセットボタン押下時のブートローダの動作(その1)
図8、電源投入時またはリセットボタン押下時のブートローダの動作(その1)

(1) リセットによりブートローダが起動し、シリアル通信線を監視

電源がONになったか、リセットボタンが押されたことにより、マイコンにリセットが掛かり、ブートローダが起動します。起動したブートローダ(を実行しているCPU)は、シリアル信号線からスケッチが送られてこないか監視します。

図9、電源投入時またはリセットボタン押下時のブートローダの動作(その2)
図9、電源投入時またはリセットボタン押下時のブートローダの動作(その2)

(2) シリアル通信線からスケッチが送られてこないことを確認後、フラッシュメモリ内のスケッチに実行を移す

ブートローダはシリアル通信線からスケッチが送られてこないことを確認した後終了し、元々フラッシュメモリに書き込まれていたスケッチがある場合は、そのスケッチに実行を移します。

今回は、Arduino Unoのブートローダの動作を、時間の順に説明しました。次回は他の種類のArduinoの動作について、若干の説明をする予定です。続きを書くのはぼちぼちと。

目次へ  前のページへ (1) (2) 次のページへ

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

関連ページ

関連製品

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