ブータブル・イメージは以下で構成されています。
以下、それぞれについて簡単に説明します。
FCBはFlexSPIの通信の設定を構成します。使用するポートの数、FlexSPIコントローラの動作クロック速度などを設定します。最初に行われるのはこの設定です。それ以外のものはすべてフラッシュ・メモリに保存されているためです。他のものを読み取るために、まずフラッシュを設定する必要があります。
IVTは、すべてのものが格納されているアドレスをメモリに伝えるテーブルです。
ブートデータには、メモリの開始アドレスへのポインタが含まれています。
DCDには、ペリフェラルを設定するための設定データが含まれています。
プログラム・イメージには、アプリケーションに組み込むように記述したコードが含まれています。
これらはオプションです。ハイ・アシュアランス・ブートのシーケンスで必要となります。この記事では説明しません。
ブート・イメージの各部分を大まかに示した概略図は次のとおりです。
MCUXpressoは、HyperflashおよびQSPI XiP用のブータブル・イメージを作成できますが、SDRAMまたは内部SRAMの場所から、あるいは独自のメモリ・モジュールからブートして実行する場合は、ブータブル・イメージを作成する必要があります。それには、MCUXpressoでSレコードまたはELFイメージを生成し、次にフラッシュローダ・ツール・スイート(elftosbおよびmfgtool)を使用してブータブル・イメージを作成したうえで、ボードにアップロードするブータブル・プログラムを作成します。
以下、一般的なプロセスの全体の流れを説明します。その後のセクションでは、Hyperflash XiP、SDRAM、SRAMのそれぞれについて、より詳細なステップ・バイ・ステップ・ガイドを示します。
まずは、MCUXpressoでアプリケーション・コードを準備します。MCUXpressoの [MCU Settings(MCU設定)] 部分のメモリ構成エディタで、起動元に合わせてメモリ割り当てを変更します。必要に応じて、ブート・イメージでdcdを有効にするかどうかをプリプロセッサ設定で指定します。
バイナリ・ユーティリティを使用して、MCUXpressoからSレコード(.s19)ファイルを生成します。
このツールはフラッシュローダに含まれています。imxコマンドを呼び出すときに、プログラム・イメージを含むSレコード・ファイル、dcd.binファイル(Sレコードに含まれている場合もある)、FCB?、およびbd_file(メモリ構成に応じて提供される)を入力として渡します。elftosbツールは出力として.binファイルを生成します。
続いて、kinetisコマンドを指定してelftosbツールを再度呼び出します。これにより、.binファイルがboot_image.sbファイルに変換されます。
次に、MFGToolを使用してボードのプログラム・イメージを生成し、アップロードします。
そのためには、ボードのSW7をOFF-ON-OFF-ONに設定し、ジャンパをJ1(5-6)からJ1(3-4)に切り替える必要があります。USBケーブルをJ9に接続して、ボードに電力を供給します。次に、ボードをコンピュータに接続し、MFGToolを実行します。[Start(開始)] をクリックすると、イメージがアップロードされます。
この後、ブータブル・イメージがボードにアップロードされ、準備は完了です。
ボードが正常に起動できるように、ピン・ヘッダを必ず元に戻してください。Hyperflashから起動するには、J1(5-6)とSW7をOFF-ON-ON-OFFに設定します。
さて、次のセクションでは、起動したい特定のメモリ位置に応じて、何をすべきかの具体例を詳しく説明いたします。
これはMCUXpressoでも実行可能ですが、このプロジェクトの場合は、独自のdcdファイルを使用するために、従来のフラッシュローダ・ツールを使用しました。
まず、メモリ構成エディタでメモリ割り当てを変更するために、[Edit project settings(プロジェクト設定の編集)] >> [C/C++ Build(C/C++ビルド)] >> [MCU settings(MCU設定)] >> [Edit(編集)] を開きます。次のように表示されます。
次に、[C/C++ Build(C/C++ビルド)] >> [Settings(設定)] > [MCU C compiler(MCU Cコンパイラ)] > [Preprocessor(プリプロセッサ)] に移動します。使用するdcd.binファイルがある場合は、XIP_boot_header_enableとXIP_boot_header_DCD_enableの両方を0に設定します。ない場合は、これらのフィールドを1に設定します。
[Apply and Close(適用して閉じる)] をクリックします。
デバッグ部分に移動し、[Binary Utilities(バイナリ・ユーティリティ)] をクリックして、MCUXpressoからSレコード(.s19)ファイルを生成します。
[Build(ビルド)] をクリックして、プロジェクトを再ビルドします。
この.s19ファイルをコピーします。
フラッシュローダ・ツールで、[Tools(ツール)] > [elftosb] > [Win] に移動し、.s19ファイルとdcd.binファイルをこのフォルダにドロップします。
管理者モードでコマンド・プロンプトを起動し、「cd [elftosbディレクトリ]」コマンドを使用して、このフォルダに移動します。
.binファイルを生成するには、次のコマンドを呼び出します。
elftosb.exe -f imx -V -c ../../bd_file/imx10xx/imx-flexspinor-normal-unsigned-dcd.bd -o ivt_flexspi_nor_led_blinky.bin HYPERFLASH_led_blinky.s19
このコマンドは基本的に、imx-flexspinor bdリンカ・ファイルを使用して、内部にdcd.binヘッダを含む.binファイルを生成しています。HYPERFLASH_led_blinky.s19は、MCUXpressoから取得した実際のファイル名に変更する必要があります。
次に、boot_image.sbを生成する必要があります。
続いて、kinetisコマンドを指定してelftosbツールを再度呼び出します。これにより、.binファイルがboot_image.sbファイルに変換されます。
コマンドは次のとおりです。
elftosb.exe -f kinetis -V -c ../../bd_file/imx10xx/program_flexspinor_image_hyperflash.bd -o boot_image.sb ivt_flexspi_nor_led_blinky_nopadding.bin
注:最初に実行したimxコマンドの出力が、このコマンドの入力(ivt_flexspi_nor_led_blinky_nopadding.bin)と一致する必要があります。また、出力はboot_image.sbという名前のままにする必要があります。別の名前ではうまくいきません。
次に、MFGToolを使用してボードのプログラム・イメージを生成し、アップロードします。
そのためには、ボードのSW7をOFF-ON-OFF-ONに設定し、ジャンパをJ1(5-6)からJ1(3-4)に切り替える必要があります。USBケーブルをJ9に接続して、ボードに電力を供給します。次に、ボードをコンピュータに接続し、MFGToolを実行します。[Start(開始)] をクリックすると、イメージがアップロードされます。
最後の手順で作成した boot_image.sb ファイルをコピーしてください。それを Tools > mfgtools-rel > Profiles > MXRT105X > OS Firmware ディレクトリに移動し、ここにドロップしてください。
次に、ボード上のSW7をOFF-ON-OFF-ONに設定し、下部のジャンパを切り替えて、ボードに電源を供給します。次に、USBケーブルをJ9に接続します。これにより、ボードをプログラムできます。
mfgtools-relフォルダに戻り、MFGToolを開きます。[HID-compliant vendor-defined device(HID準拠のベンダ定義デバイス)] と表示されているはずです。表示されない場合は、SW7と右下の電源ピンを再確認します。
[Start(開始)] をクリックします。成功すると次のように表示されます。
ここで言う成功とは、ブータブル・イメージをボードにアップロードできたというだけの意味です。通常はこれで正常に動作します。しかし、後でボードが想定どおりに動作しなかった場合は、プロセッサの他のステップに問題がある可能性があります。正しいリンカ・ファイルを使用していることと、MCUXpressoの設定が正しいことを確認してください。
[Stop(停止)] を押して終了します。
ボードが正常に起動できるように、ピン・ヘッダを必ず元に戻してください。Hyperflashから起動するには、J1(5-6)とSW7をOFF-ON-ON-OFFに設定します。
このガイドは、https://community.nxp.com/docs/DOC-340655の内容に基づいています。そちらにあるファイルをダウンロードし、解凍します。問題はほとんどありませんが、PDFドキュメントの最初のステップだけは少し不明瞭です。
まず、MCUXpressoの [MCU Settings(MCU設定)] 部分のメモリ構成エディタで、メモリ割り当てを変更します。次のようになります。
次に、[Settings(設定)] > [MCU C compiler(MCU Cコンパイラ)] > [Preprocessor(プリプロセッサ)] に移動し、XIP_boot_header_enableとXIP_boot_header_DCD_enableの両方を0に設定します。
[Apply and Close(適用して閉じる)] をクリックします。
[C/C++ Build(C/C++ビルド)] >> [Settings(設定)] >> [MCU Linker(MCUリンカ)] >> [Manage linker script(リンカ・スクリプトの管理)] に移動し、[Link application to RAM(アプリケーションをRAMにリンク)] チェックボックスをオンにします。
デバッグ部分に移動し、[Binary Utilities(バイナリ・ユーティリティ)] をクリックして、MCUXpressoからSレコード(.s19)ファイルを生成します。
[Build(ビルド)] をクリックして、プロジェクトを再ビルドします。
コンソールで、メモリの割り当てが正しいかどうかを確認できます。
この.s19ファイルをコピーします。
フラッシュローダ・ツールで、[Tools(ツール)] > [elftosb] > [Win] に移動し、.s19ファイルとdcd.binファイルをこのフォルダにドロップします。
SDRAMからの起動には別の手順があります。imx-sdram-normal-unsigned-dcd.bdファイル(前述のリンク先にあり)を、[Tools(ツール)] > [bd_file] > [imx10xx] にドラッグします。
管理者モードでコマンド・プロンプトを起動し、「cd [elftosbディレクトリ]」コマンドを使用して、このフォルダに移動します。
.binファイルを生成するには、次のコマンドを呼び出します。
elftosb.exe -f imx -V -c ../../bd_file/imx10xx/imx-sdram-normal-unsigned-dcd.bd -o evkbimxrt1050_led_blinky.bin SDRAM1_led_blinky.s19
このコマンドは基本的に、imx-flexspinor bdリンカ・ファイルを使用して、内部にdcd.binヘッダを含む.binファイルを生成しています。HYPERFLASH_led_blinky.s19は、MCUXpressoから取得した実際のファイル名に変更する必要があります。
次に、boot_image.sbを生成する必要があります。
続いて、kinetisコマンドを指定してelftosbツールを再度呼び出します。これにより、.binファイルがboot_image.sbファイルに変換されます。
コマンドは次のとおりです。
elftosb.exe -f kinetis -V -c ../../bd_file/imx10xx/program_flexspinor_image_hyperflash.bd -o boot_image.sb evkbimxrt1050_led_blinky_nopadding.bin
最初に実行したimxコマンドの出力が、このコマンドの入力と一致する必要があります。また、出力はboot_image.sbという名前のままにする必要があります。別の名前ではうまくいきません。なお、コマンドの中でflexspinor_image_hyperflashと指定していますが、これは間違いではありません。技術的に、まずはHyperflashから起動する必要があることに変わりはなく、その後ですべてをSDRAMにコピーすることになるからです。
boot_image.sbファイルをコピーします。
次に、MFGToolを使用してボードのプログラム・イメージを生成し、アップロードします。
そのためには、ボードのSW7をOFF-ON-OFF-ONに設定し、ジャンパをJ1(5-6)からJ1(3-4)に切り替える必要があります。USBケーブルをJ9に接続して、ボードに電力を供給します。次に、ボードをコンピュータに接続し、MFGToolを実行します。[Start(開始)] をクリックすると、イメージがアップロードされます。
最後の手順で作成した boot_image.sb ファイルをコピーしてください。それを Tools > mfgtools-rel > Profiles > MXRT105X > OS Firmware ディレクトリに移動し、ここにドロップしてください。
次に、ボード上のSW7をOFF-ON-OFF-ONに設定し、下部のジャンパを切り替えて、ボードに電源を供給します。次に、USBケーブルをJ9に接続します。これにより、ボードをプログラムできます。
mfgtools-relフォルダに戻り、MFGToolを開きます。[HID-compliant vendor-defined device(HID準拠のベンダ定義デバイス)] と表示されているはずです。表示されない場合は、SW7と右下の電源ピンを再確認します。
[Start(開始)] をクリックします。成功すると次のように表示されます。
ここで言う成功とは、ブータブル・イメージをボードにアップロードできたというだけの意味です。通常はこれで正常に動作します。しかし、後でボードが想定どおりに動作しなかった場合は、プロセッサの他のステップに問題がある可能性があります。正しいリンカ・ファイルを使用していることと、MCUXpressoの設定が正しいことを確認してください。
[Stop(停止)] を押して終了します。
ボードが正常に起動できるように、ピン・ヘッダを必ず元に戻してください。Hyperflashから起動するには、J1(5-6)とSW7をOFF-ON-ON-OFFに設定します。
こちらはアプリケーションノートがなかったため少し厄介でしたが、さほど難しくはありませんでした。
まず、MCUXpressoの [MCU Settings(MCU設定)] 部分のメモリ構成エディタで、メモリ割り当てを変更します。次のようになります。すべてをDTC RAMにコピーするようにリンクしています。
次に、[Settings(設定)] > [MCU C compiler(MCU Cコンパイラ)] > [Preprocessor(プリプロセッサ)] に移動し、XIP_boot_header_enableとXIP_boot_header_DCD_enableの両方を0に設定します。
[Apply and Close(適用して閉じる)] をクリックします。
[C/C++ Build(C/C++ビルド)] >> [Settings(設定)] >> [MCU Linker(MCUリンカ)] >> [Manage linker script(リンカ・スクリプトの管理)] に移動し、[Link application to RAM(アプリケーションをRAMにリンク)] チェックボックスをオンにします。
デバッグ部分に移動し、[Binary Utilities(バイナリ・ユーティリティ)] をクリックして、MCUXpressoからSレコード(.s19)ファイルを生成します。
[Build(ビルド)] をクリックして、プロジェクトを再ビルドします。
アプリケーションがSRAMにリンクされていることを、コンソールで次のように確認できます。
この.s19ファイルをコピーします。
フラッシュローダ・ツールで、[Tools(ツール)] > [elftosb] > [Win] に移動し、.s19ファイルとdcd.binファイルをこのフォルダにドロップします。
管理者モードでコマンド・プロンプトを起動し、「cd [elftosbディレクトリ]」コマンドを使用して、このフォルダに移動します。
DTCM RTAMに固有の手順として、[Tools(ツール)] >> [bd_file] >> [imx10xx] に移動し、imx-dtcm-unsigned-dcd.bdファイルを開いて、ivtOffsetアドレスを0x1000に変更します。SDカード起動のデフォルトは0x400です。
念のために示すと、bdファイルは次のようになります。
.binファイルを生成するには、次のコマンドを呼び出します。
elftosb.exe -f imx -V -c ../../bd_file/imx10xx/imx-dtcm-unsigned-dcd.bd -o evkbimxrt1050_led_blinky.bin SRAM1_led_blinky.s19
このコマンドは基本的に、imx-flexspinor bdリンカ・ファイルを使用して、内部にdcd.binヘッダを含む.binファイルを生成しています。SRAM_led_blinky.s19は、MCUXpressoから取得した実際のファイル名に変更する必要があります。
次に、boot_image.sbを生成する必要があります。
続いて、kinetisコマンドを指定してelftosbツールを再度呼び出します。これにより、.binファイルがboot_image.sbファイルに変換されます。
コマンドは次のとおりです。
elftosb.exe -f kinetis -V -c ../../bd_file/imx10xx/program_flexspinor_image_hyperflash.bd -o boot_image.sb evkbimxrt1050_led_blinky_nopadding.bin
最初に実行したimxコマンドの出力が、このコマンドの入力と一致する必要があります。また、出力はboot_image.sbという名前のままにする必要があります。別の名前ではうまくいきません。なお、コマンドの中でflexspinor_image_hyperflashと指定していますが、これは間違いではありません。技術的に、まずはHyperflashから起動する必要があることに変わりはなく、その後ですべてをSDRAMにコピーすることになるからです。
次に、MFGToolを使用してボードのプログラム・イメージを生成し、アップロードします。
そのためには、ボードのSW7をOFF-ON-OFF-ONに設定し、ジャンパをJ1(5-6)からJ1(3-4)に切り替える必要があります。USBケーブルをJ9に接続して、ボードに電力を供給します。次に、ボードをコンピュータに接続し、MFGToolを実行します。[Start(開始)] をクリックすると、イメージがアップロードされます。
最後の手順で作成した boot_image.sb ファイルをコピーしてください。それを Tools > mfgtools-rel > Profiles > MXRT105X > OS Firmware ディレクトリに移動し、ここにドロップしてください。
次に、ボード上のSW7をOFF-ON-OFF-ONに設定し、下部のジャンパを切り替えて、ボードに電源を供給します。次に、USBケーブルをJ9に接続します。これにより、ボードをプログラムできます。
mfgtools-relフォルダに戻り、MFGToolを開きます。[HID-compliant vendor-defined device(HID準拠のベンダ定義デバイス)] と表示されているはずです。表示されない場合は、SW7と右下の電源ピンを再確認します。
[Start(開始)] をクリックします。成功すると次のように表示されます。
ここで言う成功とは、ブータブル・イメージをボードにアップロードできたというだけの意味です。通常はこれで正常に動作します。しかし、後でボードが想定どおりに動作しなかった場合は、プロセッサの他のステップに問題がある可能性があります。正しいリンカ・ファイルを使用していることと、MCUXpressoの設定が正しいことを確認してください。
[Stop(停止)] を押して終了します。
ボードが正常に起動できるように、ピン・ヘッダを必ず元に戻してください。Hyperflashから起動するには、J1(5-6)とSW7をOFF-ON-ON-OFFに設定します。
ここで言う成功とは、ブータブル・イメージをボードにアップロードできたというだけの意味です。通常はこれで正常に動作します。しかし、後でボードが想定どおりに動作しなかった場合は、プロセッサの他のステップに問題がある可能性があります。正しいリンカ・ファイルを使用していることと、MCUXpressoの設定が正しいことを確認してください。
この後、ブータブル・イメージがボードにアップロードされ、準備は完了です。
この3日間、いろいろ試しましたがうまくいきません。RT1050-EVKBを使用しています。MCUXpressoからのイメージのダウンロードは問題なく成功しました。イメージの作成と、フラッシュへの書き込みもできましたし、DTC RAMやITC RAMにもコピーされます。私はNXP-MCUBootutilityかMCUXpressoセキュア・プロビジョニング・ツールを使用しており、どちらの使用も問題ありません。次に必要なのは、XIPでSDRAMから実行されるイメージを作成することです。見つけた情報をすべて試しましたが、うまくいきません。プロビジョニング・ツールのサンプル・イメージについては、evkbimxrt1050_iled_blinky_ext_FLASHとevkbimxrt1050_iled_blinky_SDRAMを取得して書き込み、実行させることができています。つまりツールセットの問題ではありません。明らかに、私が何かのやり方を間違っているか、何かを抜かしているかです。私のSDKはバージョン2.3です。実にシンプルなガイドに思えるのですが、私が個々の手順で何か見落としているのだと思います。ヒントをいただけますか?手始めに知りたいのは、MCUXpressoを使ってXIPイメージをビルドしダウンロードする手順です。どのコンパイラ定義を設定する必要があるでしょうか。イメージを0x60002000から実行させることと、フラッシュを最上位にする必要があることはわかっています。他に何があるでしょうか。
よろしくお願いいたします。
Larry
編集:
驚きの結末です。他に何があったのか、答えが判明しました。MCUXPresso IDEが最新バージョンになっておらず、そのことを当のIDEが認識していなかったのです!!私は別のプロジェクトでV10.3をこれまで1年使用してきました。私は繰り返しアップデートを確認していましたが、利用可能なアップデートはないという表示が出ていました。このIDEは、バージョン11.1が出ていることを把握していなかったのです。RT1050 SDK v2.7はこのバージョンと連携し、フラッシュ書き込み機能もすべて自動で対応しています!!すごいです!RT1050 SDK2.3は対応していません。
Adrian、
私の Flashloader ダウンロードには、あなたが使用した「-dcd」bd ファイルが見当たりません。
なぜ.s19ファイルが必要なのですか。
このツールをお試しいただくこともできます。このツールを使用すると、ベアイメージをさまざまなブートデバイスに簡単にフラッシュでき、ヘッダー(ivt、boot data...)を気にする必要はありません。
GitHub - JayHeng/nxp-sec-boot-ui: NXP MCU (Kinetis、i.MXRT、LPC) ROM ブートローダーを操作するためのワンストップGUIツールで、これは…
結局、私のフラッシュローダに問題があることがわかりました。
今日イメージの作成に成功し、それをフラッシュに書き込んで、SDRAMで実行できました。
その後、フラッシュローダなしで、MCUXpressoでバイナリ・イメージを作成することもできました。Segger Ozoneで正しい場所にロードする必要がありますが、すべて正常に動作します。
Manuelさん、もしフィレンツェにいらっしゃったら、ビールを1杯おごりますよ
Giuseppe
こんにちは、マヌエルさん。この興味深い文書をありがとうございます。
残念ながら、バイナリを作成しようとするとelftosbがクラッシュします。S19ファイルのアドレスは正しいのですが、「セクション0x0」を探し続けます。これはSDRAMと内部RAMバージョンの両方で発生します。
ありがとうございます
Giuseppe
こんにちは。非常に興味深いドキュメントです。
SDやQSPIからブートした場合に、SDRAMからソフトウェアを実行することも可能ですか?
この手順はRT1020でも使えますか?それともRT1050専用ですか?