SSブログ

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

CY8CKIT-030

Bootloader を書込んで、 Bootloadable の書き込みまでできました。 今回は、 Bootloader サイズについて考えます。

Bootloader のサイズ

Bootloader のメモリ配置

Bootloader は、最初にフラッシュ ROM に書き込まれて、アプリケーションが書き込まれた後でも常駐し続けます。 常駐する時に、どのくらいのメモリ容量を占めているかを確認するために、 MAP ファイルを確認しました。

このファイルは、プロジェクトを Build する際にリンカが作成するファイルで、メモリのどの範囲を使用しているかがわかります。 この Bootloader プロジェクトの場合には、 CODECONST の二つのセグメントがフラッシュに配置され、合計 0x4814 (18,452) Byte の容量を消費しています。 なんと、 30% 近くの容量が、アプリケーションとは関係ない、 Bootloader で消費されているのです。 もったいない。

Bootloader が、これだけの容量を消費する理由は、他のプロトコルに比べると複雑な USB インターフェイスを使用したからです。 他のプロトコルを使えば、もっと小さくなります。 ただ、 USB を使いたいということであれば、いたしかたありません。 何とか、サイズを抑える方法を考えましょう。

コンパイルオプションで最適化する

最適化後のメモリマップ

コンパイルの結果を簡単に小さくするには、コンパイラの最適化オプションを指定します。 これまでの実験では、 Build Configuration を "Debug" にしたままで行ってきましたが、これを "Release" に変更してみます。 最適化レベルは、ライセンスを必要としない範囲で最高の "5" です。

すると、 0x37B5 (14,261) Bytes と 22% ほどの消費に抑えることができました。

外付け水晶発振子を使う

外付け水晶発振子を使用する

最初の Bootloader プロジェクトは、ホストから到着する USB 通信信号で PSoC の内蔵発振器の周波数を微調整していました。 これを外付けの水晶発振器を使う方式にしたらどうなるか、試してみました。 クロック設定画面で XTAL をイネーブルし、 IMO を XTAL から供給するように変更しています。


水晶発振子を使った場合のメモリマップ

変更後のコンパイル結果が、これです。 0x3816 (14,358) Bytes と、少し増えてしまいました。 逆効果だったようです。

Bootloader の機能を削減する

Bootloader の機能を削減

これまで、 Bootloader コンポーネントの設定は、通信コンポーネントの指定以外はデフォルトの値を使っていました。 設定ダイアログのうち、右側の Optional commands の部分は、追加機能として提供されているもので、必要が無ければ Bootloader に実装しなくてもかまいません。 そこで、 Bootloader のサイズを削減する事を目的として、すべてのチェックを外してみました。


機能を削減した場合のメモリマップ

その結果、サイズは 0x36CA (14,026) Bytes まで削減できました。 この設定で、 Bootloader Host を使おうとしましたが、使用できませんでした。 これは、このツールに必要なコマンドが実装されていないためです。


コマンドを三つだけ実装

Bootloader のデータシートによると、このツールを使うためには、最低限 Get flash size, Send data, Verify row の三つのコマンドが必要です。 そこで、これら三つのコマンドだけ実装して、サイズを確認してみました。


Bootloader Host に対応

その結果、 0x375D (14,173) Bytes となりました。 ちゃんと、 Bootloader Host で、書き込みも出来ました。 ただし、 Erase All だけは、コマンドが実装されていないので実行できませんでした。 このあたりが限界でしょうか。

Bootloadable は、どうなっているのか

Bootloadable のメモリマップ

ところで、 Bootloadable のメモリマップは、どの様になっているのでしょうか。 "Bootloadable001" プロジェクトのメモリマップを確認したところ、 CODECONST の両セグメントは、 0x3800 からの領域に割り当てられていました。 この PSoC 3 の場合、 256Bytes の row 単位でフラッシュ ROM の消去を行う事ができます。 そのため、 256Bytes の区切りである 0x3800 からの 0xC800 (51,200) Bytes のフラッシュ ROM が Bootloadable 用の領域として使用されます。

参考文献

関連文献

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

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

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

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

nice! 0

コメント 0

コメントを書く

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

トラックバック 0

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

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