【コラム】

セカンド・オピニオン

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

大原雄介  [2005/09/22]

シンプルなバス(その11):I2C(その4)

「Standard Modeで」混在が出来ない、と書いたのはFast Modeならばこの混在が可能になっているからだ。7bitモードは前も書いたとおり、まず7bitのアドレスが送出され、次にR/Wを示す1bitが出るというシーケンスになるわけだが、10bitモードではアドレス部だけで10bitになり、8bitで一塊のI2Cバスでは1回の転送で賄いきれない。そこで10bitモードではアドレスを上位2bitと下位8bitに分け、まず上位2bitについては"11110"という特定の値を定める。つまりアドレスとしては"11110XX"になるわけだ。で、これに続いてR/Wを1bit追加したのが最初の転送となる。で、残り8bit分のアドレスは続く2バイト目で転送を行うという形になる。

図1:10bitアドレッシング

この方式の場合、従来の7bitモードしか認識しないI2Cデバイスでも問題なく混在できることになる。つまり、"11110XX"にあたるアドレスさえ割り振らないようにすれば、10bitアドレスがきてもそれを間違って7bitデバイスが受け取ったりすることはないからだ。ただ今「混在は問題ない」といったが、これは混在のしかたによる。1本のI2Cバスの上に、複数の7bitデバイスと複数の10bitデバイスが一緒に接続されているケースを考える。ここで7bitデバイスは7bitデバイスとだけ、10bitデバイスは10bitデバイスとだけ通信するという話であれば、これは確かに問題がない。また7bitデバイスと10bitデバイスが通信する場合でも、10bitデバイスがMaster、7bitデバイスがSlaveならば確かに通信可能である。ところが7bitデバイスがMaster、10bitデバイスがSlaveとなるとこれは問題になる。7bitデバイスは10bitアドレスフォーマットをサポートしないから、事実上通信相手を指定できないわけで、現実問題としてこれは通信が不可能になる。

このあたり、Specificationでは詳細に指定されていないが、現実のデバイスを見ると、うまく互換性を取ったデバイスが多い。例えば7bitアドレスと10bitアドレス、2つのアドレスを同時にサポートするI2Cデバイスは多い。この場合、7bitアドレスで指定が来たら7bitアドレスとして、10bitアドレスで指定が来たら10bitアドレスとしてそれぞれ振舞うという形になっているから、うまく互換性が取れるわけだ。またFastMode以降では、そもそも10bitアドレスへの対応が原則として必須になっているから、このあたりに問題が生じないわけだ。

実際のところ、Standard Modeでも殆どのケースで10bitアドレスは利用可能である。ただ、まだ10bitアドレスが存在しない頃に作られたデバイスが完全に消えた訳ではないので、互換性を考えると10bitアドレスが必須とは言い切れないわけだ。

これに比べると、400KbpsのFastModeはかなり簡単である。単に信号速度が400Kbpsに上がっただけで、その他の電気的特性やプロトコルに変化はないからだ。強いて言えば、バスへの負荷を200pF以下に抑えろとか、スパイク・サプレッサーやシュミット・トリガをバスからの入力回路には備えろといった指示があるだけである。

これに対してHighSpeed Modeはもうちょっと話が面倒になる。流石に速度が3.4Mbpsまで上がるとなると、同じ信号で混在するという訳にはいかなくなっている。信号自体もSDAとSCLからSDAHとSCLHに切り替わっており、信号レベルを含めて互換性はない。ただ相互運用性はちゃんと確保されており、遅い方の速度にあわせて通信を行うことになっている。もっとも、「遅いほう」といっても話が厄介である。例えばPhoto01の様に同一バス上にHighSpeed ModeとFast/Standard Modeのデバイスが混在する場合、最大転送速度は400Kbpsに制限されてしまう。これはHighSpeed Modeデバイス同士の場合でも同じである。そうではなく、HighSpeed Mode同士は3.4Mbpsで通信したいと思う場合、Photo02の様にバスを分離してやる必要がある。ちょっと面倒な話ではあるが、ここで混在に拘ると速度を上げにくいし、大量に世の中に存在するStandard/Fast Mode対応デバイスを全てHighSpeed Mode対応にするのは不可能だから、現実的な解とも言える。ちなみにプロトコルの面では従来のものと全く変わらないから、アプリケーションレベルでは単にI2Cが高速になったというだけでしかない。このあたりの互換性は十分に確保できている(続く)。

Photo01:"THE I2C-BUS SPECIFICATION VERSION 2.1"より抜粋。配線を共用する限り、High SpeedModeの転送は不可能である。

Photo02:同左。右から3つ目のデバイスがブリッジとして動作し、左がHighSpeed Mode専用、右がFast/Standard Mode専用として動作することになる。これを構成するならいっそ配線を分離してもよさそうな気もするが、そうなるとコントローラが2つになるから用途によっては面倒になるわけで、その解決案である。

    新着記事

    特設サイトの情報

    人気記事

    一覧

    新着記事

    特別企画

    一覧