2

NXP LPC17xx ファミリ マイクロコントローラ (LPC1759 および LPC1768) を使用しています。

RTC が確実に実行されているかどうかを確認するにはどうすればよいですか?

でテストを行っています

LPC_RTC->CCR & RTC_CCR_CLKEN

しかし、あまり信頼できないようです。デバイスの電源を入れると、3197 年頃の値が表示されました。

RTC が実行されていて、その値が壊れていないことを確認するにはどうすればよいですか?


編集:

最終的に、RTC 値に単純な健全性チェックを追加しました。

bool        DateTime::validate( const RTC_TIME_Type &time_info )
{
       if ( time_info.YEAR > 2100
               || time_info.DOY > 366
               || time_info.MONTH > 12
               || time_info.DOM > 31
               || time_info.HOUR > 23
               || time_info.MIN > 59
               || time_info.SEC > 59 )
               return        false;

       return        true;
}

以下に示すように、POST中に実行されます。

4

3 に答える 3

3

私は約 5 年前にそのチップの祖父 (LPC2148) の RTC と戦いました。Yahoo LPC2000 グループ(LPC1000 チップも扱っています) を見ると、RTC とその問題が頻繁に出てくることがわかります。

とにかく、ここでは記憶から行っていますが、ステータス レジスタの読み取りは十分に信頼できないという結論に達したと思います。おそらく問題は、電源が取り外されたときにバッテリーバックアップが存在しない場合、物事が混乱することだった...

そのため、起動段階で行ったことを思い出すと、次のようになります。

(1) RTC ペリフェラルを有効にする

(2) すべての RTC レジスタを読み取ります。ファームウェアでは、各フィールドに「範囲外」の最小値と最大値を設定します (たとえば、年は少なくとも 2005 年で、2030 年を超えてはなりません)。

(3) いずれかの値が範囲外の場合、日付と時刻をハードコードされた値 (例: 2005 年 1 月 1 日) にリセットします (製品を起動すると、ユーザーは時刻/日付を調整できます)。

(4) レジスタのスナップショットを取得します。少なくとも 1 秒待ってから (タイマー周辺機器を使用して時間を測定します)、値が変更されたことを確認します。起動時に、1 秒の目盛りですべてがロールオーバーされるように値を設定し (おそらく 12 月 31 日の真夜中の 1 秒前)、すべてが変更されたことを確認してから、元の値 + 1 秒。(秒のずれを避けるために値が変化するので、これを正しく行う必要があります)

コードを掘り下げて、他に何かあるかどうかを確認します。その周辺機器の POST を通過する前に、いまいましいものを実行して動作を確認する必要があると最終的に結論付けたことを思い出します。

(ついでに言いましたが、繰り返します...電源投入時に値が壊れているように見える場合は、バッテリーバックアップ回路がしっかりしていることを確認してください-通常はダイオードのペアを備えた基本的な回路でも)製品が動作しているときは時計が動いているが、電源が切られるとその頭脳が混乱する可能性があります。)

于 2011-08-14T20:08:02.223 に答える
2

また、ここで気まぐれなRTCに直面しています....

本当に信頼できるテストが可能だとは思いません。最後に記録された時間を不揮発性メモリのどこかに保存し、時計が過去の日付に移動していないことを確認できます。また、2 つのチェックの間のデルタをテストすることもできます。大きすぎません。それは3000年のようなものをキャッチしますが、テストされたタイムラプスを1か月に短縮することはできません.1年棚上げされていたとしても、物事を目覚めさせたいのです。

起動時にタイム ソースを参照する可能性はありますか? たとえば、コントローラーが通信する ntp サーバーまたはその他のデバイスは、信頼できる時刻源と同期していると見なすことができますか?

于 2011-08-14T18:39:44.040 に答える
0

RTCクロックを外部ピンにルーティングし、オシロスコープまたはロジックアナライザで監視できます。

IIRC私はLPC1766/1768に対してまさにそれを行いました(2つの同じボードに異なるプロセッサが搭載されています)。

于 2012-09-21T14:43:37.497 に答える