2397316_ja-JP

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

2397316_ja-JP

2397316_ja-JP

i.MX8M Plus — ECSPI/SPI NOR 上のセカンダリイメージブート (IMG_CNTN_SET1_OFFSET): OP で ROM がフォールバックするか

i.MX8M Plus -- ECSPI/SPI NOR 上のセカンダリ イメージ ブート (IMG_CNTN_SET1_OFFSET): OPEN 構成では ROM がフォールバックしますか?

==== セットアップ ====

- SoC:i.MX8M Plus(カスタムSMARCモジュール)
- ブートデバイス: ECSPI2 / CS1 上のシリアル NOR (Winbond W25Q128、16 MiB)。これはFlexSPIではなく、レガシーのeCSPIコントローラーです。
- セキュリティ:OPEN構成(デバイスがHABクローズドでない)。
- ヒューズ IMG_CNTN_SET1_OFFSET (ヒューズ読み取り 2 1) = 0x00000000。
- フラッシュマップ: プライマリブートローダーは0x000000、セカンダリコピーは0x400000 (4 MiB) にあります。

文書化されたSPIマッピングによると:
「SPIの場合:ヒューズが10より大きい場合はセカンダリブートが無効になります。n == 0の場合はオフセット = 4 MB、n == 2の場合は1 MB、その他でn <= 10の場合は1 MB * 2^nとなります。」

ヒューズ n = 0 (工場出荷時のデフォルト設定、書き込み不要) の場合、セカンダリオフセットは正確に 0x400000 になります。

==== 問題点 ====

バイト単位で同一で、cmp.bで検証済みのプライマリイメージのコピーを0x400000に配置し、プライマリブートヘッダーを無効化(sf erase 0 0x1000)してリセットしました。

ROMはセカンダリイメージにフォールバックしないため、ボードは起動不能状態になります(USB SDP経由でのみ復旧可能)。

また、プライマリボディ内部の穴を消去する(sf erase 0x100000 0x40000)ことも試みましたが、結果は同じでした。

==== 質問 ====

1. SPI/ECSPI NORで、ROMがIMG_CNTN_SET1_OFFSETの二次映像に切り替わるのは具体的に何をトリガーするのか?
これは無効なプライマリブートヘッダーやイメージ解析失敗、それとも特定のHAB認証失敗なのでしょうか?

2. セカンダリイメージブートは、OPEN(非セキュア)構成でも機能しますか、それともデバイスがHABで閉じられている場合にのみ機能しますか?

3. 同じリセットにフォールバックするのか、それとも電源のオンオフ/2回目のリセット(永続ブート方式)が必要なのか?

4. 0x400000 のセカンダリ イメージは、別々に構築されたブート可能なイメージ (そのオフセット用の独自の IVT/ブート データ) である必要があります。
それとも、プライマリとバイト単位で同一のコピーで十分なのでしょうか?

==== ロジックアナライザによる証拠(リセット中にキャプチャされたSPIバス) ====

リセット中に、Saleae Logic Pro 16を使用してECSPI2バス(CLK、MOSI、MISO、CS)を500 MS/sでプローブし、すべてのSPIトランザクションをデコードしました。比較のために、FlexSPI NORから起動し、セカンダリへのフォールバックも正常に行われるi.MX8QMモジュールでも同様のテストを実施しました。

---- i.MX8M Plus (ECSPI NOR)、プライマリが破損しています ----

ROMは0x03のREADコマンドのみを発行し、オフセット0から厳密に順次読み取ります。

0x03 00 00 FC -> 0x0000FC を読み込む
0x03 00 04 EC -> 0x0004EC を読み込む
0x03 00 08 DC -> 0x0008DC を読み込む
...(64 KiBブロックあたり約50回の読み取り、増加傾向)...
0x03 00 13 xx -> ここで読み取りカウントが減少(0x100000-0x140000 の領域が消去され、MISO=0xFF)
0x03 00 18 xx -> 穴を越えて直線的に続く
...最大で約0x1A69E8まで...

ROMはプライマリ領域全体を直線的に読み取り、消去/無効領域をそのまま通過し(0xFFを取得)、0x400000または0x800000(セカンダリ領域)への読み取りは決して行いません。

キャプチャ全体(2500万サンプル、デコードされたトランザクション654件)には、「0x03 40 xx xx」はどこにも存在しません。

完全に消去されたヘッダーの場合、ROMは0xFFをロードし実行し、同期アボートでクラッシュします。フォールバックは一切ありません。

---- i.MX8QM (FlexSPI NOR) は比較のために使用しています -- セカンダリフォールバックは正常に動作します ----

プライマリコンテナヘッダーのみが無効化された場合(FCBは0x000400にそのまま残された場合)、QM ROMは次の動作をします。

0x0B 00 04 00 -> 高速読み取り FCB @0x000400、MISO: 46 43 46 42 ("FCFB" マジック、FlexSPI 設定有効)
...FCB構成データを読み込む...
0x0B 00 10 00 -> 高速読み取りプライマリコンテナ @0x001000、MISO: FF FF FF FF (無効!)
0x0B 40 10 00 -> 高速読み取りセカンダリコンテナ@0x401000、MISO:有効な<-- ROMスイッチ、同じリセット
0x0B 40 30 00、0x0B 40 40 00、... -> 2次画像全体を読み込みます(0x40xxxxで~90リード)

QM ROMはFCBを読み取り、FlexSPIを設定し、0x001000のプライマリコンテナをチェックし、0xFFを認識します。
そして直ちに(同じリセットで)0x401000のセカンダリコンテナに切り替わります。これはうまくいきます。

代わりに最初の4MB(FCBを含む)をすべて消去すると、QM ROMは2回だけの読み込みを行います
0x000400で、0xFFを得て撤退しません。つまり、撤退が作戦するには有効なFCBが必要です。

- - 比較 - -

i.MX8M Plus (このボード):
コントローラ:eCSPI(レガシーSPI)
オペコードを読みます:0x03 READ
FCBの現状:いいえ(eCSPIにはFCBの概念はありません)
破損したプライマリでセカンダリーを読み取る:いいえ ― バスは「0x03 40 xx xx」を表示しません。
結果:レンガ(ロード0xFF ->クラッシュ)

i.MX8QM(参考文献):
コントローラー:FlexSPI
オペコードを読んでください:0x0B 速読
FCBの提示:はい(0x400、魔法の「FCFB」)
破損したプライマリで二次を読み取る:はい -- 「0x0B 40 10 00」、同じリセット
結果:セカンダリーブーツ成功

==== 要約 ====

バスキャプチャから、i.MX8M Plus の IMG_CNTN_SET1_OFFSET セカンダリイメージの起動が確認できる。
FlexSPI専用であるか、HABクローズド構成によって制限されているかのどちらかで、有効になりません。
OPEN構成のeCSPI NORの場合。

NXPの皆さん、確認いただけますか:
- i.MX8M Plus上で、eCSPI(FlexSPIとは異なる)NORがセカンダリイメージブートにサポートされているかどうか;
- トリガーがHAB-auth-failure(閉じた設定のみ)か、無効なヘッダー(開設定も含む)か;
- フォールバックが同じリセットか電源サイクルが必要か;
- セカンダリはそのオフセットのために別途構築する必要があるのか、それともバイト同一のコピーで問題ないのか。

よろしくお願いします。

Tags (1)
No ratings
Version history
Last update:
21 hours ago
Updated by: