SSブログ

PSoC 40xx に Bootloader を導入してみた [PSoC]このエントリーを含むはてなブックマーク#

PSoC 40xx 実験中

PSoC に 40xx シリーズなるものが出てきました。 本当に使えるんだろうかていうぐらい内部リソースを削られてしまっています。 そんなリソースの無い PSoC 40xx シリーズで、 Bootloader は使えるのか、また、使う意味が有るのだろうか検証してみます。

PSoC 40xx のメモリ容量

PSoC 40xx シリーズには、いくつか種類が有ります。 現在のところ、 CY8C4013 と CY8C4014 という番号にサフィックスが付いた型番になっています。 Flash ROM のサイズは、 CY8C4013 が 8kB で、 CY8C4014 が 16kB になっています。 Bootloader が使用可能であるかを検証するためには、 8kB の CY8C4013 で試さなくてはならないでしょう。 ここでは、8ピン SOIC の CY8C4013SXI-410 を題材に使います。

Bootloader で使用可能な通信インターフェイス

PSoC 40xx のブロック図

Bootloader に対応したプロジェクトの作成手順は、 PSoC 3 等の他の PSoC と同様です。 PSoC CreatorApplication Type を指定してプロジェクトを作成し、 Bootloader または Bootloadable コンポーネントを配置するだけです。 問題になりそうなのは、 Bootloader で使用する通信線をどこに確保するか、 Bootloader を入れたら Bootloadable アプリケーションが入る隙間が無くなるんじゃないかという点です。

PSoC 40xx シリーズでは、リソースを大胆に削ってしまったおかげで、使用可能な通信線は I2C しか残されていません。 そのため、自分で通信プロトコルを記述する以外では、 I2C のほかに選択肢がありません。 そのため、 Bootloader では、必然的に I2C を選ぶことになります。

コンポーネントとしては、ソフトウェア UART も存在しますが、この UART は、送信専用であるため、送受信の機能が必要な Bootloader には使用できません。 あきらめて、 I2C を使う事にしましょう。

Bootloader プロジェクト

Bootloader の回路図

通信線が決まった所で、 Bootloader プロジェクトを作成します。 Application TypeBootloader を指定してプロジェクトを作成したら、 I2C コンポーネントと Bootloader コンポーネントを配置します。

Bootloader コンポーネントで通信に使用するコンポーネントに I2C を選択したら、他はデフォルトのままにしておきます。

8ピン SOIC の場合、端子数が極端に限られてくるため、 I2C を選んだ時点で SWD によるデバッグをあきらめざるをえません。 CYDWR ファイルで、デバッグ端子の特性を GPIO するのをお忘れなく。

他には、 Bootloader を呼び出すためのスイッチと状態を表示させるための LED 端子とそれを駆動する PWM を配置しました。


Bootloader のコード

ソースコードには、リセット直後にスイッチが0.1秒以上の間押されていたら Bootloader を呼び出すコードを記述しました。 スイッチが押されていない場合には、可能であれば Bootloadable を呼び出します。

ソースコードの最初の方では、 I2C のポート "SCL" と "SDA" をプルアップ付きポートに設定しています。 これで、外付けプルアップ抵抗を省略する事ができます。 ところで、この設定は有効なのだろうか?


Debug 設定でビルド

プロジェクトをビルドしたところ、 "Debug" 設定のままでは Flash ROM の消費量が 8kiB を 184 バイトほど超えてしまいました。


Release 設定でビルド

そこで、 "Release" 設定で試したところ、消費量はで 4608 バイトとなりました。 どうやら、この CY8C4013 で Bootloader を使用する時には、 "Release" 設定を使用しなくてはならないようです。

Bootloadable プロジェクト

Bootloadable の回路図

Bootloader プロジェクトが出来たら、次は、 Bootloadable プロジェクトを作成します。 これも、 Bootloader と同様に Application TypeBootloadable を指定してプロジェクトを作成した後、 I2C コンポーネントと Bootloadable コンポーネントを配置します。

I2C コンポーネントは、配置はしましたが、アプリケーションでは使用しません。 Bootloadable コンポーネントでは、先ほどビルドした Bootloader プロジェクトの HEX ファイルおよび ELF ファイルを指定して、 Bootloader 側の情報を読み取らせます。

他には、 Bootloader を呼び出すためのスイッチと状態を表示させる LED 端子と駆動用 PWM を配置してあります。 見ためではわかりませんが、 LED の点灯パターンは、 Bootloader のパターンから変更しているので、 LED の点灯パターンを見て、現在の状態を判断する事ができます。


Bootloadable のコード

Bootloadable のソースコードでは、2秒以上スイッチが押されたら Bootloader を呼び出すコードを記述しました。 これで、リセットや電源遮断をすることなく、簡単に Bootloader を呼び出す事ができます。


Bootloadable のビルド

ビルドをすると、Flash ROM の消費量は 5912 バイトとなりました。 この容量には、 Bootloader の部分も含みますので、 Bootloadable の正味消費量は 1304 バイトです。 これなら、もっと色々な事ができそうです。

Bootloadable の書き込み

Bootloader Host でプログラム

Bootloadable がビルドできたら、 Bootloader Host アプリケーションを使って Bootloadable をプログラムします。 今回は、 I2C インターフェイスを使用するので、 USB-I2C ブリッジが必要です。 てもとに適当な USB-I2C ブリッジが無いので MiniProg3 で書き込みます。


実験基板
どこでも開発できます

あれ? MiniProg3 が使えるんだったら、 Bootloader なんて必要ないんだな。

プロジェクトアーカイブ

この記事で作成したプロジェクトは、このファイルの拡張子を "zip" に変更すると再現できるようになります。

参考文書

AN86526 - PSoC® 4 I2C Bootloader
PSoC 4I2C インターフェイスを使用した Bootloader を使う方法について解説しています。

関連文献

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

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

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

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

nice! 0

コメント 0

コメントを書く

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

トラックバック 0

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

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