2403096_ja-JP

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

2403096_ja-JP

2403096_ja-JP

MIMXRT1040-EVK: RAMからのデバッグは機能しますが、FLASHでは機能しません

チームの皆さん、こんにちは。

私は MIMXRT1040-EVK を使っており、 MCUXpresso IDEとLinkServer/SWDを使っています。

私のアプリケーションはRAMからリンクして実行されると正しく動作するのに、外部FlexSPI NOR Flashから実行するように設定すると、デバッガがmain()に到達しないという問題に直面しています。

現在の動作

RAM構成:

  • 「リンクアプリケーションをRAMに」有効化

  • アプリケーションダウンロード成功

  • アプリケーションは正しく実行されます

  • デバッガーがmain()に到達しました

  • アプリケーションは通常通りデバッグできます

Flash/XIPビルド:

  • 「リンクアプリケーションをRAMに」無効化

  • アプリケーションは0x60000000から外部フラッシュと連携されます

  • ビルドは正常に完了しました

  • .axf が生成されます

  • デバッグを開始しても、デバッガーは main() に到達しません。

  • CPUは、想定される0x600xxxxx XIPアドレス範囲から実行されていないようです。

リンカー/マップ情報

生成された.mapファイルには、想定されるXIPレイアウトが示されています。

.boot_hdr       0x60000000
.boot_hdr.conf  0x60000000
.boot_hdr.ivt   0x60001000
.boot_hdr.boot_data
                0x60001020

.text           0x60002000
.isr_vector     0x60002000

ResetISR        0x6000231C
main            0x60004EF4

したがって、アプリケーションには期待されるFlexSPI NORブートヘッダー、IVT、ブートデータ、ベクターテーブル、ResetISR、アプリケーションコードが含まれているように見えます。

私も以下を持っています:

XIP_EXTERNAL_FLASH = 1
XIP_BOOT_HEADER_ENABLE = 1

重要な指摘

フラッシュイメージのデバッグ/プログラミングを試みた後、メモリを以下の場所で確認しました。

0x60000000
0x60001000
0x60002000

メモリウィンドウは期待されるアプリケーション内容ではなく、0x00000000/空のデータを表示します。

例えば、次の場所で:

0x60002000

アプリケーションベクターテーブルを期待していましたが、メモリにはゼロが含まれているようです。

デバッグ試行失敗後のCPUレジスタには、以下の情報も表示されていました。

PC = 0x0020E368
SP = 0x20200F70
LR = 0x0020ED49

想定される0x600xxxxx XIP領域にあるPCではなく。

デバッグ設定

私は以下を使用しています:

Debug Connection: SWD
Connect script: RT1040_connect.scp

デバッグ構成には以下が含まれます。

Load image: enabled
Use project binary: igpio_led_output.axf

Load symbols: enabled
Use project binary: igpio_led_output.axf

Set breakpoint at: main
Request hardware breakpoint: enabled

LinkServerのデバッグ構成が使用されています。

プロジェクトの内容

このプロジェクトには、標準的なXIP関連ファイルが含まれています。

xip/
 ├── evkmimxrt1040_flexspi_nor_config.c
 ├── evkmimxrt1040_flexspi_nor_config.h
 ├── fsl_flexspi_nor_boot.c
 └── fsl_flexspi_nor_boot.h

生成されたリンカースクリプトは、ブートヘッダーとアプリケーションを0x60000000から始まるBOARD_FLASH領域に配置します。

私の質問

なぜ外部FlexSPI NORフラッシュがLinkServerデバッグセッションを起動した際に生成されたXIPイメージでプログラムされていないのか、誰か教えていただけませんか?

具体的には:

  1. MIMXRT1040-EVK + LinkServerは、XIPアプリケーションのデバッグに特定のFlexSPI NORフラッシュドライバー/設定が必要ですか?

  2. RT1040_connect.scpは、外部NORフラッシュの接続とプログラミングの両方に十分ですか?

  3. MCUXpressoのデバッグ設定において、追加のFlashプログラミング設定は必要ですか?

  4. デバッグの設定は特定のflexspi_norフラッシュドライバーを使うべきでしょうか、それともフラッシュツールの設定を使うべきでしょうか?

  5. LinkServer + MIMXRT1040 + 外部FlexSPI NOR + XIPデバッグにおいて、.axfファイルがシンボルとしてロードされるものの、外部フラッシュメモリに実際にはプログラムされないという既知の問題はありますか?

  6. 動作する MIMXRT1040-EVK FlexSPI または XIP デバッグセッションで比較できる推奨される NXP の例プロジェクトや設定はありますか?

次に何をチェックすべきか、ご助言いただければ幸いです。

よろしくお願いします。

Re: MIMXRT1040-EVK: Debug works from RAM, but it's not working for FLASH

ご回答ありがとうございます。

ご提案通り 、MCU設定→メモリ の詳細を確認しました。スクリーンショットを添付しました。

BOARD_FLASHメモリは以下のように構成されています。

所在地: 0x60000000
サイズ: 0x800000
フラッシュドライバー: MIMXRT1040_SFDP_QSPI.cfx

つまり、特定の 外部フラッシュドライバーはすでにBOARD_FLASHに設定されているようです。

シリアル ダウンロードモード+MCUプロビジョニングツール の手順も試しました。MCUプロビジョニングツールを使ってイメージのビルドとイメージの書き込みを成功させることができました。

しかしその後も、通常のMCUXpresso + LinkServerデバッグフローでFlashからアプリケーションのプログラムやデバッグを行うことができませんでした。

興味深いことに、 その後もう一度コードをフラッシュやデバッグで試したところ、突然動作し、アプリケーションはFlashから正常に動作するようになりました。

失敗と成功の試行の間に、プロジェクト設定、Flashドライバ、リンカー設定、起動設定を意図的に変更したわけではありません。

ですので、現時点ではアプリケーションやリンカーの設定自体ではなく、Flashのプログラミングや初期化、リセットシーケンスに起因する断続的な問題があるのではないかと考えています。

MIMXRT1040-EVKでこの挙動が起きる原因について教えていただけますか?

特に:

  • MIMXRT1040_SFDP_QSPI.cfxはEVKの外部FlexSPI NORの正しいフラッシュドライバーでしょうか?
  • Default LinkServer Flash Driverフィールドが空欄であるのは、ドライバ欄にMIMXRT1040_SFDP_QSPI.cfxが割り当てられているにもかかわらず、BOARD_FLASHは重要でしょうか?
  • 以前の失敗したプログラミングやデバッグの試みの後、外部フラッシュが予期せぬ状態のまま残り、特定のリセットや電源サイクルが必要になる可能性はありますか?
  • RT1040_connect.scpやLinkServerのリセット/接続シーケンスが断続的なFlashプログラミングの原因になるのでしょうか?
  • MIMXRT1040-EVK、LinkServer、およびMIMXRT1040_SFDP_QSPI.cfxに関して、フラッシュプログラミングが断続的に失敗する既知の問題はありますか?

同じ構成が意図的な変更なしで最終的に動作したため、以前の故障の原因を理解し、Flashのデバッグやプログラミングの信頼性を高めたいと考えています。

よろしくお願いします。

Re: MIMXRT1040-EVK: Debug works from RAM, but it's not working for FLASH

こんにちは、@Prashanth1 さん

あなたが提供したスクリーンショットを見る限り、Flashドライバーの設定は問題なさそうです。

まずはボードをシリアルダウンロードモードにして、MCUXpressoのSecure Provisioning Toolを使ってUSBやuartでイメージをFlashにダウンロードしてみてはどうでしょうか?

この方法はデバッガの影響を切り離し、ボードにフラッシュハードウェアの問題がないか確認するために使用できます。さらに、デバッガーを使用して、ダウンロード失敗時のログを提供してください。

私側ではできるだけ早くRT1040-EVKを手配し、以前添付されたプロジェクトパッケージを使って問題を再現しようと思います。


よろしくお願いします、
ギャビン

Re: MIMXRT1040-EVK: Debug works from RAM, but it's not working for FLASH

こんにちは、ギャビンさん。

ご回答ありがとうございます。

ご提案通り、MCUの設定→メモリの詳細を確認しました。スクリーンショットを添付しました。

私のプロジェクトでは、BOARD_FLASHメモリは次のように構成されています。

  • 場所: 0x60000000
  • サイズ: 0x800000
  • ドライバ:MIMXRT1040_SFDP_QSPI.cfx

つまり、FlexSPI NORフラッシュドライバはすでにBOARD_FLASHメモリ領域に関連付けられているようです。

しかし、MCU設定の上部にある 「Default LinkServer Flash Driver」 フィールドが空欄で、BOARD_FLASHのドライバー欄にはMIMXRT1040_SFDP_QSPI.cfxが表示されていることに気づきました。

確認いただけますか:

  1. この構成はMIMXRT1040-EVKにとって正しいですか?
  2. デフォルトの LinkServerフラッシュドライバー フィールドでMIMXRT1040_SFDP_QSPI.cfxも選択すべきでしょうか?
  3. それとも、BOARD_FLASH行に示されているドライバーだけで、LinkServerは外部FlexSPI NORをプログラムするのに十分なのでしょうか?

主な問題は、アプリケーションが0x60000000で正しくXIPリンクされているのに、LinkServerのデバッグセッションを起動した後、メモリウィンドウの0x60000000/0x60002000にアプリケーションの内容が表示されないことです。

同じアプリケーションでもRAMデバッグは正常に動作します。

参考までにMCU設定のスクリーンショットを添付しました。

よろしくお願いします。

RT1040MCUsettings.png

Re: MIMXRT1040-EVK: Debug works from RAM, but it's not working for FLASH

こんにちは、@Prashanth1 さん

NXP MIMXRTシリーズにご関心をお寄せいただきありがとうございます!

外部フラッシュを使用する場合は、専用のフラッシュドライバーが必要です。IDEでFlashドライバーが正しく読み込まれているか確認してください:(私のスクリーンショットはRT1170を例にしていますが、RT1040も同様の手順です。)

Gavin_Jia_0-1786341203390.png

よろしくお願いします、
ギャビン


Re: MIMXRT1040-EVK: Debug works from RAM, but it's not working for FLASH

こんにちは、@Prashanth1 さん

上記の現象に基づくと、最も可能性の高い原因は、以前にフラッシュメモリ内にダーティデータ/イメージが存在していたことである。誤ったFCBヘッダーであれ、実行時にMCUがエラー状態に入るイメージであれ、これらの問題はイメージの再フラッシュ時に失敗につながることがあります。このシナリオでの標準的な復旧方法はシリアルダウンロードモードに入ることです。こちらの記事もご参照ください: https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs-Knowledge/RT-board-recovery-for-debugger-connect...

フラッシュローダーの選択については、IDE内の「Flash」行で適切なフラッシュドライバーを選択するだけで済みます。*.scpファイルはSDKに付属しており、リンクサーバーの事前設定に使用されます。各コマンドラインについて詳しく知りたい場合は、ファイルに入ることができます。

よろしくお願いします、
ギャビン

タグ(1)
評価なし
バージョン履歴
最終更新日:
金曜日
更新者: