# PC2129 rtc board についての Tips ## 抵抗 R5 の存在意味 R5 は、PCF2129 の INT# が落ちた時に GPIO3 がなにかしらの要因で HIGH を出力してしまうと、その経路上に 電流を制限するデバイス(抵抗など)がなく、ショートしてしまうので、それを防ぐために挿入するものである デバイス保護のための抵抗であるが、これが回路動作にあまり良くない影響を与えることがあるので、以下注意点を記す ### R5 の抵抗値はいくつがいいのか 結論から言うと、GPIO3 が push-pull で 3.3V を出力することがないのであれば R5 は 0Ω(短絡)が良い GPIO3 が push-pull で 3.3V を出力する可能性を排除しきれないのであれば R5 は 510Ω程度が良い ### R5 に 510Ω を選択する理由 PCF2129 の sink 電流は、絶対最大定格が 10mA である(データシートより) 余裕を見て、3.3 / 510 * 1000 = 6.5mA の電流値で抑えられるような抵抗値を選んでいる ### R5 に 510Ω を選択した場合の悪影響 ここで問題が有り、ラズパイ4B が 3B と同様に GPIO3 が 1.8kΩ でプルアップされているとすると、 PCF2129 の INT# が GND に落ちても、510/(1.8k + 510) * 3.3 = 0.73V の電圧が GPIO3 にかかってしまい、 0V まで落ちない現象が起こる。 以下のサイトから「Raspberry Pi 4 Model B product brief」をダウンロードして電気特性を確かめようとしても、 VIL を始め、数値が TBD ばかりで全く情報が得られず、この 0.73V が電気的に LOW を満たしているかの確認が取れない。 https://www.raspberrypi.org/products/raspberry-pi-4-model-b/specifications/ 作者の環境では LOW と認識されるようではあるが、公式の情報からは動作の保証は得られない。 また、おそらくは回路構成の問題も有り、R1 と D1 が実装されていると、PCF2129 の INT# が落ちても GPIO3 の 電圧が十分に下がらず、wakeup が出来ない現象が起きる。 ### R5 に 0Ω を選択した場合の利点と悪影響 PCF2129 の INT# が GND に落ちると GPIO3 は 0V になるので、510Ωを選択した場合のような心配はない 万が一 PCF2129 の INT# が GND に落ちてるときに GPIO3 が 3.3V 出力するとショートが起き、デバイスに ダメージを与える可能性がある ### R5 に 0Ωを選択する場合に注意すること(ショートを避ける方法) GPIO3 は、i2c1 の SCL ピンとして動作させる設定にしてあることが多いだろう。 i2c 通信はプッシュプル出力を行わないのでそのままでも悪影響はないが、無効化しておいてもいい。 ubuntu の場合、/boot/firmware/syscfg.txt を編集し、i2c1(==i2c_arm)を無効化する デフォルトからいじってたのでちょっと違うところもあるかもしれないが、以下のようにコメントアウトする /boot/firmware/syscfg.txt ----------- #dtparam=i2c_arm=on #dtparam=i2c_arm_baudrate=400000 ----------- ここで、以下のサイトから BCM2711 のデータシートを参照し、gpio のリセット時の状態を調べてみる。 GPFSEL0 register の FSEL3 は初期値 0 であり、GPIO3 はリセット時は入力ポートになっているのがわかる https://www.raspberrypi.org/documentation/hardware/raspberrypi/bcm2711/README.md これを実際に確認する。i2c1 を無効化した後にコマンドプロンプトで以下の操作を行う $ sudo su - # スーパーユーザーになる # echo 3 > /sys/class/gpio/export # gpio3 をいじる # cat /sys/class/gpio/gpio3/direction # gpio3 が入力か出力か調べる # cat /sys/class/gpio/gpio3/value # gpio3 の値を読む # echo 3 > /sys/class/gpio/unexport # gpio3 をいじるのをやめる # ^d # スーパーユーザーを抜ける 作者の環境では、gpio3 は in であり、値は 1 であった。入力ポートであり、プルアップによって 1 が 入力されていることがわかった。 よって、rtc ハードウェアを接続中に gpio3 をいじることがないのなら、rtc ハードウェアの R5 は 0Ω (ジャンパをつけたりなんだりで短絡させる)で大丈夫だろう。 R5 が 0Ωの場合は、R1 と D1 を実装し、PCF2129 の INT# が落ちたときに LED が光るようにも出来る。 以上。