SSブログ

PSoC 3 で、 HID Bootloader を試す (4) [PSoC]このエントリーを含むはてなブックマーク#

CY8CKIT-030

ここまで作成してきた Bootloader は、どんな場合でも、とりあえずブート用の通信が有効になります。 ブートの有無を制御できないでしょうか。

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 の起動までの時間を短くすることです。

タクトスイッチでブートに入れる

タスクスイッチを追加した Bootloader

PSoC 3 のどこかにタクトスイッチが付いていれば、リセット時にタクトスイッチを操作することで Bootloadable ではなく Bootloader を呼び出す事ができます。 まずは、回路図上にタクトスイッチを接続するための Digital Input Pin を追加します。 ここでは、 P6[1] に接続されている "SW2" のタクトスイッチを使用します。 入力端子の Pull-Up 設定と P6[1] への端子割り当てをお忘れなく。


待ち時間なしの Bootloader

次に Bootloader コンポーネントで接続待ちを行わないように設定します。 具体的には、 Wait for command のチェックをはずします。


タクトスイッチ対応 main.c

最後に、 "main.c" ファイルを変更して、 "SW2" が、リセット後 100ミリ秒の間、継続して押し続けられていたら、 Bootloader を呼び出すように変更します。 一方、 "SW2" スイッチが押されていない場合、ほぼ遅延なく、ユーザアプリケーションである Bootloadable プログラムが呼び出されます。 いずれの場合でも、 Bootloadable が書き込まれていない場合には、 Bootloadable が呼び出されます。

この方法では、タクトスイッチの追加が必要になってきます。 もちろん、アプリケーションで使用するスイッチを流用させることも出来ますが、その場合、機器のエンドユーザも Bootloader を呼び出すための操作が可能になってしまいます。 そのため、 Bootloader の呼び出しに複雑なシーケンスを組まなければならなくなり、ファームウェア開発が重くなる可能性もあります。

Bootloadable から Bootloader を呼び出せるようにする

Bootloadable から Bootloader を呼び出す

上で実現した方法は、外部にタクトスイッチの実装が必要でした。 ハードウェアの追加なしに Bootloadable から Bootloader を呼び出すのが、次に述べる方法です。

まず、 Bootloadable プロジェクトの回路図で、 Bootloader を呼び出すためのタクトスイッチを配置します。 この例では、タクトスイッチと言うハードウェアを人間が操作する事をきっかけとして、 Boootloader を呼び出す動作を実現します。 実際のアプリケーションでは、ハードウェアを追加するまでも無く、 Bootloadable アプリケーションに Bootloader を呼び出す仕掛けを追加するだけで実現できます。


Bootloader を呼び出す Bootloadable ファームウェア

ファームウェアでは、メインループでタクトスイッチを監視して、2秒の間、継続して押されていたら、 API "Bootloadable_Load()" を呼び出して、 PSoC 3 のソフトウェアリセットの後、 Bootloader の通信待ちに入ります。

この方式を使うと、 Bootloader での通信待ちを行わないようにしていても、 Bootloadable を通じて、確実に Bootloader を呼び出す事ができます。 ただし、 Bootloadable からの Bootloader の呼び出しに失敗してしまうと、二度と Bootloadable を書き換えられなくなってしまいます。 そのために、 Bootloadable の開発には、細心の注意が必要になってきます。

参考文献

関連文献

開発編 ARM PSoCで作るMyスペシャル・マイコン (トライアルシリーズ)

開発編 ARM PSoCで作るMyスペシャル・マイコン (トライアルシリーズ)

  • 作者: 圓山 宗智
  • 出版社/メーカー: CQ出版
  • 発売日: 2013/12/24
  • メディア: 単行本

nice!(0)  コメント(0)  トラックバック(0)  このエントリーを含むはてなブックマーク#

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

トラックバックの受付は締め切りました

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。