S32K328:CM7_0 CM7_2 DTCMバックドアへのアクセスが不正確なバスフォールトを引き起こすNXPチームの皆様、こんにちは。
当社では、RTD 7.xを搭載したS32K328を使用しています。
ソフトウェアのセットアップ:
- CM7_0はブートローダーを実行します。
- CM7_1は第二のアプリケーションで使用されます。
- CM7_2はアプリケーションコードの実行を目的としていません。
- TCMバックドア/AHBS経路を通じてCM7_2 DTCMをシステムメモリとして使用できるかどうかCM7_0評価しています。
リファレンス・マニュアルの文脈:
「メモリマップ」章では、ITCM/DTCMは他のマスター、特にCortex-M7コアやeDMAから32ビットAHBSインターフェースからアクセス可能であると述べられています。
「TCMをシステムメモリとして」のセクションでは、有効化されたコアは無効化または待機中のコアのTCMを以下以下で使用可能とされています:
1. ターゲットコアTCMコントローラクロックの有効化:
MC_ME PRTN2_COFB2_CLKEN[REQ64] for Cortex-M7_2
2. ターゲットコアCPUWAITの設定:
DCM_GPR DCMRWF4[CM7_2_CPUWAIT]
3. ターゲットコアクロック/アクセスパスの有効化:
MC_ME PRTN0_CORE4_PCONF[CCE]
私たちが試したこと:
1. DCM_GPR DCMRWF4[CM7_2_CPUWAIT]を設定します。
2. MC_ME PRTN2_COFB2_CLKEN[REQ64]を設定します。
3. MC_ME PRTN2_PUPD[PCUD]を設定します。
4. MC_ME CTL_KEYシーケンスを適用しました。
5. PRTN2_PUPD[PCUD]がクリアされるまで待機しました。
6. PRTN2_COFB2_STATを読み取り、bit0/BLOCK64がアクティブであることを確認した。
7. MC_ME PRTN0_CORE4_PCONF[CCE]を設定します。
8. MC_ME PRTN0_CORE4_PUPD[CCUPD]を設定します。
9. MC_ME CTL_KEYシーケンスを適用しました。
10. PRTN0_CORE4_STAT[CCS]が1になるまで待機しました。
11. 実験のため、MPUを一時的に無効にした。
12. CM7_2 DTCMバックドアアドレスへの32ビット書き込みを1回試行しました。
観測結果:
- PRTN2_COFB2_STATはTCMコントローラのクロック要求がアクティブであることを示します。
- PRTN0_CORE4_STAT[CCS] が 1 になります。
- CM7_2 DTCMバックドア領域への最初の32ビット書き込みにより、不正確なバスフォルトが発生し、ハードフォルトにエスカレートします。
質問:
1.S32K328の場合、CM7_0からアクセス可能な正しいCM7_2 DTCMバックドア/システムアドレス範囲は何ですか?
2. CM7_2 CM7_0 CM7_2がCPU待機中にいる間、DTCMバックドアアクセスはサポートされていますか?
3.MC_MEとDCM_GPRの設定以外に、CM7_0がCM7_2のDTCMバックドアに書き込めるようにするには、XRDCの設定が必要ですか?
4. テストのためにMPUを一時的に無効にした場合でも、MPU領域は必要ですか?
5. TCMバックドアパスを使用する前に、MSCM/MCM/XBIC/ENEDCの設定が必要ですか?
6.PRTN2_COFB2_STAT[BLOCK64]はTCMコントローラークロックが有効であることCM7_2確認するための正しいステータスビットでしょうか?
7. PRTN0_CORE4_STAT[CCS]は、クロック/アクセスパスが有効であることCM7_2確認するための正しいステータスビットでしょうか?
8. バックドアアクセスによるDTCM ECC初期化の場合、CM7_0からの32ビット書き込みで十分でしょうか?
9. 最初のバックドア書き込みによって不正確なバスフォルトが発生した場合、その障害がXRDC、インターコネクト、またはマッピングされていないアドレスのいずれに起因するものかを特定するために、どのフォルト/XRDCレジスタをチェックする必要がありますか?
現在の目標:
私たちは最小限の煙試験のみを検証したいのです。
- CM7_2 DTCMバックドアへの32ビット書き込み1回、
- それから読み返します、
- 生産用途を検討する前に。
よろしくお願いします。
Re: S32K328: CM7_0 access to CM7_2 DTCM backdoor causes imprecise BusFaultこんにちは、 @krishna_Bugudi さん、
1.
S32K3xx_memory_map.xlsx を参照してください。DTCM_2 バックドア (アドレス 0x21800000)
2.
はい
3.
なし
4.
なし
5.
なし
6.
はい、RMのセクション3.4「TCMをシステムメモリとして」を参照してください。
7.
はい
8.
はい、RMの表102を参照してください。メモリECC初期化の概要
9.
XRDCが無効になっていると書かれていましたね。したがって、XRDCによって報告されることはない。
住所はどこに書きますか?
よろしくお願いいたします。
ダニエル
Re: S32K328: CM7_0 access to CM7_2 DTCM backdoor causes imprecise BusFaultこんにちは、ダニエルさん。
ご確認いただきありがとうございます。
テストを更新してRM/NXPの手順に完全に準拠するようにしましたが、依然としてストアのハングアップが発生しています。
確認済みの住所:
私たちは以下の宛先に手紙を書いています。
0x21800000
これはS32K3xx_memory_map.xlsxと一致します。
DTCM_2 バックドア:
- 開始アドレス: 0x21800000
- 終了アドレス: 0x2181FFFF
- S32K328実装サイズ:128KB
メモリマップには、PRAM2_TCM_XBICがS32K328の以下の場所に存在することも示されています。
0x40408000 - 0x4040BFFF
そしてそれを次のように説明しています。
「クロスバー整合性チェッカー(PRAM2およびTCMバックドアAHBスプリッター)」
一方、0x40400000 の TCM_XBIC は S32K328 用に予約済みとしてマークされています。
最新のテストシーケンス:
1. MC_ME PRTN2_COFB2_CLKEN[REQ64]を設定します。
2. MC_ME PRTN2_PUPD[PCUD]を設定します。
3. MC_ME CTL_KEYシーケンスを適用します。
4. PRTN2_PUPD[PCUD]がクリアされるまで待ちます。
5. PRTN2_COFB2_STATを読み込む。
観察結果:
PRTN2_COFB2_STAT = 0x00000039
6. DCM_GPR DCMRWF4[CM7_2_CPUWAIT]を設定します。
読み上げ確認:
DCMRWF4 = 0x00080000
7. MC_ME PRTN0_CORE4_ADDR を安全なループアドレスに設定します。
読み返し:
PRTN0_CORE4_ADDR = 0x00402408
8. MC_ME PRTN0_CORE4_PCONF[CCE]を設定します。
9. MC_ME PRTN0_CORE4_PUPD[CCUPD]を設定します。
10. MC_ME CTL_KEYシーケンスを適用します。
11. PRTN0_CORE4_STAT[CCS]が1になるまで待ちます。
観察結果:
PRTN0_CORE4_STAT = 0x00000001
12. MPU CM7_0一時的に無効化して隔離する。
無効化前のMPU_CTRL = 0x00000003
13. 32ビット書き込みを1回試行します。
*(volatile uint32_t *)0x21800000 = 0u;
最新のパンくずリスト:
[CORE2_DTCM_SMOKE] S4B: WORD0 書き込み開始アドレス=0x21800000
店舗の次のパンくずリストに到達していません。
[CORE2_DTCM_SMOKE] S4B1: DSBの前にWORD0ストアが発行されました
そのため、ストア自体が次の指示に到達する前に停止したり完了しないように見えます。今回の最新のテストでは、DSB(深層破壊領域)には到達していません。
質問:
あなたが確認した内容:
- 0x21800000 は正しい DTCM_2 バックドア アドレスです。
- CM7_2がCPUWAIT中である間はCM7_0アクセスがサポートされます。
- XRDC/MPU/MSCM/MCM/XBIC/ENEDC の追加設定は不要です。
- PRTN2_COFB2_STAT[BLOCK64] は正しいステータスビットです。
- PRTN0_CORE4_STAT[CCS] は正しいステータスビットです。
- 32ビット書き込みはDTCM ECC初期化に有効です。
最初の32ビットストアが完成前に0x21800000止まる原因は何でしょうか?
S32K328のPRAM2_TCM_XBIC(アドレス0x40408000)でTCMバックドアAHBスプリッタエラーを検査すべきでしょうか?
もしそうなら、以下の場所を教えていただけますか:
1.PRAM2_TCM_XBIC ステータス/エラーレジスタを読み取ります。
2. DTCM_2バックドアトランザクションの失敗時に想定されるエラー表示。
3. アクセスを再試行する前にエラークリアシーケンスが必要かどうか。
4. ストアが完了しなかった場合にキャプチャする必要のあるその他の MC_ME/DCM/MSCM/XBIC/fault レジスタ。
よろしくお願いいたします。
クリシュナ
Re: S32K328: CM7_0 access to CM7_2 DTCM backdoor causes imprecise BusFaultこんにちは、クリシュナさん。
Copilot は次のように述べています。「テストしたところ、プロジェクトでデフォルトの MPU が有効になっている場合 (system.c で設定) にのみこのエラーを再現できました。」S32DS RTDプロジェクトによって生成されました。プロジェクトでMPUが無効化されているかどうかを確認するためにMPUレジスタをダンプすることはできますか?
よろしくお願いいたします。
ダニエル