チームの皆さん、こんにちは。
以下のクエリに追加の質問があります(eMcem_setupinjectionChannelの引数としてどの値を選ぶべきか - NXPコミュニティ
キャッシュの位置に2ビットのフォルトを注入する必要がありますが、リファレンス・マニュアルに記載されている通り意味がよくわからず、私たちはNXP s32K394マイクロコントローラを使用しています。
キャッシュに障害を注入し、以下のような2ビットのエラーをキャッシュに取得するために、以下の関数を2回呼び出す必要があります。
もし私のやり方が間違っているなら、このインジェクションのやり方の例コードを教えていただけませんか?現在、私たちのプロジェクトではSAFパッケージを使っています。もしすでにこれらのフォールトインジェクションコードが存在するなら、SAFモジュールに提供されているメモリテストインターフェース(EIM)を使ってあらゆる種類のフォールトを注入するために参照すべきファイルを教えてください。
こんにちは、@Rudved_3366 さん。
このキャッシュインジェクションの例は見つかりませんでしたが、簡単に説明すると次のようになります。
CM7_0 Iキャッシュタグのダブルビットエラーを注入する前に、関連するIキャッシュエラーバンクエントリ(IEBRn)が利用可能でロック解除されていることを確認してください。
手元にあるS32K344でテストしたところ、以下のデータを注入しました。
if (eMcem_SetupInjectionChannel(EMCEM_EIM_CH_3, 1, 2 ) != (Std_ReturnType)E_OK)
{
while (1U);
}
if (eMcem_InjectFault(EMCEM_EIM_CH_3) != (Std_ReturnType)E_OK)
{
while (1U);
}
次に、ハンドラー内でEIMを無効にします。
void BusFault_Handler(void)
{
if(IP_EIM->EIMCR & EIM_EIMCR_GEIEN_MASK)
{
IP_EIM->EIMCR = EIM_EIMCR_GEIEN(0);
}
}
リカバリコード(VTORが参照するベクターテーブル、例外ハンドラ、およびハンドラが呼び出すものなど)はキャッシュ可能な領域に含めてはならないことに注意してください。リカバリ中にエラーが再度注入されることを避けるためです。
次に、IEBRレジスタを再度読み込み、0を書き込んでクリアします。
キャッシュを無効にするには、APIを呼び出してください。
よろしくお願いいたします。
ダニエル
こんにちは、 @danielmartynek さん、
上記のクエリも確認していただけますか?これはキャッシュアドレスへのフォールト注入に関するものです。