M5StackCore2(AWS機)にて、RTCが停止する事象が発生しております(自作プログラムのバグかもしれません)。これまでの経緯については下記記事をご参照下さい。
現在、真因の解決には至っておりませんが、ある程度対策案ができましたのでメモ書き程度ですがここにまとめます。現在、経過を観察しております。
目次
不具合内容
不具合内容
①RTCが停止する
⇒EasyLoader(非AWS用)で確認
②RTC読み出し値が異常
⇒画面にタッチするとRTC時刻のみ異常発生(画面表示で確認)
対策
対策(案)
①M5.Rtc.begin()を挿入する
②M5.update()を使わない
:
※WiFi電波が届かない場所に設置しないのであれば、RTCを捨てるのもあり
説明など
①の説明など
RTCのクロックが停止しているのであればクロックを動かしましょう。と言うことで仕様書を確認しました。RTCのデータシートは下記です。
https://m5stack.oss-cn-shenzhen.aliyuncs.com/resource/docs/datasheet/core/BM8563_V1.1_cn.pdf
7ページ目。レジスタを確認すると00Hの第5ビットがSTOPビットになっており、ここが1の時にクロック停止になります(0でクロック動作)。
次にRTC.cppを確認するとbegin()内でレジスタ00Hに0を書き込んでいるのが分かります。他のレジスタ(01H,0DH)への書き込みも私の使い方では問題無いようです。よって、これを使うことにしました。具体的には、NTP時刻とローカル時間を同期処理後、RTCに日時を書き込んだ後(うしろ?下に?)にM5.Rtc.begin()を挿入しました。時刻同期処理の後処理として毎回実行します。
②の説明など
タッチスクリーンに触ってRTCの読み出し値が飛ぶ不具合についてですが、読み出し値が飛ぶ場合は、例えば下記のようになります。
”2000/00/00,00:00:00″
表示処理の不具合ではなく、表示処理に渡すデータの段階で何かが起きているようです。
taskENTER_CRITICAL/taskEXIT_CRITICALでなんとかなるのかもしれませんが、M5.update()を実行しないようにしました(タッチスクリーン処理を捨てました)。
以上の対策で、現状、不具合は発生することなく動作しています。まずは24時間程度様子を見て効果の有無を確かめたいと思います。
追加メモ
⇒追記: M5.Rtc.begin()でRTCが再スタート(再開)することを確認しました(8/11 16時頃)
⇒追記: RTCをgetLocalTimeに切替。つまりRTC諦めた(8/11 22時頃)
⇒追記: RTCへのアクセスは、LCD表示とNTP時刻同期のみ(他はgetLocalTimeを使用)
⇒RTC停止、未発生(24時間程度稼働)
⇒RTCを停止させないヒントあるかも(8/12 23時頃)