質問主さんには、
気に入られなかったみたいだけど、電子工学入門者向けに、IOピンの雑談を記す。ほかの方の解説等は、上記引用先参照。
---------------------
CMOS回路の重要な特徴の一つは、低消費電力だったりします。その理由は、ICの端子の信号ラインに対して繋がったPchトランジスタ群とNchトランジスタ群がいて、間違っても同時にオンしないという原則が守られる(守る)からです。
つまり、電源からPch経由で信号ラインにつながって、Nch経由でGNDにつながる原理上のパスはあるのだけれど、どっちか一方しか導通しないという原則です。
ここまで、出力ラインの話ですが、入力信号は、MOSのゲートにつながるのが基本ですけど、MOSのゲートは、基本コンデンサ扱いでやはり直流電流を流すパスはありません(論理回路として駆動するという建前上はね)。
マイコンのように、入出力切り替える機能のある端子は、入出力の両方の回路がその端子のラインにつながっています。入力回路は原則殺せません(昔々バスのオープン状態検出回路面倒なので、入力回路使わない時に、Hizが悪影響しない回路を無理やり作りました:CADツールが文句をいうのは無視:試作品なので強行)。出力端子設定の場合は、入力回路からの信号を利用しないだけです(逆に言うと自分の出力したデータを読むことがハードとしては可能です)。
入力回路として使う設定の時には、出力回路の、Pch群と、Nch群の両方をオフにすることで、外部からみて、出力されない状態(出力ハイインピーダンスなので単純入力とみなすことができる)となります。
で出力設定の時の問題点
出力回路の場合、Pch群か、Nch群のどちらかが、オンになることで、出力H/Lの電圧を取り出しています。金属ワイヤほどではありませんが、せいぜい数Ωオーダであろう出力トランジスタが生きている時に、だれかが、電源電圧を印加したら、Lレベル出力時にGNDつなぐとか、Hレベル出力時にVDDにつなぐ場合はまあ、ほめはしませんが、破たんはありません。
が、H出力時に0Vにショートするとか、L出力時にVdd電圧にショートすると、低インピーダンスの回路:トランジスタに大電流を流すことになり、問題を起こします。
もし、電源ではなく、他の出力回路だったらどうでしょうか? 同じ程度の抵抗を、電源ーGND間に直列につなげたことになりますね?(二つのIC?を、一体として考えると)大電流を流すという問題と、もう一つ重大な問題が発生します。
双方向端子は、常に入力回路が存在して、利用しないから出力ピンと呼んでいるだけだと前に説明いたしました。つまり、問題は、入力回路にたいして、同等抵抗値の直列抵抗の真ん中あたりの電圧を印加することになります。
では、最初の、CMOSが、低消費電力なのは、Pch群、Nch群が同時にオンしないという原則を述べましたが、これは、駆動する回路は、やはり論理回路出力で、Hレベルか、Lレベルしかないという原則が守られるなら、PNどちらか一方しかオンできない回路になっているという現象を説明しているのにすぎず、Vddの半分くらいの電圧を印加すれば、どっちも、超低インピーダンスではないものの、同時オンの状態が出来てしまいます。
このときも、短時間なら、問題ないのですが、常時この状態であれば、電流を流し続ける問題が発生してしまいます。さらに、入力回路初段が、中途半端な電圧を出すならば、その次のトランジスタ群も、中途半端な電圧を印加することになるので、これまた、PN同時オンの状態が発生しこれが、つぎつぎと伝搬して、チップ全体では、大電流を流すことになるわけです。
使わないピンを、出力にせよという命題は、出力で、HかLが(どっちかはっきりしない場合でも)決まっていれば、同じピンにつながった入力回路も安定状態に保てるという利点があるわけです。
入力端子の電圧が、VddとGNDの間の電位なら安全だという認識は間違い。まあ、初段のトランジスタだけなら、即座に壊れたりはしないけど、今の説明の中間電圧が、つぎつぎ伝搬して、じゅづつながりのトランジスタ群すべて道連れに自殺する可能性はあります(ばらつきあるから、即座に100%壊れるわけではないけどネ)。
(現実問題は、破たんしにくいように、シュミット回路にするとか、工夫はしますが、論理回路は、HL論理電圧駆動以外は、原則ダメだと覚えておきましょう)。
(まあ、アナログ入出力端子は、それなりの対応なるので、神経質にならなくてもよろしいですけど、アナログ回路に電源いれるのうっとおしい気はする)。
次点として、プルアップとか、プルダウン抵抗を付けるというのも、解決策ではありますが、その時不要なピンだったとしても使いたくなった場合に、この抵抗を駆動するのに、余計な電流を流すという不利益がありますし、CMOSは、コンデンサを、出力トランジスタ(抵抗Rで)駆動するということは、RCローパスフィルタの充放電することなので、高速スイッチングしにくいという問題もあるわけです。
出力衝突で壊れないように、直列抵抗数kΩいれれば(流れてもmA電流なら想定内)、まんがいちの破壊は避けられるけど、RC時定数はどんどん大きくなって、情報伝達いくら遅くなるんやという不満が起きる。
CMOSはHL駆動が原則なのに、RC時定数が大きいということは、入力回路の入力電圧が、不安定な中間電圧である時間長くなるので、これは避けなければならない。
だから結論は、使わない端子は出力にしろ(余計なプルアップや直列抵抗の欠点はさける:後で使いたくなった時にうっとおしいから)、出力設定により、入力回路のHLを確定して、間違っても、ハイインピーダンス状態をつづけて、入力回路の電圧不定状態が続くのはさける(HL確定して、挙動不審な状態にするな!ということです)。
で、システムを設計するうえで、出力回路を衝突させるような、浅はかな知識での利用はダメ、管理できないなら、使うのは考え直せ(全ピンプルアップで、他の流用あきらめるなら可)。
かな?
ちなみに、リセット時に入力回路設定になるのは、リセット時出力になっていると、マイコンソフトが、設定終了するまで、出力ショート状態が発生するのを避けるためで、ラズパイ君だと、基本プルアップ抵抗オンにした入力モードになるようですが、これなら安心ではあるけど。
文章がわからんと、常に人に言われるので、読んでもわからんだろうねぇ。読み流しても怒らんから、気が向いたら読んでね。