2014年02月02日 | 公開。 |
前回はArduinoのブートローダの仕組みの概略を説明しましたが、ここからは、もう少しブートローダの動作を詳しく説明します。
ブートローダはArduino Unoに内蔵されているマイコン(ATmega328P)にリセットが掛かると起動しますが、リセットが掛かる条件は次の3つが考えられます。
パソコンがArduino Unoにスケッチを書き込もうとする時は、USBポートから、マイコンにリセットを要求する信号を送ります。前のページで説明したとおり、Arduino Unoには、そのリセット要求を受けて、マイコンにリセットをかける回路が組み込まれています。それ以外にも、Arduino Unoの電源が投入された時や、ユーザーがリセットボタンを押した時にも、マイコンにリセットが掛かります。1~3のいずれのケースでもブートローダは起動しますが、1のケースと、2あるいは3のケースとでは、ブートローダの動作が異なります。
まず、1のケースについて説明します。
スケッチを書き込む際のブートローダの動作を、時間順に説明します。
(1) パソコンがUSBポート経由でマイコンをリセット
ユーザーがArduino IDE上でスケッチをArduino Unoに書き込もうとすると、パソコンはUSBポートから、マイコンをリセットする要求信号を出します。USB-シリアル変換器が、その要求を受け、マイコンのリセット回路にリセット信号を送ります。
(2) ブートローダが起動しシリアル通信線を監視
マイコンにリセットが掛かると、フラッシュメモリ内のブートローダが起動します。ブートローダ(を実行しているCPU)は、シリアル信号線からスケッチが送られてこないか監視します。
(3) パソコンがスケッチをUSBポートから送信
パソコンは、スケッチをUSBポートから送信します。送信されたスケッチは、USB-シリアル変換器でシリアル信号に変換された後、マイコンのシリアルインターフェースに送られます。
(4) ブートローダがスケッチをシリアルインターフェースで受信し、フラッシュメモリに書き込む
シリアル信号線を監視していたブートローダ(を実行しているCPU)は、スケッチを受信すると、それをフラッシュメモリに書き込みます。その際、ブートローダを上書きしないように、フラッシュメモリ内の他の領域に書き込みます。また、元々スケッチがフラッシュメモリに書き込まれている場合は、そのスケッチに、パソコンから送られてきたスケッチを上書きします。
(5)フラッシュメモリに書き込まれたスケッチに実行を移す
受信したスケッチを全てフラッシュメモリに書き込むと、ブートローダは終了し、書き込んだスケッチに実行を移します。
注:上記手順の(3)と(4)は、便宜上別手順として書きましたが、実際には同時進行するものです。スケッチ全体を一度に転送すると、受信バッファとして使うRAMの容量が不足するため(Arduino UnoのRAMは2kBしかない)、スケッチを細かいパケットに分けて、何度も送信します。パケットの送信とフラッシュメモリへの書き込みを、スケッチ全部が転送し終わるまで繰り返します。
次に、電源がONになった時や、ユーザーがリセットボタンを押した時のブートローダの動作を、時間順に説明します。
(1) リセットによりブートローダが起動し、シリアル通信線を監視
電源がONになったか、リセットボタンが押されたことにより、マイコンにリセットが掛かり、ブートローダが起動します。起動したブートローダ(を実行しているCPU)は、シリアル信号線からスケッチが送られてこないか監視します。
(2) シリアル通信線からスケッチが送られてこないことを確認後、フラッシュメモリ内のスケッチに実行を移す
ブートローダはシリアル通信線からスケッチが送られてこないことを確認した後終了し、元々フラッシュメモリに書き込まれていたスケッチがある場合は、そのスケッチに実行を移します。
今回は、Arduino Unoのブートローダの動作を、時間の順に説明しました。次回は他の種類のArduinoの動作について、若干の説明をする予定です。続きを書くのはぼちぼちと。
商品名 | Arduino Uno用ブートローダスケッチライタシールドキット | |
税抜き小売価格 | 1440円 | |
販売店 | スイッチサイエンス | |
サポートページ | Arduino Uno用ブートローダライタシールドキットサポートページ |
商品名 | Arduino用ブートローダ/スケッチライタキット | |
税抜き小売価格 | 3000円 | |
販売店 | スイッチサイエンス | |
サポートページ | Arduino用ブートローダ/スケッチライタキットサポートページ |