2324120_ja-JP

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

2324120_ja-JP

2324120_ja-JP

RAM上のECCエラーのフォールトインジェクション

実際のハードウェア上の異なるタイプの RAM に ECC エラーを挿入する必要があります。
また、利用可能なすべてのタイプの RAM でそれらを読み取る必要があります。
これを実行するための正確な方法が必要です。

また、S32K3GHS マイクロコントローラを使用しています。
これを実行する方法に関する何らかのドキュメントまたは方法論を提供してください。

Re: Fault Injection of ECC error on RAM

こんにちは@Bhumika_NL

NXP は、S32K3xx ファミリ向けに Safety ペリフェラル Driver (SPD) を提供しています。
eMCEM ドライバーは、ECC エラーを挿入するために使用される EIM モジュールを制御します。
SPD ドライバは、S32K3xx 標準ソフトウェア パッケージの一部として無料で入手できます。

https://www.nxp.com/webapp/swlicensing/sso/downloadSoftware.sp?catid=SW32K3-STDSW-D

NXP は、SPD をパッケージの一部として含む、有料のプレミアム ソリューションとして セーフティ ソフトウェア Framework (SAF) も提供しています。

完全な SAF バージョンも、NDA に基づいて評価および開発目的に限り無料で利用できるようになりました。
ご興味がございましたら、担当の NXP FAE (会社に FAE がある場合) にお問い合わせいただくか、お近くの NXP 販売代理店を通じてご連絡ください。

https://www.nxp.com/design/design-center/software/functional-safety-software/s32-safety-software-fra...


BR、ダニエル


Re: Fault Injection of ECC error on RAM

独自の関数と、参照用の疑似コードまたはサンプルコードを使用して、RAM に ECC エラーを挿入したいと考えています。

また、モジュールやドライバを使用せずに障害を注入する方法について詳しく教えていただけますか。または、それが実行可能な方法であるかどうかをお知らせください。

Re: Fault Injection of ECC error on RAM

こんにちは@Bhumika_NL

次の例をご覧ください。
https://community.nxp.com/t5/S32K-Knowledge-Base/Example-S32K344-EIM-ERM-DTCM-SRAM-ベアメタル-v3-0-S32DS3...


よろしくお願いいたします。

ダニエル

Re: Fault Injection of ECC error on RAM

こんにちは@Bhumika_NL

残念ながら、そのような擬似コードは存在しません。


BR、ダニエル

Re: Fault Injection of ECC error on RAMこんにちは、ダニエルさん。
ご回答いただき、誠にありがとうございます。
返信内容を確認しなかったことをお詫び申し上げます。

あなたの例を確認しましたが、ECCエラーを検出するための独自の関数を開発するために使用できる擬似コードのようなものを期待していました。
Re: Fault Injection of ECC error on RAM

こんにちは、danielmartynekさん、

リファレンスマニュアルのモジュールの1つに、さまざまな種類のメモリにECCエラーを注入できると記載されているのを見つけました。

 

45.2
概要
エラー注入モジュール(EIM)は、主に診断目的で使用されます。これは、現場でエラーを注入することによって診断機能(メモリECC、相互接続パリティ)をテストする方法を提供する。この方法でサポートされている機能安全機能を確認するには、チップ固有のEIM情報を参照してください。
EIMを使用すると、RAM読み出しデータやパリティビットのECCなど、システムのエラーチェック機構に人工的なエラーを注入できます。EIMがチップ上でサポートする各メカニズムについて、EIMは該当するターゲットバス内のデータに、シングルビットおよびマルチビットの反転を挿入することができる。メモリアクセス時に意図的に障害を注入することで、関連システムのSEC-DED ECC機能を検証することができる。
45.2.1
特徴
EIMには以下の機能が含まれています。

19種類のエラー注入チャネルをサポートします。チャネル割り当ての詳細については、チップ固有のEIM情報を参照してください。

2段階有効化メカニズムによる、偶発的な有効化および再構成エラー注入機能に対する保護


EIMモジュールを使用してエラーを注入できるチャネルと方法について、もう少し詳しい情報が必要です。


また、S32K3のリファレンスマニュアルで見たERMモジュールには、メモリ1、メモリ1など、さまざまなメモリがあります。

しかし、どのメモリがメモリ0で、どのメモリがメモリ1であるかなどはどこにも記載されていません。

これらについても情報を提供していただけますか?

エンシエ0
エンシエ0
メモリ0の非訂正可能割り込み通知を有効にする
このフィールドは、すべての場合でサポートされているわけではありません。以下の表には、サポートされているレジスタのみが記載されています。
注記
実例
サポートされている分野
フィールドはサポートされていません
ERM_0
CR0

ERM_1

CR0
0b - メモリ0の訂正不可能なエラーイベント情報の割り込み通知は無効になっています。
1b - メモリ0の訂正不可能なエラーイベント情報の割り込み通知が有効になっています。
29-28

予約済み
27
ESCIE1
ESCIE1
メモリ1の単一修正割り込み通知を有効にする
このフィールドは、すべての場合でサポートされているわけではありません。以下の表には、サポートされているレジスタのみが記載されています。
注記
実例
サポートされている分野
フィールドはサポートされていません
ERM_0
CR0

ERM_1

CR0
0b - メモリ1のシングルビット修正イベント情報通知が無効になっています。

 
 
 
 
 
 

 

 
 
 

Re: Fault Injection of ECC error on RAM

こんにちは、 @danielmartynek さん

この件についてご協力いただけますか?

Re: Fault Injection of ECC error on RAM

こんにちは@Bhumika_NL

EIMチャネルの割り当てに関する詳細は、リファレンスマニュアル改訂版12に記載されています。

表273 – EIMチャネルマッピング – S32K3x1、S32K3x2、S32K344/S32K324/S32K314

ERMモジュールの場合、メモリとチャネルのマッピングは以下のように提供されます。

表291 – S32K389を除くすべてのデバイスのERM_0チャネルマッピング



よろしくお願いいたします。

ダニエル

Re: Fault Injection of ECC error on RAM

改訂版12のリファレンスマニュアルを見つけるのは非常に難しいと感じています。
しかし、現在私が使用しているのはリビジョン4で、表273と表291にはメモリへのチャネル割り当てに関する情報が見つかりませんでした。そこには他にもいくつか情報が見えました。

この件に関して何かご提案いただけますでしょうか?

Re: Fault Injection of ECC error on RAM

本当にありがとうございます。それでは、このマニュアルを一度確認してみます。

Re: Fault Injection of ECC error on RAM

最新のマニュアルはこちらです (改訂版)。12):

https://www.nxp.com/webapp/Download?colCode=S32K3XXRM


BR、ダニエル

Re: Fault Injection of ECC error on RAM

現在、NXP社のS32K394マイクロコントローラに取り組んでおり、これをターゲットデバイスとして確定しました。

しかし、以前使用していたリファレンス・マニュアルには、この特定のコントローラに関する記述はありませんでした。つきましては、S32K394シリーズの適切なリファレンスマニュアルをご提供いただけますでしょうか。特に以下の詳細を含めていただけると幸いです。

  • 異なるメモリ領域へのチャネル割り当て
  • EIM(エラー注入モジュール)に関連するマッピング
  • ERM(エラー報告モジュール)に関連するマッピング

この情報は、デバッガーを使用した検証とテストを進める上で役立ちます。

Re: Fault Injection of ECC error on RAM

ありがとうございます。S32K394をお使いだとは知りませんでした。

S32K39、S32K37、S32K36リファレンスマニュアル、改訂版4、2024年11月

表210。ACP_EIM_0

表211。ACP_EIM_1

表212。ACP_EIM_2

表219。ACP_ERM_0 チャネルマッピング

表220。ACP_ERM_1チャネルマッピング


よろしくお願いいたします。

ダニエル

Re: Fault Injection of ECC error on RAM

私は上記のEIMモジュールのレジスタを使用して、SRAM0メモリ位置に対してs32k3(シングルビットとマルチビットの両方)にECCエラーを正常に注入することができました。
しかし、他のメモリ位置では、同じ方法で ECC エラーを注入することはできません。

参考のためにコードを添付します

typedef enum
{
    EIM_MEM_SRAM_L = 0
    EIM_MEM_SRAM_U = 1
} EIM_メモリタイプ;

typedef enum
{
    EIM_ERROR_SINGLE_BIT = 1
    EIM_ERROR_DOUBLE_BIT = 2
} EIM_ErrorType ;

#define IP_EIM_0_BASE  0x4050C000
#define IP_EIM_1_BASE 0x40510000
#define IP_EIM_2_BASE 0x40514000

#define EIMCR_BASE_ADDR ( IP_EIM_2_BASE + 0x0 )
#define EICHEN_BASE_ADDR ( IP_EIM_2_BASE + 0x4 )
#define EICHD0_WORD0_ADDR ( IP_EIM_2_BASE + 0x100 )
#define EICHD0_WORD1_ADDR ( IP_EIM_2_BASE + 0x104 )
void EIM_InjectSramEccError ( EIM_MemoryType mem , EIM_ErrorType errType , volatile uint32 * testAddr )
{
    uint8チャネル= ( uint8 ) mem ;
* ( volatile uint32 * ) EICHEN_BASE_ADDR = 0x80000000 ;
* ( volatile uint32 * ) EIMCR_BASE_ADDR = 0x00000001 ;
//(void)*(volatile uint32 *) EIMCR_BASE_ADDR;

/* ステップ 1: 以前の設定をクリアする */
  * ( volatile uint32 * ) EICHD0_WORD0_ADDR = 0x00000000 ;
  * ( volatile uint32 * ) EICHD0_WORD1_ADDR =  0x00000000 ;

/* ステップ 2: ECC インジェクションの設定 */
    if ( errType == EIM_ERROR_SINGLE_BIT )
    {
       
/* 1ビットのデータビットを反転 → 訂正可能 */
        * ( volatile uint32 * ) EICHD0_WORD1_ADDR = 0x00000001 ;
   }
    それ以外
    {
/* 2ビットのデータ反転 → 訂正不能なエラー */
       * ( volatile uint32 * ) EICHD0_WORD1_ADDR = 0x00000003 ;
   }

/* ステップ 3: ダミー書き込み (有効な ECC が存在することを確認) */
    * testAddr = 0xA5A5A5A5 ;

/* ステップ 4: 読み戻し → ECC エラーが発生する */
    volatile uint32 readVal = * testAddr ;

    ( void ) readVal ; /*最適化*/

   * ( volatile uint32 * ) EICHEN_BASE_ADDR = 0x80000000 ;
}

void test_ecc ()
{
    volatile uint32 * addr = ( uint32 * ) 0x20400000 ; // SRAM_L アドレスの例

/* シングルビットエラー(訂正可能)のテスト */
    EIM_InjectSramEccError ( EIM_MEM_SRAM_L , EIM_ERROR_SINGLE_BIT , addr );

/* ダブルビットエラー(訂正不能)のテスト */
    EIM_InjectSramEccError ( EIM_MEM_SRAM_L , EIM_ERROR_DOUBLE_BIT , addr );
}


手順や理解に誤りがあれば、ご指摘いただけますでしょうか。
他に何か追加すべきことがあれば、お知らせください。

しかし、SRAM0については、ECCに障害を注入することができ、ERMレジスタに障害が設定されていることを観測できます。

前もって感謝します !
Re: Fault Injection of ECC error on RAM

こんにちは@Bhumika_NL

新しいスレッドを作成していただけますか?

こちらは既に主要な品質保証体制が整っています。


ありがとうございました。


BR、ダニエル

タグ(1)
評価なし
バージョン履歴
最終更新日:
‎04-28-2026 06:01 AM
更新者: