こんにちは、
カスタム ボードには IMXRT1176 があり、MX25L6433F NOR フラッシュが FlexSPI1 ポート A、セカンダリ ピン グループ経由でコネクテッドされています。FLEXSPI_PIN_GROUP_SEL ヒューズが切れて、セカンダリ ピン グループが有効になります。
私たちのアプリケーションは、OCRAM から実行するためのリンカー スクリプトを使用して SRAM (OCRAM) から実行すると実行されます。
別のリンカー スクリプトとリンクして ResetISR を 'XIP' フラッシュ セクションに配置すると、ResetISR が実行されないように見えます。
イメージにコンパイルされた FCB と IVT が、アドレス 0x30000400 と 0x30001000 に配置されています。
エントリ ポイントは 0x300020ad で、これは ResetISR です。
% arm-none-eabi-readelf -Wl MIMXRT1176_Project.elf
Elf file type is EXEC (Executable file)
Entry point 0x300020ad
There are 15 program headers, starting at offset 52
Program Headers:
Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align
EXIDX 0x005000 0x20240000 0x30002560 0x00098 0x00098 R 0x4
LOAD 0x001000 0x30000000 0x30000000 0x02148 0x02148 R E 0x1000
LOAD 0x004000 0x00000000 0x30002148 0x00418 0x00418 R E 0x1000
LOAD 0x005000 0x20240000 0x30002560 0x00098 0x00098 R 0x1000
LOAD 0x0050a0 0x202400a0 0x300025f8 0x9e658 0x9e658 R E 0x1000
LOAD 0x0a3800 0x202de800 0x300a0c50 0x1de20 0x1de20 RW 0x1000
LOAD 0x0c2000 0x20340000 0x300bea70 0x00080 0x00080 RW 0x1000
LOAD 0x0c2620 0x202fc620 0x300beaf0 0x054f8 0x054f8 RW 0x1000
LOAD 0x000000 0x20000000 0x300c3fe8 0x00000 0x64000 RW 0x1000
LOAD 0x000000 0x20064000 0x300c3fe8 0x00000 0x02000 RW 0x1000
LOAD 0x000b20 0x20301b20 0x300c3fe8 0x00000 0x1ec60 RW 0x1000
LOAD 0x000780 0x20320780 0x300c3fe8 0x00000 0x007ec RW 0x1000
LOAD 0x000f6c 0x20320f6c 0x300c3fe8 0x00000 0x00010 RW 0x1000
LOAD 0x000080 0x20340080 0x300c3fe8 0x00000 0x0a580 RW 0x1000
LOAD 0x000000 0x20360000 0x300c3fe8 0x00000 0x18000 RW 0x1000
Section to Segment mapping:
Segment Sections...
00 .ARM.exidx
01 .boot_hdr .xip
02 .startup
03 .ARM.exidx
04 .text
05 .data_RAM3
06 .data_RAM5
07 .data .got .got.plt
08 .noinit
09 .heap2stackfill
10 .bss
11 NonCacheable
12 .heap
13 .noinit_RAM5
14 .noinit_RAM7不思議なことに、マップ ファイルでは ResetISR が 0x300020ac に表示されていますが、エントリ ポイントと FCB は 0x300020ad に設定されています... この違いはサム ビットによって生じているのでしょうか。
イメージは JFlash を使用してフラッシュに書き込まれ、検証されます。
ボードをリセットしても何も起こりません。UART には何もないので、コードは実行されていません。NXP セキュア プロビジョニング ツールを使用して接続CAN。これは、フラッシュ ブートが失敗し、ブートローダ ROM がまだ実行中であることを示しています。
デバッガーをアタッチしようとすると(またはデバッガー内からイメージを実行しようとすると)、次のメッセージが表示されます。
PC は 0x2230C8 に設定されています。そのメモリ アドレスは認識できません。ITCM より上で DTCM より下にあるようです。それはROMアドレスですか?あるいはブートローダーが無効な場所にジャンプしたのでしょうか?
これをデバッグする方法を何かご存知ですか?
ありがとうございます
キーラン。
はい、 0x300020acと0x300020adの違いはThumbビットによるものです。ARM Cortex-Mは、Thumbモードを示すためにアドレスの最下位ビットを使用します。IVTのエントリポイントは、実際のResetISRアドレスと一致する必要があります。さらに、FCBがセカンダリピングループと一致していることを確認してください。
BR、
オマール