こんにちは、
U-Boot を介して、i.MX8DXL EVK (MCIMX8DXL-WEVK) 上の外部アクティブタンパーループを検証しています。
基板の回路図から、J20(TAMPERヘッダー、1x3)の配線が以下のようになっていることを確認しました。
- ピン 1 = TAMPER_IN4 (ネット SNVS.TAMPER_IN4、ボール AJ13)
- ピン2 = GND
- ピン3 = TAMPER_OUT0 (ネットSNVS.TAMPER_OUT0、ボールAP22)
これらは専用のSNVSピンであり、TAMPER_OUT1-4/IN0-3のようにSAI2/SAI3と共有されていません。
使用可能な U-Boot コマンド: tamper_pin_cfg、snvs_cfg (サブレジスタ hp.lock、hp.secvio_intcfg、hp.secvio_ctl、lp.lock、lp.secvio_ctl、lp.tamper_filt_cfg、lp.tamper_det_cfg、lp.tamper_det_cfg2、lp.tamper_filt1_cfg、lp.tamper_filt2_cfg、lp.act_tamper1_cfg ~ lp.act_tamper5_cfg、lp.act_tamper_ctl、lp.act_tamper_clk_ctl、lp.act_tamper_routing_ctl1、lp.act_tamper_routing_ctl2 を含む)、snvs_sec_status、snvs_clear_status。
TAMPER_OUT0/TAMPER_IN4はアクティブなタンパーペアを形成するため、私の質問は次のとおりです。
1. どのlp.act_tamperN_cfgチャネル(1-5)がTAMPER_OUT0に対応しているか?
2. lp.act_tamper_routing_ctl1/routing_ctl2ルートTAMPER_OUT0のパターンの値をTAMPER_IN4と比較してチェックする価値は?
3. このチャネルのパターンクロックを可能にするlp.act_tamper_clk_ctlの値は何?
4. このチャネルのアクティブ改ざん検出を可能にするグローバルなlp.act_tamper_ctl価値は何でしょうか?
目標:J20ピン1~3間のジャンパーを閉じるとsnvs_sec_statusでセキュアと表示され、ジャンパーを開くと違反が発生するようにする。
ハードウェア上でいくつかの値を試しました(ルーティング4、5、10、さまざまなクロック/検出器設定)が、すべてSECOファームウェアによって拒否されるか(エラーres:9 / SC_ERR_PARM)、物理的にループを切り替えたときにsnvs_sec_statusのSNVS a4(1)(LPTDSR)レジスタに目に見える変化がないまま受け入れられました。
i.MX8DXLにおける外部アクティブタンパー検証に関するリファレンステスト手順またはアプリケーションノートはありますか?
よろしくお願いします!
こんにちは、
1. lp.act_tamper1_cfg は TAMPER_OUT0 を駆動します。
2. i.MX8DXL SNVSは、5つのアクティブタンパー(AT)出力ソースと最大8つの外部タンパー(ET)入力検出器を備えています。
この設定を使用してください。
lp.act_tamper_routing_ctl1 = 0x00010000 # ET5 (TAMPER_IN4) から AT1 (TAMPER_OUT0) へ
lp.act_tamper_routing_ctl2 = 0x00000000 # ET6-ET8 は使用されていません
3. その値はクロック分周器を変更します。最大周波数設定には0x00を使用してください。
lp.act_tamper_clk_ctl = 0x00000000
4. lp.act_tamper_ctl = 0x00010001 を使用します。
ビット0:AT1ENはAT1 LFSRパターンジェネレーターを有効化します。
ビット16:AT1_OUT_ENがTAMPER_OUT0パッドをAT1パターンで駆動する
このプロセッサに関するアプリケーションノートはありませんが、i.MX7から参照として利用できます。
/* Config ET5 (pin in et4) <-> (pin out et5) AT 1 *
/* reset */
write32(0, &svregs->lp.act_tamper_clk_ctl);
write32(0, &svregs->lp.act_tamper_ctl);
write32(0, &svregs->lp.tamper_det_cfg);
write32(0, &svregs->lp.tamper_det_cfg2)
/* Deault value for LFSR */
write32(0x84000000 | 0x00001111, &svregs->lp.act_tamper1_cfg)
/* Set the clock at max freq */
write32(0x00000000, &svregs->lp.act_tamper_clk_ctl);
/* ET5 (pin et4) takes ref from AT1 (pin et5) */
write32(0x00010000, &svregs->lp.act_tamper_routing_ctl1);
write32(0x0, &svregs->lp.act_tamper_routing_ctl2)
/* activate out pad of AT1 and enable it, AT1 output on pin et5 */
write32(0x00010000 | 0x00000001, &svregs->lp.act_tamper_ctl)
/* Configuring IRQs and secviols */
write32(0x8000003f, &svregs->hp.secvio_intcfg);
write32(0x4000003f, &svregs->hp.secvio_ctl);
write32(0x0000003f, &svregs->lp.secvio_ctl)
/* Activating detector for ET5 */
write32(0x00000000, &svregs->lp.tamper_det_cfg);
write32(0x00000004, &svregs->lp.tamper_det_cfg2);
よろしくお願いいたします。
設定していただきありがとうございます。電源を入れた直後に正確に適用しました。
snvs_dgo_cfg 0 0 20000000 0 80000000 0
snvs_cfg 0 8000003f 4000003f 0 3f 0 0 4 0 0 84001111 0 0 0 0 10001 0 10000 0
読み戻しはあなたの値と一致します: SNVS e8(2) = 00010000 00000000、SNVS 48(2) = 00000000 00000004、SNVS e0 = 00010001、DGO 20 = 20000000、DGO 40 = 80000000。
結果: LPTDSR (SNVS a4) = 00000004 (ET5D セット)。ジャンパーなしでも、J20ピン1(TAMPER_IN4)とピン3(TAMPER_OUT0)の間に絶縁ジャンパー接続した場合も、どちらも00000004読み取ります。snvs_clear_status 107ff ff の後も 00000004 のままです。つまり、ループを開いた状態で検出は主張しますが、ループを閉じているとクリーンな0000000状態は一度も得られません。
質問:
1.このEVKのTAMPER_OUT0 / TAMPER_IN4ループでは、ワイヤードジャンパーループの場合、パッドまたはプル設定(例えばDGO tamper_pull_ctl)や、異なるact_tamper_clk_ctl値が必要ですか?
2. 改ざん状態がまだ存在する間に、snvs_clear_statusはLPTDSRをクリアすることが期待されていますか?
3. ループが閉じていると認識されるために、他に何か設定が必要ですか?
再度、感謝します。