概要
たまたま、Seeed StudioのRaspberry Pi用高精度RTC(DS3231)を使う機会があった。その際、DS3231に搭載されているはずのAlarm機能がうまく動いていないかのような挙動を示し混乱した。いろいろ調べたところ、
Seeed StudioのRaspberry Pi用高精度RTC(DS3231)のS/INT端子はDS3231 ICの3番ピンINT/SQ端子と接続されていない!!!
ということだ。スイッチサイエンスの販売ページには、
二つのプログラム可能な時刻アラームを備え、またプログラム可能な矩形波出力を提供します。INT / SQWピンが、アラームの状況次第で割り込み信号を生成するか、あるいは矩形波信号を出力し、INTCNビットによって制御されます。
と書いてあり、いかにもモジュールの機能として使えそうな気がしてしまう。
詳細
おかしな挙動に気づく
I2Cで、レジスタ設定を何度も見直し、Alarm発動のコンディションになったにもかかわらず、モジュール基板のS/INT端子が動かなかった。DS3231のデータシートを見ると、
This open-drain pin requires an external pullup resistor connected to a supply at 5.5V or less.
と書いてあり、なるほどこのせいか!と思ったが、当然プルアップ抵抗をつないで使っていたので、よく考えると違う。。。そもそも自分がモジュール上の回路構成を勘違いしている?
回路図は合っている???でも、テスタで当たってみると。。。やっぱりおかしい
回路図を見てみたところ、基板上でプルアップされ、なおかつモジュール基板のS/INT端子に確かにつながっている。回路は正しいようだ。
しかし、動かないということはほかに何か原因がある気がする。そこで、テスタで直接ICのINT/SQ端子と周辺のプルアップ抵抗やモジュール基板のS/INT端子間がつながっているか調べてみた。
- プルアップ抵抗4.7kΩはVDDとS/INT端子の間につながっている → 正しい
- ICのINT/SQ端子とプルアップ抵抗、S/INT端子の抵抗値は非常に大きい、不導通 → 回路図と違う!!!
というわけで、回路図と明らかに異なる部分を発見。しかし、これはたまたま不良品をつかんだ可能性がある。複数買ってあったので、他も同様に調べたところ、なんと同じ結果。 つまり、モジュール基板のつくりとして、つながっていない
ということが分かった。しかし、そんなはずないよね???まさかとは思うが、回路パターン図も見てみるか。。。
本当に、パターンがつながっていなかった
パターン図を見てみたところ、確かにつながっていない!!!
これには、かなり愕然とした。完全に、混乱の原因が理解できた。
気になる記述
このモジュールのwikiには、実は以下のようなことが書かれている。
1- The chip itself supports the alarm function, we also reserved the relevant hardware interface, but our software library does not include this function(S/INT pin), you need to carry out related software development.
つまり、
IC自体はAlarm機能をサポートしていて、モジュールには関連するハードウェア(つまり、INT/SQにつながるはずのプルアップ抵抗など)も準備してあるが、ソフトウェアライブラリには、機能は入っていません。ご自身でソフト開発して下さい。
と言っているように見える。つまり、ソフトは非対応ですよと言っている気がする。でも、実際には、ハードウェアも非対応だと思う。 うーん。。。
ちなみにほかの製品は大丈夫そう
ちなみに、同じICを使用したAdafruitのモジュールは、接続されている。ちゃんと回路パターン図がこちらに載っていた。安心。でも、ずいぶんと値段が高い。
自力で配線する
悔しいので、ICの3番ピンの足から、モジュール基板のGPIO4端子(これは、GPIO4が使えるように、モジュール上の回路とは全くつながっていない)に直接配線して機能を使えるようにした。この場合、プルアップ抵抗はモジュールの外部で用意する必要がある。もちろん、本来のS/INT端子に配線してもいい。その場合はプルアップ抵抗は配線済みとなる。
まとめ
というわけで、まさか端子にそれらしき名前がついているのに配線されていないなど、考えもしなかったため、原因をみつけるまでとても時間を食ってしまった。非常に残念。