こんにちは。現在、MPC5777C MCUを基に開発中です。
開発プロセスに関して質問があります。
「MPC5777C-1b+2b_RAM_ECC_error_injection GHS614」というサンプルコードを基に、ECCチェックを実行するコードを設計しました。
通常の状況下では、このコードはECCチェックを正しく実行します。
しかし、MCUに接続されたTrace32のようなデバッガでECCチェックコードを実行すると、ビット誤りが検出されないエラーが頻繁に発生します。
「GHS614」例コード全体が、Trace32のようなデバッガに接続したときに正しく動作しない可能性はありますか?
よろしくお願いします。
こんにちは、
Trace32デバッガが接続されていてダンプウィンドウが開かれ、カスタムアプリケーションコードが実行されていると仮定すると、GHS614を参照して設計されたECCチェック機能内でビットエラーが検出されないケースが発生する可能性はありますか?
こんにちは、
あなたのシステム構成がどのようなものかは分かりませんが、トレースで開いているダンプウィンドウは常にメモリを読み取っており、ECC障害が検出されるとすぐに発生することに注意してください。
破損していないアドレスでは、ECCエラーは決して発生しません。ECC機構もEDCによって保護されている。それは到底不可能なことだ。
よろしくお願いいたします。
ピーター
こんにちは、
ソフトウェアまたはデバッガによって読み取られるアドレスが破損している場合、例となるソフトウェアやその他の影響に関係なく、ECCは常に上昇します。
よろしくお願いいたします。
ピーター
こんにちは、
状況をもう少し詳しく説明します。
私のECCチェックコードの実行手順は以下のとおりです。
(void)FCCU_ClearNCF();
/* 1ビットRAMデータエラー注入 */
GenerateRam1bitEccError();
uiErmSR0 = ERM.SR0.R;
uiErmSR1 = ERM.SR1.R;
uiErmSR2 = ERM.SR2.R;
/// 4. RAM 1ビットECCエラーが発生した場合は、以下を実行します。
if((((uiErmSR0 & ERM_SR0_1b_all) == ERM_SR0_1b_PRAMC_1) || ((uiErmSR2 & ERM_SR2_1b_all) == ERM_SR2_1b_Core1_data)) && ((uiErmSR1) == CLEAR))
{
/// 4.1.ERM EARレジスタに格納されている値が、エラーが発生したアドレスと同じである場合は、以下の手順を実行してください。
if((UINT32)auiTest == (ERM.ERROR[ERM_chnl_PRAMC_1].EAR.R))
{
ucStatus = OK;
}
/// 4.2.ERM EARレジスタに格納されている値が、エラーが発生したアドレスと一致しない場合は、以下の手順を実行してください。
そうでなければ、(UINT32)auiTest == (ERM.ERROR[ERM_chnl_Core1_data].EAR.R) の場合
{
ucStatus = OK;
}
そうでない場合、
{
ucStatus = NOT_OK
};
}
/// 5.RAM 1ビットECCエラーが発生しなかった場合は、以下の手順を実行してください。
そうでない場合、
{
ucStatus = NOT_OK
};
この構造は、1ビットのRAMデータエラーを強制的に挿入し、ECCエラーが正常に発生したかどうか、および発生アドレスが正確に検出されたかどうかを確認します。
上記のコードが実行中にTrace32のメモリダンプウィンドウを有効にした場合、ECCチェックの結果が異常に実行される可能性はありますか?(つまり、ECCエラーの検出失敗、またはECC発生アドレスでのエラー)
よろしくお願いします。