Hi NXP.
私はS32K311、RTD3を使用してC40を使用してフラッシュを消去します。
消去操作を行うと、フラッシュの消去に失敗し、ハード フォールトがトリガーされました
次のようなデバッグメッセージをC40_Ip_MainInterfaceSectorEraseに追加しました。
これは、次の場合で確認できます。
/* 内部消去/プログラムシーケンスを開始 */
C40_Ip_pFlashBaseAddress->MCR |= FLASH_MCR_EHV_MASK; が実行され、
ハードフォルトは直接トリガーされます。
時々、私はデバッグを段階的に実行し、ステップバイステップで実行しますが、正常に消去され、ハードフォールトエラーをトリガーしません。
FLASHを消去する正しい方法はありますか?
こんにちは、2ブロックを使用する必要がありますか?
ご対応ありがとうございます。
それは明らかにRWWの問題です。コードは、異なるブロックから実行するか、同じパーティションであるため内部SRAMから実行する必要があります
アプリケーションのシナリオでは、ブート プログラムがアプリ部分を消去するため、ブート コードとアプリ コードは Block0 になりますが、同じブロック内で、ブートでアプリを消去するとハード フォールトがトリガーされます
この写真を参照してください。
このコードは、消去しようとしているのと同じブロックから実行しませんか?
私は二重検証を行いました、消去する領域は確かにロック解除されているので、消去する領域が保護されていないか、ロック解除が失敗し、消去時にHardfaultエラーが発生します
無効にしたさまざまなキャッシュがあります。
これはまだハードフォルトをトリガーします
1.#define C40_IP_SYNCRONIZE_CACHE (STD_OFF)
2. #define CACHE_IP_IS_AVAILABLE STD_OFF
キャッシュを無効にしていますか?
消去領域はPFLASHです
S32DS 3.6.3とRTD 6.0.0を使用してS32K396をデバッグしていた際、公式のフラッシュ操作ルーチンのテスト中にハードフォールトが発生しました。状況は以下のとおりです。
プログラムのpflashアドレスを int_pflash : ORIGIN = 0x00400000、LENGTH = 0x00100000 に設定し、C40_Ip_MainInterfaceSectorErase を使用して0x00500000 ~ 0x00502000 の範囲を消去すると、ハードフォールトが発生します。0x005FE000 ~ 0x00600000 の範囲を消去した場合もハードフォールトが発生します。ただし、 0x00600000 ~ 0x00602000の範囲を消去した場合は正常に動作します。
C40_Ip_MainInterfaceSectorErase関数をint_sram_fls_rsv : ORIGIN = 0x2045EF00, LENGTH = 0x00001000セクションに配置しようとしましたが、ハードフォールトは依然として発生しました。メイン関数もint_sram_fls_rsvセクションに移動した後、問題は解決しました。
なぜこのようなことが起こるのでしょうか?S32K396の消去セクターサイズは0x2000ですが、実際には0x00200000以内の消去は必ずしも許可されていないようです。この動作を説明するドキュメントは見つかりませんでした。私の側の設定に問題があるのでしょうか?C40_IP_Example_S32K396サンプルプロジェクトを使用しています。