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イメージでプログラムされていないのか、誰か教えていただけませんか? 具体的には: MIMXRT1040-EVK + LinkServerは、XIPアプリケーションのデバッグに特定のFlexSPI NORフラッシュドライバー/設定が必要ですか? RT1040_connect.scpは、外部NORフラッシュの接続とプログラミングの両方に十分ですか? MCUXpressoのデバッグ設定において、追加のFlashプログラミング設定は必要ですか? デバッグの設定は特定のflexspi_norフラッシュドライバーを使うべきでしょうか、それともフラッシュツールの設定を使うべきでしょうか? LinkServer + MIMXRT1040 + 外部FlexSPI NOR + XIPデバッグにおいて、.axfファイルがシンボルとしてロードされるものの、外部フラッシュメモリに実際にはプログラムされないという既知の問題はありますか? 動作する 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が表示されていることに気づきました。 確認いただけますか: この構成はMIMXRT1040-EVKにとって正しいですか? デフォルトの LinkServerフラッシュドライバー フィールドでMIMXRT1040_SFDP_QSPI.cfxも選択すべきでしょうか? それとも、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-issues/ta-p/1635260
フラッシュローダーの選択については、IDE内の「Flash」行で適切なフラッシュドライバーを選択するだけで済みます。*.scpファイルはSDKに付属しており、リンクサーバーの事前設定に使用されます。各コマンドラインについて詳しく知りたい場合は、ファイルに入ることができます。
よろしくお願いします、 ギャビン
查看全文