So-net無料ブログ作成

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

CY8CKIT-030

PSoC 3 を題材に Bootloader の使い方を試します。 使用するハードウェアは、 CY8CKIT-030 です。

Bootloader って何だろう

通常、 PSoC のプログラミングを行う場合には、プログラマと呼ばれる専用のハードウェアが必要です。 PSoC 3 の開発を行う場合には、 MiniProg 3 と呼ばれるプログラマが使われ、プログラマを接続するための専用コネクタが基板上に装備されます。 プログラマを使う方法は、開発時には良いのですが、いったん、 PSoC が装置に組み込まれてしまうと、このコネクタにたどり着くことができません。 また、開発時にしか使わないコネクタなど、省略されてしまうこともしばしばです。

そこで、専用のコネクタを装備しなくても、どこかの既存の通信線を通じて PSoC のプログラムを行う方法があると便利です。 Bootloader は、専用のプログラマやコネクタを使わなくてもプログラムを行う事が出来る手法の一つです。


Bootloader システム

PSoC 3 で提供する Bootloader は、この図のように三つの部分から構成されます。


Application (Bootloadable)
ユーザが最終的に必要とするプログラムです。 このプログラムは、 Bootloader によってプログラムする事ができます。
Bootloader
Bootloader は、フラッシュ ROM に常駐するプログラムです。 このプログラム自体の役割は、 Bootloadable をフラッシュ ROM の残りの部分に書き込むことです。 また、システムのリセット直後に、 Bootloader として振る舞うか、 Bootloadable として振る舞うかの判断も行います。
Application File
Bootloader は、ホストと通信線を介して Bootloadable を受信し、フラッシュ ROM に書き込みます。 この時に使用されるフォーマットが、 Application File です。 Application File は、 PSoC Creator で簡単に作成する事ができます。

このモデルでは、 Bootloader を最初に作成して、そのあと、 Bootloadable を作成し、 Application File として配布します。 まずは、 Bootloader から作成します。

Bootloader プロジェクトを作成する

Bootloader プロジェクトの作成

Bootloader プロジェクトを作成するには、通常通りに PSoC Creator で新規プロジェクトを作成します。 その際に、通常のプロジェクトとは、異なる設定を行います。


  1. プロジェクト名とワークスペース名を明確に分ける

    通常、 Name: フィールドにプロジェクト名を記述すると、ワークスペース名には、そのコピーが入ります。 Bootloader を使用する場合には、通常、ひとつの Bootloader プロジェクトと複数の Bootloadable プロジェクトを共通のワークスペースに混在させて使用します。 ここでは、 "Design102" というワークスペースに "USB_Bootloader" というプロジェクトを作成しています。

  2. Application Type を指定する

    Application Type に "Bootloader" 指定します。 これにより、 Bootloader 用プロジェクトのひな形が使用されて、初期プロジェクトが作成されます。

指定したら、 OK をクリックして、プロジェクトを作成させます。

コンポーネントを準備する

コンポーネントを並べる

回路図が開いたら、通常のプロジェクトと同様に、必要なコンポーネントを並べていきます。 今回作成する Bootloader プロジェクトでは、 USBHID インターフェイスを用いて、プログラムを行うプログラムを作成します。 必要なのは、 Bootloader コンポーネントと USBFS コンポーネントです。 それぞれのインスタンス名を "Bootloader" および "USBFS" に変更します。

Bootloader コンポーネントの設定

Bootloader の設定

Bootloader コンポーネントでは、 Communication component フィールドに "USBFS" を指定します。 このフィールドで指定した通信機能を使ってホストとの通信を行います。

この設定画面では、もう一つ、変更した所があります。 それは、 Wait for command time (ms) フィールドで、 10000(10秒)に変更しています。 リセット直後、 Bootloader は、このフィールドで指定された待ち時間だけ、ホストからの接続要求を待ちます。 そして、時間切れになったら、 Bootloadable を呼び出して、通常のアプリケーションとしての動作に移行します。 ここで待ち時間を初期値の2000(2秒)から増やしたのは、後の実験で、 Bootloadable への移行時間を見えやすくするためです。

USBFS の設定

Bootloader設定の呼び出し

USBFS コンポーネントを設定するためには、一般にかなり深い知識が必要になってきます。 ところが、 Bootloader を作成するだけであれば、ユーザが苦労をする必要はありません。 それは、すでに、 Bootloader のための設定ファイルが用意されているからです。 設定画面で Import ボタンをクリックすると、設定ファイル選択ダイアログが開きます。


USB Bootloader 設定ファイルの選択

ここで選択するのは、 "bootloader.root.xml" というファイルで、 PSoC Creator のインストールディレクトリ配下の以下の場所にあります。

<PSoC Creator InstallDir>\psoc\content\cycomponentlibrary\CyComponentLibrary.cylib\USBFS_v2_60\Custom\template\

USBFS コンポーネントのバージョンは、お使いのコンポーネントのバージョンに合わせてください。


不要な設定の削除

これで、 Bootloader のための設定が追加されました。 まだ、 USBFS の初期設定が残されていますので、ふたつある "Device Descriptor" の上の方を選択し、 "Delete" ボタンをクリックして、削除しておきます。 これで、 USBFS コンポーネントの準備が出来ました。

クロックの設定

クロックの設定一覧

この Bootloader は、 USBFS を使用するために、厳密にクロックの設定を行う必要があります。 もちろん、 PSoC Creator であれば、簡単に設定できます。

Workspace Explorer から "USB_Bootloader.cydwr" を開いて、 "Clocks" タブを選択すると、このような画面が開きます。 二つばかり「赤いビックリマーク」が付いていますので、修正が必要です。 "Edit Clock..." をクリックして、クロック設定ダイアログを開きます。


クロック設定ダイアログ

クロック設定ダイアログでは、以下の4点を修正します。


  1. IMO

    IMO の設定を "24.000MHz ±4%" に変更します。 USB の規格で要求とされているのは、 4% どころではない、もっと高精度なクロックです。 ところが、 PSoC には、接続先の USB ホストに合わせて内部クロックを自動的に調整する機能が有ります。 この機能を生かすための設定が、 "24.000MHz ±4%" なのです。

  2. ILO

    ILO の設定を "100kHz" に変更します。 先に説明した IMO を USB ホストに合わせて調整する機能は、 ILO のタイミングで実行されます。 適切な範囲に調整するために、 ILO を "100kHz" に設定します。

  3. USB

    USB のチェックボックスをクリックして、 USB ブロックにクロックを供給します。 与えるクロックは、 IMO のクロックをクロックダブラに通した "IMOx2 - 48.000MHz" です。

  4. PLL

    PLL の出力周波数を "66MHz" に設定します。 USBFS コンポーネントを使用する場合、 USB に与えるクロックよりも速いクロックを "MASTER_CLK" に与える必要があります。 ここでは、 "48MHz" のクロックで十分という事になりますが、許容される最高周波数である "66MHz" を与えています。

これで、クロックの設定は、完了です。

コードを書く

main.c

コンポーネントが整ったら、次は、 "main.c" にソースコードを書きます。 ところが、ここでは、何もする必要がありません。 既に必要な記述 "CyBtLdr_Start();" が入っています。

ひとつだけ修正しなくてはならない個所が有りました。 "main()" の戻り値の型を "void" から "int" に変更しておいてください。 どうも、テンプレートの段階から間違っていたようです。

Bootloader の書き込み

Bootloader の書き込み

Bootloader は、通常のプロジェクトと同様に、プログラマを使って書き込みます。 CY8CKIT-030 の場合には、オンボードのプログラマを使って書き込むことができます。

Bootloader との通信

Bootloader と接続

書き込みが終わったら、接続してみましょう。 Bootloader と通信を行うためには、 USB コネクタを通信用のコネクタに接続しなおして、 PSoC Creator のメニュー "Tools"→"Bootloader Host..." で Bootloader Host というアプリケーションツールを呼び出します。

すると、上のスクリーンショットのように、 "USB Human Interface Device (04B4_B71D)" がポートリストに並びます。 この VID/PID は、 Bootloader の設定ファイルに記述されていたものです。 これで、 Bootloader プログラムと通信できるようになりました。

参考文献

関連文献

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

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

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

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

nice! 0

コメント 1

NO NAME

フリースタンディング環境ですから
main() はvoid のままでも問題なしです
by NO NAME (2014-06-16 17:08) 

コメントを書く

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

トラックバック 0

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

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