【コラム】

セカンド・オピニオン

133 バスのアーキテクチャ - 過去から未来へ(94)

大原雄介  [2005/09/29]

シンプルなバス(その12):I2C(その5)

I2Cの場合、バスに関するスペックは以上でほぼ網羅した形になる。例えばバーストモードとか、アドレス固定モードといった転送方法は無いため、例えば10バイトの転送を行おうとすると10回「アドレス指定→Direction→ACK(→2ndアドレス指定→ACK)→データ転送→ACK」というシーケンスが繰り返される事になる。7bitアドレスなら1byteの転送に18bit、10bitアドレスなら27bitを必要とする計算だ(他にSTARTとSTOP/RESTARTの指定があるから、厳密には20bit/29bitとなるが、STOP/RESTARTはともかくSTARTは複数データの転送時は省けるから、19bit/28bitと見なすのが正確かもしれない)。従って、当然転送効率は良くない。10bitアドレスの場合の実効転送速度は、

  • Standard Mode:3.6KB/sec
  • Fast Mode:14.3KB/sec
  • High-Speed Mode:121.4KB/sec

といった程度。7bitアドレスの場合でも、

  • Standard Mode:5.3KB/sec
  • Fast Mode:21.1KB/sec
  • High-Speed Mode:179.0KB/sec

といったあたりで、大量のデータを送るにはまるで向いていない事が判る。

ただI2Cは、大量のデータ転送を狙ったものではない代わりに、インプリメントが簡単で高速というメリットがある。プロトコルが非常にシンプルなので、インタフェース部(特に論理層)の構築が極めて簡単である。従ってインタフェース部は非常に小さく収める事が可能だし、結果としてI2CのI/F部のIPコアは殆ど標準品の扱いとしてファウンダリやFPGAメーカーから提供されている。I/Fをインプリメントした場合のダイサイズは非常に小さいからペナルティも少ない。

またインタフェースが小規模ということは、論理層のスループットが高い(というか、レイテンシが少ない)という意味でもある。従ってバス経由でイベントの通知を行おうという場合でも、インタフェース(厳密に言えば論理層)のレイテンシが問題になることはまず考えられない。むしろ問題になるのは、他のデバイスとの競合でバスを確保するまで時間が掛かるという問題だが、これは最初に述べたとおりアドレスの振り方と、どんなトラフィックを流すかという問題だから、機器設計者が上手くデバイスの優先度を決めれば済む話であり、あまり大きな問題とはならない。

配線層に関しても2線式インタフェースだから、配線は簡単である。勿論SDAとSCKの配線長が極端に異なると問題になるので、厳密に等長配線とは言わないまでも、ある程度考慮する必要はある。が、最高でも3.4Mbpsという遅い転送速度だから、タイミングマージンはかなり大きい訳で、普通に設計している限りまず問題にはならない訳で、結果として(基板面積などの観点で)ローコストに繋がる事になる。加えて言えば、バスマスタとかコントローラといったものは必要ないから、これらもローコストに貢献していると言える。

従って、I2Cバスはそれ単体でデータ転送というよりは、他のバスと組み合わせての制御というケースが多い。例えばAdvanced TCAと呼ばれる通信向けのバスがあるが、これにI2Cバスが組み込んでホットスワップの検出やコンフィギュレーションの制御を行ったりとか、スイッチやLED、各種センサーの接続などに使われる事が非常に多い。こうした用途にはI2Cで十分間に合うからだ。ちなみにI2Cのカタログには"Flash ROMの接続も可能"とかされているが、High-Speed Modeならばともかく、10~20KB/sec程度の速度しか出ないFast Modeでは(よほど小容量のFlashで無い限り)読み込み時間がちょっと掛かりすぎる気がする。タイミング的にルーズで良いケースを除くと、SPIを使って接続する方が無難であろう。

このI2Cの派生形としてAccess.busというものがあるという話は「その90」で説明した通りだが、これとは別にI2Cを応用した例としてSMBusの存在がある。(続く)

    新着記事

    特設サイトの情報

    人気記事

    一覧

    新着記事

    特別企画

    一覧