NXPチームの皆様、こんにちは。
私は以前、S32K314上でRTC(リアルタイムクロック)機能を開発しましたが、スリープ状態から復帰した後も正常に時間を計測し続けることができました。
現在、プロジェクトをS32K328に移植しているところです。しかし、RTC機能を移植する際に、次のような問題に遭遇しました。
起動後、日付(年/月/日)はデフォルト値の1970/1/1にリセットされます。さらに、時刻(時/分/秒)は最初に設定された値を保持せず、RTCの開始点から経過した時間のみを反映します。
例えば、RTCを2026/05/08 05:06:07に初期化します。1分間の動作後、MCUが起動してRTCの時刻を読み取ったところ、日付が1970/01/01に戻っており、時刻は期待される05:07:07ではなく00:01:00と表示されていました。
この問題はS32K314では発生しませんでした。この問題の考えられる原因は何でしょうか?
よろしくお願いします。
こんにちは、ジュリアンさん。
ご回答ありがとうございます。
クロックソースについては、S32K314のプロジェクトと同じSXOSCを選択しました。ご参考までに、下記の画像をご覧ください。
初期化に関しては、S32K314 のプロジェクトと同様に、WAKEUP_REASON != MCU_WAKEUP_REASON の場合にのみ rtc_app_init() を実行します。ご参考までに、下記の画像をご覧ください。
スリープモード中もカウンターはカウントを続けると思いますが、日付と時刻はリセットされます。
私のテスト結果は以下のとおりです。
最初の電源投入時、rtc_app_init() が完了した後、システムは 2026/05/08、5 時間 6 分 7 秒からカウントを開始します。
これはCANメッセージ0x521を介して送信されます。
5分間の睡眠から目覚めた後も、カウンター(CNT)はカウントを続けます。しかし、年、月、日、時、分、秒はすべて、初期化時に設定された時刻からではなく、1970/01/01 00:00:00からカウントを開始します。
0x263の場合、バイト2からバイト5は、Rtc_Ip_ConvertTimeDateToSeconds()を使用して抽出された時間を表します。
S32K328とS32K314の違いを確認してください。
S32K328のRTCは、S32K314では同じ設定が正しく機能するのに、なぜ以前に設定した日付と時刻を保持しないのでしょうか?
こんにちは、 @Wade0905 さん。
RTCクロックソースを確認しましたか?SIRCと「スタンバイ時に有効」オプションが選択されていることを確認してください。
また、 RTCカウンタの値はウェイクアップ後にはリセットされませんが、main.cのRTC初期化コードを呼び出すことでリセットされることに注意してください。ウェイクアップイベント後にのみRTCを初期化しているようです。リセット理由を読み取って、他の種類のリセットが発行されていないか、そして誤ってRTCの値がクリアされていないかを確認してみてください。
参照できるコミュニティ投稿があります: S32K312: RTC - ウェイクアップのたびに一度リセットされないようにRTCカウンタ値を保持する。
ご自身の設定と比較してみてください。
よろしくお願いします、
ジュリアン