プロジェクト開始前に、s32k144を使用してバックドアテストを検証したいです。
unsecureProjectに関するサンプルコードがあります。(Example_S32K144_Verify_Backdoor_Access_Key_S32DS1.3_v2.zip)
サンプルコードとリファレンスマニュアルを比較して、いくつか質問があります。
1.Verify Backdoor Access Keyに関するリファレンス・マニュアルによると、以下の表のように記載されています。
FCCOB 番号 0 はコマンド時に使用されます。
しかし、コードでは、コマンドのときにFCCOB番号4が使用されます。
だから考えたんだ。
FTFC->FCCOB[0x0] = 0x45; // バックドアキー検証コマンド (0x45)
FTFC->FCCOB[0x3] = 0x45; // バックドアキー検証コマンド (0x45)
どちらが正しいですか?
2. ロックとアンロック(バックドアアクセスの確認)機構を確認したい。
初め。T32を使用してバックドアキーを設定します。(普通のやり方ではないことは分かっています。)通常はコードを挿入します)
例) Data.Set SD:0x400 %LE %Long &pwd_Head
データ.Set SD:0x404 %LE %Long &pwd_Tail
データ.Set SD:0x40C %LE %Long 0xFFFF7FBF
2番。リセットすると、FSECレジスタ(0x40020002)はフラッシュ構成フィールド(0x40C)のセキュリティバイトに格納された値で初期化されます。
Q.2-1。これは、デバイスがリセットされるまで非セキュア状態のままであり、リセット後にFSECレジスタ(0x40020002)が0x40Cから読み取られた値で更新され、デバイスがセキュア状態に入るという意味でしょうか?
三番目。バックドアアクセスを確認する際、以下のリファレンス・マニュアルに「キャプチャ」と記載されています。
Q. 2-2.これは、FSECレジスタが一時的に非セキュアモードに変更され、リセット後に元の状態に戻るという意味でしょうか?リセット時に、FSECレジスタ(0x40020002)は再び0x40Cから値を読み取る、ということですよね?
問2-3この更新が行われるとき、セキュリティ関連ビットだけが変更されるのか、それともFSECバイト全体が上書きされるのか?
例えば、遷移はBF → FEなのか、それともBF → BEなのか?
3. この説明に基づくと、キーが一致しない場合、デバイスはリセットされるまで保護されたままになります。この場合、バックドアアクセスが無効化された場合、どのようにデバイスをリセットできますか?
4. 次のコマンドを実行すると:
データ.Set AD:0x40020000 %バイト 0x30
そしてすぐに、以下の方法で読み返してください。
データ.Byte(AD:0x40020000)
値は依然として0x80のままです。
この行動の理由は何で、それは何を意味するのでしょうか?
==================================================================
だから、私は思う
右?
また、バックドア比較キーがstartup_S32K144.Sに現れますが、これはmain()に入る前に設定が適用されるという意味でしょうか?
=================================================
アドレス0x40000100または0x40000104を使用して、セキュリティ保護されていない状態を確認します。
これは正しいですか?
リファレンス・マニュアルには関連する説明が見つかりませんでした。
ありがとう。
#s32k144 @backdoor アクセス
こんにちは、 @LGI さん。
A4フォローアップ:
アドレス0x40020000にFSTATレジスタがあります。
前述の通り、このレジスタは0から1までのビットを設定する書き方はできません。
ビットに「1」を書き込むとクリアされるだけです(W1C – Write-1-to-clear)。したがって、「1」を書き込んでもビットは設定されず、既に「1」になっているビットがクリアされるだけです。
A8のフォローアップ:
これらはMDM-APの状態および制御レジスタで、Arm Debugアクセスポート(DAP)を通じてのみアクセス可能です。
例えば、このスクリプトでは使用されています。
よろしくお願いいたします。
ダニエル
ご回答ありがとうございます。@danielmartynek
それでは、いくつか質問がありますので、お答えください。
A4。アドレス0x40020000に0x30を書き込みましたが、読み戻したときに値は0x30に変わらず、0x80のままでした。
この行動の理由は何で、それは何を意味するのでしょうか?
Q8.これは実際にはTrace32の例に関連しています。
S32K144のTrace32例では、セキュリティ状態情報のためにアドレス0x40000100と0x40000104が使われています。
しかし、0x40000100と0x40000104の住所に関する情報は見つかりませんでした。私が質問しているのはまさにその点です。
再開まで今しばらくお待ちください。
こんにちは、 @LGI さん。
A1:
これは FTFC->FCCOB[0x3] = 0x45; // バックドアキー検証コマンド (0x45) です。
FCCOB0はメモリマップの4番目のレジスタだからです。
A2: プログラマーやデバッガを使ってフラッシュ構成フィールドをプログラムできますが、セクターは事前に消去しておく必要があります。一括消去を行うと、FSECバイトも非セキュア状態にプログラムされることに注意してください。
A2.1: はい
A2.2: はい
A2.3:FSEC[SEC]のみ。
A3:MCUには多くのリセットソースがあります(RM、25.2.2システムリセットソース)。
デバッガはピン(PTA5)をアサートすることでMCU Reset_bリセットできます。
A4: レジスタへの書き込みにはW1C機能のみがあります。
Q5: S32K144にデータをプログラムする際、設定値は0x400~0x40Fの領域に書き込まれます。
A5: はい
Q6: MCUがリセットまたは再起動されると、FTFCレジスタは0x400–0x40F領域に保存された設定値を読み取り、それらの設定に従って動作します。
A6: はい、MCUはフラッシュ構成フィールドの値をFTFCレジスタに読み込みます。
Q7: また、バックドア比較キーはstartup_S32K144.Sに現れますが、これはmain()に入る前に設定が適用されるという意味でしょうか?
A7: リセットが必要ですが、これはプログラマー/デバッガーがプログラミング後に通常行うことです。
Q8: アドレス 0x40000100 または 0x40000104 を使用して、セキュリティ保護されていない状態を確認します。これは正しいですか?
A9:私はあなたが言っているような人間ではありません。詳しく説明してください。
よろしくお願いいたします。
ダニエル