こんにちは、
NXPのコミュニティ投稿で提供されている例を参考に、S32K3シリーズ(K312)のスタンバイモードを実装しようとしています。
私のプロジェクトでは、通常動作時に外部クロックソースを使用し、ウォッチドッグタイマーを設定します。
ドキュメントや例から理解しているのは、スタンバイモードに入る前にFIRECを使う必要があるということです。
STANDBYに入る前にFIRCに切り替えると、ウォッチドッグタイマーが作動し、MCUがリセットされます。これは想定される動作ですか?さらに、ウォッチドッグを無効にするとMCUは低消費電力状態に入りますが、ウェイクアップソースからのリセットはしません。
一方、FIRCに切り替えずに直接STANDBYに入ると、ウォッチドッグはリセットをトリガーせず、MCUは低消費電力状態に入り、STANDBYで期待されるウェイクアップソースからリセットされます。
一見すると、アプローチ2(FIRCに切り替えない方法)がうまくいくように見えますが、パッドキーピングで奇妙な挙動を目撃しているので、確認しておきたいと思います。
STANDBY(アプローチ2)に入る前にパッドをハイに切り替えると、パッドキーピングが有効か無効かに関わらず、MCUがSTANDBYに入った後もパッドは高いままです。これを見て、MCUが本当にSTANDBYに入っているのか、それとも中間状態にあるのか疑問に思います。
この投稿はかなり曖昧だと承知していますが、追加で説明できる情報があれば教えてください。
よろしくお願いいたします。
ハリーシュ
こんにちは、 @Hareesh_S さん、
まず、スタンバイモードに入る前に、システムクロックソースを48MHzのFIRCに変更する必要があります。これは、スタンバイモードではPLLDIGが使用できないためです。この手順に従わない場合、予期しない/定義されていないクロック動作が発生する可能性があります。
STANDBYに入る前にFIRCに切り替えると、ウォッチドッグタイマーが作動し、MCUがリセットされます。これは想定される動作ですか?さらに、ウォッチドッグを無効にするとMCUは低消費電力状態に入りますが、ウェイクアップソースからのリセットはしません。
デフォルトでは、POR_WDGはスタックシナリオにおけるスタンバイ入退出シーケンス監視のために有効になっています。
Julin_AragnM_0-1785518283148.png
コミュニティで提供されているサンプルでも、同様の現象が発生しますか?クロックソースを変更するためにRTD APIを使用していますか?
STANDBY(アプローチ2)に入る前にパッドをハイに切り替えると、パッドキーピングが有効か無効かに関わらず、MCUがSTANDBYに入った後もパッドは高いままです。これを見て、MCUが本当にSTANDBYに入っているのか、それとも中間状態にあるのか疑問に思います。
1.スタンバイモード中も、すべてのピンは実行モードで最後に設定された状態を保持します。
2. リセットイベント後、すべてのピンはデフォルト状態に戻されます。
PadKeepingの設定は 、K3のウェイクアップリセットとユーザーのポート初期化の間に、スタンバイ終了シーケンス 後の ピン状態に影響を与えます。この間、ピンが制御不能な状態に入ることがあります。
Julin_AragnM_2-1785519093000.png
よろしくお願いします、
ジュリアン
こんにちは、 @Julián_AragónM さん、
返信が遅くなり申し訳ありません。
パッド保持機能についてですが、どうやら私はパッド保持機能の本来の機能を誤解していたようです。ご説明いただきありがとうございます。
STANDBYエントリに関して - この動作は、変更されていないコミュニティのサンプルでは再現できません。コミュニティのサンプルコードでは、この手順は期待どおりに動作します。
さらに、私のプロジェクトでFIRCに切り替えるとMCUがハードフォールトを起こし、それがウォッチドッグがリセットをトリガーする理由であることを今確認できました。
この挙動を空のプロジェクトで再現することはできましたが、根本原因がわかりません。プロジェクトを添付していますが、同じ内容を確認して、私が見落としていることを教えていただけませんか?
よろしくお願いいたします。
ハリーシュS
こんにちは、 @Hareesh_S さん、
PadKeepingの機能に関する疑問が解消されてよかったです。
あなたのプロジェクトについてですが、Clock_Ip_Init()に電話をかけたところ、 Clock_Ip_SetRtcRtccClksel_TrustedCall()にハードフォールトが見えます。PRTN1_COFB1_CLKEN[REQ34]を有効にすると、Clock_Ip_Init() APIを通じてクロックソースを変更できます。
この修正をあなたのプロジェクトで試してみてはどうですか?
Julin_AragnM_0-1786382290784.png
Julin_AragnM_1-1786382522241.png
Julin_AragnM_2-1786382602253.png
よろしくお願いします、
ジュリアン
こんにちは@Julián_AragónM
RUNドメインでRTCモジュール/ペリフェラルを有効にした後、FIRCへの切り替えは期待通りに動作し、ハードフォルトを引き起こしません。
RTCの有効化が必須だとは予想していませんでしたが、迅速な対応に感謝いたします!