S32K3 RTD-6.0.0 Mem_Infls C40_Ip_AccessCode がハードフォールトを引き起こしているETAS は GM と協力して SDV2 プロジェクトに取り組んでおり、以下の問題が発生しています。
ツールのバージョン:
- HSEファームウェアバージョン: ** HSE_FW_S32K344_12.2.76.0 **
- LLSI インターフェース バージョン: ** LLSI_SW32K3XX_0_9_9_PRC **
- 静的 MCAL バージョン:
- SW32K3_RTD_R21-11_6.0.0_P03 (GM暗号)
- SW32K3_S32M27x_RTD_R21-11_6.0.0_D2506 (汎用MCAL)
問題の説明:
- Mem_Inflsで散発的な問題が見つかりました C40_Ip_AccessCodeの MCAL モジュール。
- 構成パラメータ: Mem-Load-アクセス-Code-On-JobStart --> 有効
- フラッシュ書き込み要求が発生したとき
- C40_Ip_AccessCodeがRAMにコピーされる
- RAMから実行される
- ハードフォールト発生
デバッグ結果:
- この行からフラッシュ操作をトリガーした後
"C40_Ip_pFlashBaseAddress[C40_Ip_Instance]->MCR |= FLASH_MCR_EHV_MASK;"
- この行がRAMから実行されると、この行で問題が発生していることがわかりました。
「 ( 0U == ( local_C40_Ip_pFlashBaseAddress [ C40_Ip_Instance ]-> MCRS & FLASH_MCRS_DONE_MASK)) "
- 「 C40_Ip_pFlashBaseAddress 」このポインター配列は Const-Global であり、コードフラッシュに格納されます。
- フラッシュ ドライバが別の要求を実行しているときにフラッシュにアクセスしようとすると、ハード障害が発生します。
根本的な原因:
- NXP Mem_Infls関数「C40_Ip_AccessCode」 RAM から実行されているものは、書き込み/消去操作の実行中にフラッシュにアクセスしています。
ERAS-FBL チームによる修正案:
- 内部にポインタのローカル配列を作成する 「C40_Ip_アクセスコード」 CodeFlashに保存されたものを使用する代わりに
FLASH_Type * local_C40_Ip_pFlashBaseAddress [FLASH_INSTANCE_COUNT] = IP_FLASH_BASE_PTRS;"
- このローカル ポインタ配列を使用して、フラッシュ レジスタにアクセスします。
- この修正/パッチはテスト済みで、問題はもう発生していません。
修正のためのコード変更は添付のスクリーンショットでCAN確認できます。

適用した修正が問題なく、CAN使用できるかどうかを確認したかったのです。
RAMから実行しているのに、なぜ同時にCodeFlashにアクセスしているのでしょうか?上記のコメントで示したアセンブリを見ると、コードフラッシュから配列にアクセスしようとしていることが分かります。これがハードフォールトの原因です。RAMに保存されている配列のみを使用する場合、この問題は発生しません。
追加メモ:
MemAcCallback は構成されていない、SO この CASE は NULL_PTR になります。
これは、一般的な Mem_Infls 構成のスクリーンショットです。

優先度: 中RTD出典: 直接お客様Re: S32K3 RTD-6.0.0 Mem_Infls C40_Ip_AccessCode causing hard-faultより詳細なスクリーンショットを添付します:
- C40_Ip_AccessCodeがロードされ、 Mem_43_INFLS_AcLoadedフラグをチェックするか、フラッシュとRAMのアセンブリをチェックすることができます。
- R1--> レジスタを確認してください。コード フラッシュに C40_Ip_pFlashBaseAddress のアドレスがあり、その内容をロードすると、ハード フォールトが発生します。
- フラッシュステータスペリフェラルのスクリーンショットでもすべてを確認できます。

Mem_Inflsモジュールの完全な設定は、添付のzipファイルにCANあります。
Re: S32K3 RTD-6.0.0 Mem_Infls C40_Ip_AccessCode causing hard-faultこんにちは、 @cuongnguyenphu さん、
ご確認ありがとうございます。参考までに、以下の画像をすべて再度アップロードしました。
Re: S32K3 RTD-6.0.0 Mem_Infls C40_Ip_AccessCode causing hard-faultC40_Ip_AccessCode のこの問題を発見してくださった@vamsilankaに感謝します。
問題とご提案を理解しました。ただし、これらの画像を再度アップロードしていただけますでしょうか?問題を解決するには、RTD チーム用のチケットを作成してもらいます。現在の画像は解像度が低く、
Re: S32K3 RTD-6.0.0 Mem_Infls C40_Ip_AccessCode causing hard-fault@vamsilanka
確認と修正のために開発チームにチケットを作成しました: https://jira.sw.nxp.com/browse/ARTDCMEM-821
その理由は、 C40_Ip_pFlashBaseAddressがフラッシュコードで定義されているためです。

回避策として、RAM に保存されるローカル ポインターを作成し、問題を解決できます CAN SO。
Re: S32K3 RTD-6.0.0 Mem_Infls C40_Ip_AccessCode causing hard-faultこんにちは、 @cuongnguyenphu さん、
このトピックに関して迅速なご返答を頂きありがとうございます。お客様に状況をお知らせします。