Raspberry PiのGPIO2と3のプルアップ抵抗に注意
Raspberry Pi の GPIO2/3 に備わっているプルアップ抵抗はソフトウェアで無効化することができず、かつ抵抗値が小さいため、注意が必要だという話です。
概要
Raspberry Pi の GPIO はシリーズ共通のピン配置で、電子工作に大活躍します。 GPIO は基本的に ON/OFF(3.3V/0V)の出力、あるいは入力に使えます。 LED を繋いで L チカする、スイッチを繋いで読み取る、ということが可能です。
一般に、GPIO にスイッチを接続して入力する際はプルアップ、あるいはプルダウンという電気的な処理が必要です。 Raspberry Pi はどのバージョンでも GPIO にプルアップ/ダウンが可能な抵抗が内蔵されているため、外付けの部品なしで実現できます。
GPIO2/3 の特殊事情
Raspberry Pi の GPIO はソフトウェアでプルアップあり、プルダウンあり、どちらも無し、から設定を選べます。 ただし、GPIO2 と GPIO3 は固定のプルアップ抵抗が内蔵されており、ソフトウェアから無効化することができません。
参考 GPIO - Raspberry Pi Documentation
プルアップ抵抗の値を調べたページ Raspberry PiのGPIOは起動直後から内部プルダウンされている - hnwの日記 によると、 GPIO2/3 のプルアップ抵抗はおよそ 1.74kΩ、他のポートでは 47.5kΩ とのことです。
プルアップ抵抗 1.74kΩというのは、接続対象によっては影響が出る可能性がある低さです。
実際、筆者が 3.3V 駆動の SC1602 の DB4/5 端子を GPIO2/3 に接続して実験したところ、SC1602 の出力がプルアップ抵抗に負けてしまうことが分かりました。 DB4/5 は確かに 0V を出力しているはずなのに、ソフトウェアからは 1 が読み取れてしまうことがあったのです。 場合によっては 0 がちゃんと読めることもあるので、1.74kΩという抵抗値は SC1602 にとっては絶妙な不安定さをもたらす抵抗値だったのですね。
DB4/5 には本来は安定した信号が出ているはずなのに、特に DB5 の信号がパタパタしているのが分かります。