I2Cのレベル変換

うげっ。H8/3048とか3069とかはTTLレベル入力だったけど、H8/Tinyの3694とかってCMOSレベル入力なのか。5V動作だと3.3Vロジックを直接入力できないやん。TTLレベルなら3.3VでもHighと見てくれるのになぁ。CMOSレベルだとレベル変換が必要なわけだけど、I2Cバスは双方向。どうやってレベル変換したらいいんだろう?
…と思ったら、フィリップスのI2C仕様書に書いてあるやん。

低電圧回路を従来の5Vデバイスとインターフェースさせるにはレベル・シフタが必要になります。I2Cバスのような双方向性バスにおいて、このようなレベル・シフタもまた方向コントロール信号を用いずに双方向性である必要があります。この問題を解消する最も簡単な方法は各バス・ラインにディスクリートMOS-FETを接続することです。

回路図と説明を読んで納得。親切な仕様書だなぁ。


しかし、小信号用のMOSFETなどというマイナーなジャンルの部品は手元に持ち合わせがない。ちょっと裏技ぽいがバイポーラ・トランジスタでも同様の回路ができるんじゃないだろうか。コレクタとエミッタが逆でもトランジスタとして「動かなくはない」ということを利用すれば。