Armadilloフォーラム

Armadillo4x0 RTCの時計タイプについて

sankyo_takada

2016年8月26日 15時53分

お世話になります。
高田と申します。

Armadillo400シリーズのRTCオプションモジュール(OP-A400-RTCMOD-01)について質問です。
搭載されているRTC「S-35390A」の仕様書を見ると12H/24H時計の設定ができるようです。
Armadilloを起動すると24H時計が設定されるという認識なのですが合っていますでしょうか?
また、12H/24H時計の設定を行っている場合、指定箇所はどこになるのでしょうか?

環境
Armadillo410
Linux2.6.26

よろしくお願いいたします。

コメント

at_takashi.sasayama

2016年8月30日 9時59分

笹山です。

> 搭載されているRTC「S-35390A」の仕様書を見ると12H/24H時計の設定ができるようです。
> Armadilloを起動すると24H時計が設定されるという認識なのですが合っていますでしょうか?

ご認識の通り、24H時計に設定されています。

> また、12H/24H時計の設定を行っている場合、指定箇所はどこになるのでしょうか?

ドライバソース drivers/rtc/rtc-s35390a.c 132行目
s35390a_reset 関数内の以下処理で24H時計に設定されます。

 132         buf[0] |= (S35390A_FLAG_RESET | S35390A_FLAG_24H); //24H時計への設定フラグをセット
 133         buf[0] &= 0xf0;
 134         return s35390a_set_reg(s35390a, S35390A_CMD_STATUS1, buf, sizeof(buf));

本処理は、RTCモジュールが放電しきっている状態で、Armadilloに接続、起動した際に実行されます。

こんにちは

差し支えなければ、12H時計の設定にしたい理由を教えてもらってもよいですか?

RTCは、基本的に起動時に system clockを設定するために使用します。RTCをアプリケーションから
直接扱うことは少ないと思うのですが、なにか12Hの用途があるのでしょうか?

お世話になります、高田です。
早々のご回答ありがとうございました。
大変参考になりました。

> 差し支えなければ、12H時計の設定にしたい理由を教えてもらってもよいですか?

正確には12H時計にしたかったわけではなく、12H/24Hの設定をどのように行っており、
コントローラ(S-35390A)の仕様がどうなっているのかを知りたかったためです。
といいますのも、以下の現象が発生したのですが、その原因としてRTCの12H/24H時計が関連していたためです。

<現象>
ユーザーアプリから時計設定を行うと、0:00-11:59までは正常に時計設定できるが、
12時以降の時刻を設定すると、装置再起動後に時間が「0」になる。

例)
12:30を設定する場合

時刻を12:30に設定
(dateコマンドで時刻を確認すると12:30となる)
 ↓
装置再起動
 ↓
時刻が12:30となるべきところ、0:30になる

<原因>
前提条件として、本装置では高速起動ソリューションのWarp!!を実装しており、
通常はWarp!!による高速起動を行っています。
このWarp!!とRTCコントローラの12H/24H時計設定の組み合わせにより上記現象が発生していました。

RTCのバッテリーを外すとコントローラが初期化され、時計形式が12H時計になります。
この状態で装置を起動すると、Warp!!のスナップショットから起動するため、Linuxの起動処理が飛ばされ、
ユーザーアプリ起動後の状態を復元します。
(Linuxの起動処理が走らないため、RTCの設定が実行されない)
ユーザーアプリは24H時計で時計設定しようとするのですが、RTCのコントローラは12H時計のため、
時間が12-23は不正値となります。RTCコントローラの仕様から不正な時間が設定された場合は「0」が
セットされるとのことでした。
上記シナリオにより現象が発生したと考えます。

Linuxを通常起動する場合は問題にならないのですが、
Warp!!との組み合わせでは上記を考慮する必要がありそうです。

> Linuxを通常起動する場合は問題にならないのですが、
> Warp!!との組み合わせでは[RTCの設定]を考慮する必要がありそうです。

情報ありがとうございます。
Lineo さんにも展開してみます。

at_yuma.arakawa

2016年9月6日 11時49分

荒川です。

> 時刻が12:30となるべきところ、0:30になる

こちらでも、Armadillo-410 液晶モデル開発セットで
Warp!! 有償版SDK(NOR版)を使用して試してみたのですが、
再現を確認することができておりません。

ご報告の内容から以下のように試してみたのですが、
手順に違いなどありませんでしょうか。

1. タッチスクリーン上から時刻設定
1. [RTC]ボタンをタッチ
2. "Real Time Clock Test"画面で"Time"の行の"▲"・"▼"ボタンで時刻設定
3. [Set]ボタンをタッチ
2. コンソール上でdateコマンドで時刻設定を確認
[armadillo]# date
Tue Sep 6 12:30:04 JST 2016
3. スナップショット保存
[armadillo]# snapshot
4. Armadillo再起動(※)
[armadillo]# reboot

(※) haltコマンドでシャットダウンし、
電源を切り、再度電源を入れた場合も同様
(RTCの電池も外しております)

高田です。

随分とご連絡が遅くなりまして申し訳ありません。
(別案件で手を取られていました、、、)
今更ながらご回答いたします。

>ご報告の内容から以下のように試してみたのですが、
>手順に違いなどありませんでしょうか。

現象が再現する手順は以下でした。
下記手順7で時刻が0:30になってしまいます。
なお、動作確認に使用したユーザーアプリは弊社で作成したものになります。

1. Linux通常起動後、ユーザーアプリが起動したところでスナップショット取得
2. Armadilloの電源を切り、RTCの電池を外す
3. 電池を取り付けてArmadillo起動
4. hwclock --hctosys --utcコマンド実行(日付は2000/1/1になる)
5. 時計設定(12:30)
6. Armadillo再起動
7. hwclock --hctosys --utcコマンド実行

スナップショットから起動するとスナップショット取得時刻を再現してしまうため、
hwclock --hctosys --utcコマンドにてハードウェアクロックからシステム時間を設定しています。
手順7で上記コマンド実行後、時間(hour)のみ「0」になるようです。

よろしくお願いいたします。