環境:
- デバイス: NXP S32K324 (デュアルコア Cortex-M7_0 + M7_1)
- IDE: S32 Design Studio、デバッガ: Segger Ozone + J-Link
- プロジェクト: ブートローダー (M7_0) + アプリケーション (M7_0 + M7_1)、MULTIPLE_IMAGE モード、FreeRTOS
---
背景 / 変更点:
ブートローダーはすべてのビルド構成でCM7_1_ENABLEを定義していたので、
ブートローダーと Core 0 アプリケーション ビルドの両方から CM7_1_ENABLE を削除しました。
必要に応じて Core 1 を起動できるようにするために、Core 0 アプリケーションに次の MC_ME ベースの起動関数を追加しました。
int MultiCoreBoot_StartCore1(void)
{
/* Core1 がすでに実行されている場合はスキップします */
((MC_ME_PRTN0_CORE1_STAT & MC_ME_CORE_STAT_CCS) != 0U) の場合
{
0を返します。
}
/* ステップ1: M7_1ベクターテーブルアドレスを設定する */
MC_ME_PRTN0_CORE1_ADDR = M7_1_VECTOR_TABLE_ADDR; // 0x00600000
/* ステップ2: Core1クロックを有効にする */
MC_ME_PRTN0_CORE1_PCONF = MC_ME_CORE_PCONF_CCE;
/* ステップ3: 更新をトリガーする */
MC_ME_PRTN0_CORE1_PUPD = MC_ME_CORE_PUPD_CCUPD;
/* ステップ4と5: キーシーケンスのロック解除 */
MC_ME_CTL_KEY = MC_ME_KEY; // 0x5AF0
MC_ME_CTL_KEY = MC_ME_INV_KEY; // 0xA50F
/* Core1クロックがアクティブになるまで待機 */
((MC_ME_PRTN0_CORE1_STAT & MC_ME_CORE_STAT_CCS) == 0U) の場合 {}
0を返します。
}
この関数は、システムの初期化後に Core 0 アプリケーションから呼び出されます。
---
現在の問題:
Ozoneで「実行中のプログラムにアタッチ」を使用してCore 1をデバッグしようとしています(2番目のOzoneインスタンス、別の.jdebugCore 1 ELFを指すプロジェクト
0x00600000)。ただし、Ozone は接続するとすぐにエラーをスローします。
質問:
1.上記の MC_ME 起動コードは S32K324 に適していますか?
2. Core 0 をリセットせずに Core 1 に接続するための正しい Ozone / J-Link 構成は何ですか?
企业微信截图_17726181715171.png
こんにちは@Julián_AragónM 、
あなたのサポートと参考資料に感謝します。それらは問題を絞り込むのに非常に役立ちました。Core 1 の「Attach」障害を正常に解決しました。簡単に要約すると次のようになります。
MPU/スタートアップ: 要求どおりに検証されました。構成は正しく、原因ではありません。
根本原因: デフォルトの S32K324.jlinkscript は、2 番目の Ozone セッションが接続されたときに ECC RAM の初期化 (0xDEADBEEF の書き込み) をトリガーします。これにより、実行中の Core 0 (FreeRTOS) で使用されている SRAM 領域が誤って上書きされ、システムがクラッシュする原因となります。
修正: カスタム J-Link スクリプト内の SetupTarget() をオーバーライドして、「ホット アタッチ」中の RAM 初期化をスキップしました。
両方のコアを同時に安定してデバッグできるようになりました。この発見があなたのチームにとっても役立つことを願っています。
よろしくお願いいたします。
チャンユケ
こんにちは@Changyukeさん
Core 1 を起動するルーチンは問題ないようです。CM7_0 のスタートアップコードをチェックして、アドレス 0x00600000 の MPU 領域属性を確認していただけますか?テーブルベースが有効な VTOR であることを確認するためです。
オゾンに関しては、これはSEGGER自身に質問すべきことだと私は思います。代わりに次の連絡先にお問い合わせください:チケット | SEGGER - The Embedded Experts 。
ドキュメントはいくつか提供していますが、PEmicro に基づいているため、Ozone に必要な特定の構成があるかどうかはわかりません。
最後に、SEGGER はマルチコア デバッグに関する wiki ページを提供しています:マルチコア デバッグ - SEGGER ナレッジ ベース。必要な構成がそこに表示されているようです。
よろしくお願いします、
ジュリアン