こんにちは、
S32K358で高速スタンバイ機能をテストしたいです。S32DSでIPレイヤーのデモを作成しました。このプログラムは起動後5秒で高速スタンバイ状態に入り、3秒後にRTC-APIによって起動されます。これは問題なく動作します。
そこで、このプロジェクトを参照して、MCALレイヤーのデモを作成するためにEBプロジェクトを設定しましたが、失敗しました。高速スタンバイ状態になってから3秒後、電流が増加した。これはデバイスが起動したことを示唆しているが、メイン機能には移行しなかった。PE Microで接続した後、以下のエラーメッセージが表示されます。
割り込みコマンドを受信しました。執行を停止します。
UsageFault: 無効な EPSR.T または EPSR.IT フィールドで実行された命令。
バスフォールト:不正確な(非同期)データアクセスエラーが発生しました。
ハードフォールト:障害がハードフォールトにエスカレートしました。
ウェイクアップ後のベクトルテーブルを以下に示します。
1.png1.png
PCレジスタは0x0です。スタックの内容を確認すると、FastWkup_EntryAddressが入力されており、ハードフォールトはReset_Handlerにジャンプした後に発生します。
2.png2.png
3.png3.png
4.png4.png
FastWkup_EntryAddress に while(1) ループを追加しても、ハードフォルトは依然として発生します。
5.png5.png
スタンバイモードに入ると、単語が出てきます。
このプロジェクトでは、PMIC_PGOOD_HNDSHK_BYPが有効になっています。この基板には外部水晶発振器が搭載されていないため、コアクロックとしてFIRCが使用されています。
S32K358
RTD6.0.0
S32DS3.6.3
EB29.0
BR、
ジェイソン
こんにちは、@Jason07 さん。
高速スタンバイ起動時、sBAFはVTORをカスタムベクターテーブルアドレスに設定します。
しかし、あなたのベクターテーブルには3つのエントリしか定義されていません。
初期SP、
リセットハンドラ (FastWkup_EntryAddress)、
NMIハンドラー。
つまり、ハードフォールトベクトルが抜けているのです。
何らかの故障が発生すると、CPUは定義されていないハードフォールハンドラーアドレスを取り出し、これがPC値の原因となる可能性があります。
この問題をさらにデバッグするには、ベクターテーブルに適切なハードフォルトハンドラを追加してください。それらが設定されると、ハンドラーが0x0にクラッシュする代わりに呼び出され、スタックされたPC、LR、そして元の故障の構成可能な故障状態レジスタ(CFSR/BFAR)にアクセスできます。
ありがとうございました。
BR、ダニエル