組み込みの現場には、初見だと超常現象にしか見えないトラブルがある。
主電源(たとえばモータ用の24V系)を切った。なのに基板上のICがうっすら動いている。LEDがぼんやり点く。触ると妙に温かい。配線を間違えた記憶はない——実際、間違えていない。
犯人は入力保護ダイオード
CMOS ICの入出力ピンには、静電気からチップを守るための保護ダイオードが入っている。各ピンから電源レールへ1本、グラウンドへ1本。通常動作では逆バイアスで、いないのと同じだ。
ところがIC の電源が落ちていて、信号線には別の機器から電圧が来ているとき、話が変わる。
信号ピンの電圧が(死んでいる)電源レールより高くなると、上側の保護ダイオードが順方向になる。すると電流は
と流れ込み、電源レールそのものを裏口から充電してしまう。ICは自分の電源ピンに(ダイオード1本ぶん低い)電圧を得て、中途半端に生き返る。これがバックパワーリング(back-powering)だ。
なぜ熱くなるのか
保護ダイオードは静電気の一瞬のサージを逃がすための細い経路で、連続電流は数mA〜十数mAしか想定されていない。そこへ別電源からの電流が流れ続けると、ダイオードとその周辺が発熱する。定格を超えれば劣化・破壊もあり得る。
「電源が入っていないのに温かい」は、この経路に電流が流れ続けているサインだ。
起きやすい局面
- マイコン(USB給電で生きている)と周辺IC(主電源、切断中)が信号線で繋がっている
- 複数電源のシステムで、電源の投入順・切断順が守られていないとき
- デバッガやUSBシリアルだけ繋いだまま、本体電源を切って作業するとき
共通の構図は「死んだICに、生きた信号線」。
設計と運用の対策
- 電源シーケンスを守る(信号を出す側より先に、受ける側の電源を立てる)
- 直列抵抗で流入電流を制限する(保護ダイオードの定格内に収める)
- レベルシフタやバススイッチで電源ドメインを分離する
- 運用面ではシンプルに——配線をいじるときは全部の電源を切る。主電源だけ切って USB が生きていれば、この裏口は開いたままだ
回路図の上では存在しない経路が、シリコンの中には最初から描かれている。保護素子は「異常時にだけ現れる配線」だと思っておくと、この種の怪奇現象は一気に散文的な話になる。