I2C妄想

拡張ボードのベースはできたので、I2C引き出しのための考察+妄想。
外に引き出すにあたって、問題は2点

  1. I/O電圧が1.8Vなので3.3Vおよび5Vに直結できない
  2. OMAP4から直接出てるので、ESDなどで最悪OMAPまで巻き込んで死ぬ

1に関してはレベルシフタで3.3Vに上げる方法で、2はアイソレータを別に入れる。
1.8Vを入力できるアイソレータは見つからなかったので、二段階で行く。

レベルシフタ

DIR信号がない双方向信号なので結構めんどくさい。

使えそうなのを、いくつか見つけた。

ディスクリートMOS-FETを使う方法

I2Cの仕様書(NXP)に乗ってる方法。
仕様書から回路図を引用する。

詳しくは仕様書に書いてあるけど、低圧側でLにドライブされるとFETのD-S経由で高圧側が引っ張られ、高圧側でLにドライブされるとボディダイオード経由で低圧側が引っ張られる動作をする。
シンプルで必要十分な性能が出そうだけど、問題になりそうな気がするのは以下の2点。

  • FETの閾値電圧<(電源電圧-信号ラインのL電圧)でないとFETがONしないので、1.8Vで動くFETがあるか?という問題
  • ボディダイオードのスイッチング速度はあんまり速くないので、大丈夫か?という問題
汎用バススイッチを使う方法

ホットプラグ用などの、FETバススイッチICがDIR信号がない双方向信号を扱えるので、それを使ってレベルシフトする方法。
例えば、チャンネル数でちょうど良さそうなのはTIのSN74CB3T3306など。


基本的な原理は一つ上のディスクリートと同じ。ゲートが電源直じゃなくて制御回路が入っているので、イネーブル信号で切り離したりもできる。
ESDの規格も明記されてるので、なかなか良さそう。

専用レベルシフタを使う方法

I2C用と明記されているICを使う、やっぱり一番安全と考えられる方法。
レベルシフト専用だとTIのPCA9306がある。
これ以外にも長距離伝送用とかの機能を持ってるやつがあるけど、そっちは入力電圧が3.3V〜なので、どちらにしても一度変換が必要。


単純なスイッチのPCA9306よりもバッファが入っていてリピータ動作をするPCA9515の方がよさそう。
リピータ+レベルシフタはPAC9517だった。PAC9515はリピータのみ。

アイソレータ

レベルシフタとは違い、GNDまで完全に切り離すIC。
バス電源を外部から供給する場合にPandaBoardが起動していない状態で外部が起動し、ラッチアップが起きないとも限らないので、安全のためにDC的に遮断するために使用する。
見つかったのは、AD・リニアテクノロジー・TIの3社のIC
一番使用しやすそうなのは、ADの奴。

ADI ADUM225x

アナログデバイセズのIC。
ADのIiCoupler技術で絶縁用トランスをIC内に作りこんであるため、外部に絶縁用の部品がいらないのが最大のメリット。
絶縁耐圧5KVなので、ほとんどの場合問題ない。
両方向(どちらの位置にもマスタが存在できる)の2250と単方向(マスタは片方にしか置けない)の2251がある。違いは、クロック信号が両方向か単方向かの違い。
耐圧が低い125xもある。

リニアテクノロジー LTC4310-1/LTC4310-2

リニアテクノロジーのIC。
両サイドに同じICを使って、Ethernet用のトランスまたはコンデンサで絶縁する。
1と2の違いは最大周波数。


トランスが外付けなので、耐圧はあげられるが、規模が大きめになるのが問題か。
耐圧性能がトランスより劣るが、コンデンサ絶縁でも使用可能。

TI P82B96

アイソレータではなくて、長距離伝送用バッファだが、フォトカプラ外付けでアイソレータになる。
双方向信号1本を単方向信号2本に分離するので、それぞれにフォトカプラをつける。
フォトカプラが4ch必要なので、微妙か?


TIのレベルシフタにADののアイソレータを組み合わせるのがよさそうかな…