C
Infineon ボードのフラッシュ手順
注:フラッシュプログラミングは 完全に自動化可能です。詳細については、「OpenOCD ベースのプログラミング」を参照してください。
はじめに
内部および外部フラッシュメモリのプログラミングには、複数の方法があります。内部フラッシュメモリは、必要な基盤プロトコルを実装した任意のアプリケーションを使用し、SWDまたはJTAG接続を介してプログラミングできます。Infineon のTRAVEO T2G開発ボードの一部には、MCUのSWDピンに接続されたオンボードのKitProgプログラマが搭載されています。
KitProgまたはMiniProgソリューションを使用する場合は、 Infineon/openocd">Infineon OpenOCD-based パッケージを活用してプログラミングを行うことができます。これには、ModusToolboxプログラミングツールとAuto Flash Utilityの両方が含まれます。その他のSWDまたはJTAGベースのソリューションについては、通常、サードパーティベンダー製のIDEやデバッガも使用可能です。
注: SWDとJTAGのどちらを選択する場合でも 、これら2つのプロトコルでは最大定格クロック速度が異なる点に注意してください。また、配線やケーブルの物理的な長さも最大クロック速度に影響を与えます。サポートされている評価ボードを使用する場合、SWDの標準的なクロック速度は10 MHz、JTAGの場合は50 MHzです。
シリアルメモリインターフェース(SMIF)デバイスなどの外部メモリデバイスのプログラミングは、より複雑です。一般的なアプローチとして、デバイスにサポートアプリケーションをロードし、MCU自体から外部デバイスをプログラミングする方法があります(つまり、デバッグプロトコルを介してデータのみを転送します)。 TRAVEO T2Gファミリーシリーズの多くの開発ボードでは、この種の機能がプログラミングツールに標準で備わっています。
OpenOCDベースのプログラミング
Infineon 専用のOpenOCDアプリケーションは、以下のソフトウェアパッケージなどから入手できます(これらに限定されません):
- ModusToolbox プログラミングツール
- Infineon Auto Flash Utility
OpenOCDアプリケーションは、各ソフトウェアのインストール先のopenocd/bin ディレクトリ内にあります。サポート用スクリプトはopenocd/scripts ディレクトリにあります。openocd/scripts/interface ディレクトリにはデバッグプローブ用のスクリプトが、openocd/scripts/target ディレクトリには実際のターゲット用スクリプトが含まれています。
注: Infineon にあるカスタマイズ済みの OpenOCDは 、アップストリームの OpenOCD ディストリビューションとは異なる場合があり、追加のソースが含まれている可能性があります。
注: OpenOCD バイナリディレクトリがシステムパスに追加されている場合 、または上記のソフトウェアパッケージがそれぞれのデフォルトのインストール場所にインストールされている場合 、ブートローダーを含むすべてのQt Quick Ultralite ターゲットに対して、適切なフラッシュ用ターゲットが追加されます。例として、minimal 用のflash_minimal があります。このターゲットを使用すると、ターゲットバイナリとともに OpenOCD が起動されます。
プログラミング手順
フラッシュプログラミングの手順は以下の通りです:
- 選択したSWDまたはJTAGプローブと連携する適切なスクリプトを選択します。
- 必要に応じて、外部メモリデバイスのプログラミングを処理する適切なユーティリティアプリケーションを選択します。
- ターゲットと通信する適切なスクリプトを選択します。
- 目的のアプリケーション(またはブートローダ)を選択し、それに対するプログラミングコマンドを実行します。
内部メモリであれ外部メモリであれ、同じメモリデバイスが複数のコア間で共有される場合、特にフラッシュベースのストレージでは、以前に書き込まれたデータを最初に消去しなければならないことを覚えておくことが重要です。 消去操作の最小セクタまたはブロックサイズは、通常、対応する書き込みブロックサイズよりも大きくなります。したがって、ELF などの複数のバイナリファイルからアプリケーション(およびブートローダ)をプログラミングする場合、消去ブロック同士が重複しないようにする必要があります。プログラミングツールはデータの消去と書き込みのみを行い、データを統合することはありません。
注: ELFをバイナリコンテナとして使用する場合 、埋め込まれたデバッグセクションは適切に処理され、実際のデバイスには書き込まれません。これにより、デバッガ用にELFファイル内のデバッグシンボルをそのまま残すことができるため、プログラミング手順が簡素化されます。
一般的に、OpenOCDはTool Command Language(Tcl)プログラミング言語を使用して操作されます。コマンドは、既存のスクリプトファイル、コマンドライン、あるいはこれらの組み合わせから指定することができます。
注: OpenOCDのコマンドライン引数の引用符の扱いには注意してください 。パスについては、バックスラッシュではなくスラッシュを使用してください。空白で区切られたパラメータを伴うTclコマンドを呼び出す場合は、コマンド呼び出し全体を引用符で囲んでください。したがって、-c "program minimal.elf" と-c program minimal.elf は同じものではありません。 後者の場合、program が引数なしで呼び出され、minimal.elf は Tcl コマンドとしてではなく、OpenOCD の引数として評価されてしまいます。
スクリプトとプログラミングコマンド
インターフェーススクリプト
選択したインターフェーススクリプトにより、目的のデバッグプローブが設定されます。
| プログラマ | スクリプト |
|---|---|
| KitProg3 または MiniProg4 | interface/kitprog3.cfg |
| J-Link プローブ | interface/jlink.cfg |
注: 上記に挙げたインターフェーススクリプトは あくまで一例です。サポートされているインターフェースの詳細については、interface ディレクトリまたはOpenOCDのドキュメントを参照してください。
デバイススクリプト
選択したデバイススクリプトは、フラッシュアドレスやレジスタ位置など、対象デバイスの必要なプロパティを設定します。
| ボード | スクリプト |
|---|---|
| TRAVEO T2G CYT3DL (4M および 4M LITE KIT) | target/traveo2_c2d_4m.cfg |
| TRAVEO T2G CYT4DL (6M [327-BGA-REF] および 6M LITE KIT) | target/traveo2_6m.cfg |
| TRAVEO T2G CYT4DL (6M [327-BGA-REV-B]) | target/traveo2_6m_b1.cfg |
| TRAVEO T2G CYT4EN (6M DDR) | target/traveo2_6m_ddr.cfg |
プログラミングコマンド
プログラミングコマンドには、OpenOCDに組み込まれている個別の関数と、ベンダーが提供するTclスクリプトの2種類があります。
| アクション | コマンド |
|---|---|
| 転送方式として SWD を選択します。 | transport select swd |
minimal.elf をプログラムし、プログラミングが成功したことを確認してから、最後に終了します。 | program minimal.elf verify exit |
注: program コマンドは 、暗黙的にinit およびreset init の両方を呼び出します。program スクリプトの詳細については、OpenOCDソースパッケージ(src/flash/startup.tcl )で確認できます。
外部メモリデバイスにおける OpenOCD ベースのプログラミング
一般的に、外部SMIFメモリデバイスのプログラミングには、専用のローダーアプリケーションを使用する必要があります。ローダーアプリケーションは、SMIF0_LOADER およびSMIF1_LOADER 変数を定義することで選択できます。以下のリストはすべてを網羅しているわけではありません。サポートされているSMIFローダーは、通常、target/traveo_c2d_4m.cfg などの選択したデバイススクリプトに記載されています。
注: 以前のバージョンのデバイススクリプトでは、 ENABLE_SEMPERFLASH_0 、ENABLE_SEMPERFLASH_1 、ENABLE_HYPERFLASH_0 、またはENABLE_HYPERFLASH_1 変数を使用してローダーが選択されていました。これらは非推奨となっており、今後使用しないでください。
注: 外部メモリデバイスをプログラムする際は 、MCUがこれらのデバイスを初期化および有効化していることに留意してください。プログラミング完了後にデバイスが初期化解除されるか、あるいは電源がオフになるかは、個々の実装の詳細によって異なります。したがって、その後のリセット信号がこれらの外部デバイスにも適切に伝播されることを確認することが重要です。
そうしないと、メモリデバイスが、システム初期化コードによるプログラム記憶領域の制約によりサポートされていない、あるいは処理されない状態になるか、あるいはプログラムによって回復することが非常に困難な状態になる可能性があります。リセット信号を調整するには、さまざまな方法があります。例えば、OpenOCDの変数ADAPTER_SRST_DELAY およびADAPTER_SRST_PULSE を使用することができます。
SMIFローダー
| ボード | ローダー(SMIFチャネル) |
|---|---|
| TRAVEO T2G CYT3DL (4M および 4M LITE) |
|
| TRAVEO T2G CYT4DL (6M [327-BGA-REF]) |
|
| TRAVEO T2G CYT4DL (6M [327-BGA-REV-B]) |
|
| TRAVEO T2G CYT4EN (6M DDR) |
|
OpenOCDに関する詳細情報
OpenOCDを使用する際は、対応するOpenOCDのドキュメントおよび付属のスクリプトをよく確認することをお勧めします。一般的な設定のうち、プロトコルのリンク速度はADAPTER_SPEED 変数を設定することで変更できます。リセット設定は、reset_config コマンドを使用して変更できます。
注: リセット設定を正しく行うようにしてください 。TRAVEO T2Gファミリーのデバイスには、外部リセット(通常はXRST という名称)とJTAGテストリセット(通常はTRSTn という名称)の両方のピンがあります。ただし、これらのピンは同等ではありません。 デバッガはこれらのピンを個別に制御することが可能です。つまり、JTAG-AP 経由でアクセス可能なデバッグレジスタの書き込み中は MCU をリセット状態に保持し、書き込み完了後にのみ外部リセットを解除することができます。 しかし、多くの TRAVEO T2G 開発ボードの場合のように、これらのピンが相互に接続されていると、デバッグソフトウェアはデバッグレジスタへの書き込みが完了したと認識する一方で、実際には JTAG-AP を含むチップ全体がリセット状態に保たれているという状況が生じます。
OpenOCDの使用
選択肢は多数ありますが、一般的な用途では OpenOCD を使用するのが最も簡単です。以下の例では、ターゲットとして Traveo T2G 4M を使用しています。
openocd \
-f interface/kitprog3.cfg \
-c "set SMIF0_LOADER TV2_C2D_4M_SemperFlash_0.elf" \
-f target/traveo2_c2d_4m.cfg \
-c "program <PATH_TO_BINARY>/minimal.elf verify exit"openocd ^
-f interface/kitprog3.cfg ^
-c "set SMIF0_LOADER TV2_C2D_4M_SemperFlash_0.elf" ^
-f target/traveo2_c2d_4m.cfg ^
-c "program <PATH_TO_BINARY>/minimal.elf verify exit"高度な使い方
-c や-f といった引数を複数指定する代わりに、操作を実行するTclスクリプトを作成することも可能です。以下のスクリプトは、上記のコマンドとまったく同じ動作をします。
source [find interface/kitprog3.cfg] # Similar as `-f` argument.
transport select swd
set SMIF0_LOADER TV2_C2D_4M_SemperFlash_0.elf
source [find traveo2_c2d_4m.cfg]
program <PATH_TO_BINARY>/minimal.elf verify exit詳細についてはOpenOCDのドキュメントを参照してください。デフォルトでは、OpenOCDはスクリプトファイルを検索する際にいくつかの異なるディレクトリを調べます。したがって、これらのデフォルトの検索ディレクトリにスクリプトを追加しておけば、コマンドラインではファイル名だけを指定するだけで済みます。これらのディレクトリには、以下が含まれます(ただし、これらに限定されません):
- 現在のディレクトリ、
- ホームディレクトリ、および
%HOME%\.openocd%APPDATA%\OpenOCD(Windowsのみ)
- OpenOCDのインストールディレクトリ内にある
scriptsディレクトリ。
注:Windowsでは 、デフォルトではHOME 環境変数が存在しない場合があります。OpenOCDは、デフォルトのインクルードパスをコンパイルする際、USERPROFILE 、HOMEDRIVE 、およびHOMEPATH の各環境変数からこの変数を生成しません。ただし、HOME 環境変数が存在しない場合は、手動で追加することができます。
特定の Qt ライセンスの下で利用可能です。
詳細はこちら。