PSoC 3 で、 HID Bootloader を試す (4) [PSoC]
ここまで作成してきた Bootloader は、どんな場合でも、とりあえずブート用の通信が有効になります。 ブートの有無を制御できないでしょうか。
Bootloader のシーケンス
これまでの Bootloader のシーケンスでは、まず、ブート通信用のポートを開き、 Bootloader Host からの通信を待ちます。 Bootloadable が書き込まれていた場合には、既定の待ち時間が経過するまで、通信を待ち続けていました。 待ち時間は、デフォルトでは2秒でしたが、この実験では10秒に延長しています。
Bootloadable を書込んだ時に Bootloader Host の動きを観測すると、待ち時間を見ることができます。 PSoC 3 にリセットをかけた直後、 Bootloader Host の画面上のポートリストには、 "USB Human Interface Device (04B4_B71D)" が並びます。 ところが、10秒間、そのまま放っておくと、 "USB Human Interface Device (04B4_B71D)" の表示が消えて、 LED が点滅を開始します。
この動きを見て分かるように、ユーザが真に必要としている Bootloable の処理が始まるまで、10秒の待ち時間が生じてしまいます。 かといって、待ち時間を短くしてしまうと、 Bootloader Host からコマンドを送信する前に待ち時間を使い切って、書き込み動作を実行する事ができません。 USB の場合には、特に接続に手間取るので、2秒では短いと感じています。
今回の目標は、確実に Bootloader を呼び出し、かつ、 Bootloadable の起動までの時間を短くすることです。
タクトスイッチでブートに入れる
PSoC 3 のどこかにタクトスイッチが付いていれば、リセット時にタクトスイッチを操作することで Bootloadable ではなく Bootloader を呼び出す事ができます。 まずは、回路図上にタクトスイッチを接続するための Digital Input Pin を追加します。 ここでは、 P6[1] に接続されている "SW2" のタクトスイッチを使用します。 入力端子の Pull-Up 設定と P6[1] への端子割り当てをお忘れなく。
次に Bootloader コンポーネントで接続待ちを行わないように設定します。 具体的には、 Wait for command のチェックをはずします。
最後に、 "main.c" ファイルを変更して、 "SW2" が、リセット後 100ミリ秒の間、継続して押し続けられていたら、 Bootloader を呼び出すように変更します。 一方、 "SW2" スイッチが押されていない場合、ほぼ遅延なく、ユーザアプリケーションである Bootloadable プログラムが呼び出されます。 いずれの場合でも、 Bootloadable が書き込まれていない場合には、 Bootloadable が呼び出されます。
この方法では、タクトスイッチの追加が必要になってきます。 もちろん、アプリケーションで使用するスイッチを流用させることも出来ますが、その場合、機器のエンドユーザも Bootloader を呼び出すための操作が可能になってしまいます。 そのため、 Bootloader の呼び出しに複雑なシーケンスを組まなければならなくなり、ファームウェア開発が重くなる可能性もあります。
Bootloadable から Bootloader を呼び出せるようにする
上で実現した方法は、外部にタクトスイッチの実装が必要でした。 ハードウェアの追加なしに Bootloadable から Bootloader を呼び出すのが、次に述べる方法です。
まず、 Bootloadable プロジェクトの回路図で、 Bootloader を呼び出すためのタクトスイッチを配置します。 この例では、タクトスイッチと言うハードウェアを人間が操作する事をきっかけとして、 Boootloader を呼び出す動作を実現します。 実際のアプリケーションでは、ハードウェアを追加するまでも無く、 Bootloadable アプリケーションに Bootloader を呼び出す仕掛けを追加するだけで実現できます。
ファームウェアでは、メインループでタクトスイッチを監視して、2秒の間、継続して押されていたら、 API "Bootloadable_Load()" を呼び出して、 PSoC 3 のソフトウェアリセットの後、 Bootloader の通信待ちに入ります。
この方式を使うと、 Bootloader での通信待ちを行わないようにしていても、 Bootloadable を通じて、確実に Bootloader を呼び出す事ができます。 ただし、 Bootloadable からの Bootloader の呼び出しに失敗してしまうと、二度と Bootloadable を書き換えられなくなってしまいます。 そのために、 Bootloadable の開発には、細心の注意が必要になってきます。
参考文献
- AN73854 - PSoC® 3, PSoC 4, and PSoC 5LP - Introduction To Bootloaders
- AN73503 - USB HID Bootloader for PSoC® 3 and PSoC 5LP
関連文献
シリーズ最強!PSoC 3ボード+デバッグ・ボード: あのPSoCが生まれ変わった!アナログもディジタルも一新 (トライアルシリーズ)
- 作者: 古平 晃洋
- 出版社/メーカー: CQ出版
- 発売日: 2012/10/23
- メディア: 単行本
トランジスタ技術増刊 基板付き体験編ARM PSoCで作るMyスペシャル・マイコン 2013年 12月号 [雑誌]
- 作者:
- 出版社/メーカー: CQ出版
- 発売日: 2013/11/21
- メディア: 雑誌
開発編 ARM PSoCで作るMyスペシャル・マイコン (トライアルシリーズ)
- 作者: 圓山 宗智
- 出版社/メーカー: CQ出版
- 発売日: 2013/12/24
- メディア: 単行本
コメント 0