C
Infineon ボードのフラッシュ手順
注: フラッシュ・プログラミングは完全に自動化できます。詳細については、OpenOCDベースのプログラミングを参照してください。
はじめに
内部および外部フラッシュ・メモリをプログラムする方法は複数あります。内部フラッシュメモリは、必要な基本プロトコルを実装したアプリケーションを使用して、SWDまたはJTAG接続でプログラムすることができます。Infineon TRAVEO T2G開発ボードの一部には、MCUのSWDピンに接続されたKitProgプログラマが搭載されています。
KitProgまたはMiniProgソリューションが使用されている場合、パッケージはプログラミングに活用できます。 Infineon/openocd">Infineon OpenOCD-basedパッケージをプログラミングに活用できます。これには、ModusToolbox Programming Toolsと Auto Flash Utilityの両方が含まれます。その他のSWDまたはJTAGベースのソリューションの場合、サードパーティ・ベンダーのIDEやデバッガも通常使用できます。
注: SWDとJTAGのどちらかを選択する場合、これら2つのプロトコルで最大定格クロック速度が異なることに注意してください。また、トレースやケーブルの物理的な長さも最大クロック速度に影響します。サポートされている評価ボードで作業する場合、SWDの標準的なクロック速度は10MHzで、JTAGのそれは50MHzです。
シリアル・メモリ・インターフェース(SMIF)デバイスのような外部メモリ・デバイスのプログラ ミングはより複雑です。一般的なアプローチは、デバイス上にサポート・アプリケーションをロードし、MCU自体から外部デバイスをプログラムすることです(つまり、デバッグ・プロトコルでデータを転送するだけです)。TRAVEO T2Gファミリシリーズの多くの開発ボードでは、このような機能はプログラミングツールによってすぐに提供されます。
OpenOCDベースのプログラミング
Infineon-固有のOpenOCDアプリケーションは、以下のソフトウェアパッケージから入手可能ですが、これに限定されません:
- ModusToolbox プログラミングツール
- Infineon オートフラッシュユーティリティ
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 はツール・コマンド言語(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_c2d_6m.cfg |
| トラベオT2G CYT4DL(6M[327-BGA-REV-B) | target/traveo2_c2d_6m_b1.cfg |
| トラベオT2G CYT4DL (6M DDR) | target/traveo2_c2d_6m_ddr.cfg |
プログラミング・コマンド
プログラミング・コマンドは、OpenOCD に組み込まれている個々の関数か、ベンダーが提供する Tcl スクリプトです。
| アクション | コマンド |
|---|---|
| トランスポートとして 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 CYT3DL (6M [327-BGA-REF]) |
|
| トラベオT2G cyt4dl(6m[327-bga-rev-b) |
|
| トラベオ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には多くのオプションがありますが、一般的なアプリケーションで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 環境変数が存在しない場合は、手動で追加できます。