MIPI Allianceは米国時間の1月9日、これまで仕様策定作業を進めてきていた「I3C」についてRelease 1.0の仕様書を公開したことを発表した。そこで今回は、このI3Cについて説明したいと思う。
I3CはImproved Inter Integrated Circuitsの略で、既存のI2C(Inter Integrated Circuits)の改良版、という位置付けになる。I2Cそのものは、さまざまなセンサや比較的低速で済む周辺回路(例えばUARTとか)の接続用に広く使われていることは、良く知られているとおり。2線式で簡単に接続できるため、さまざまなセンサからゆっくりと(サンプリング間隔が数100ms以上)データを取るには適したものであり、現在も幅広く利用されている。その一方で設定が面倒であるとか、割り込みの方法が無い、あるいはデータの転送速度そのものが絶対的に低いといった問題もあり、最近は高速なセンサの中にはSPIを使うものも出てきている。
その結果として、例えば最近のスマートフォンなどのSoCでは、周辺回路との接続がこんな面倒な事になっている(Photo01)。これをPhoto02右下のようにシンプルにできる、というのがI3Cの目的である。
Photo03がI3CとI2C、それとSPIの特徴を比較した表となる。ポイントであるが
- 転送速度:I2Cはオリジナルが87.5Kbps、信号速度を400KHzに引き上げたFm(Fast mode)で350Kbps、1MHzに引き上げたFm+(Fast mode plus)で800Kbps、3.4MHzのHs(High speed mode)で3Mbpsが実現されているが、I3CではSDRモードで最大10.6Mbps、HDRモードでは最大33.3Mbpsという高い転送速度を提供できる。もちろん、これはSPIには及ばないが、SPIでもそうした高速な転送を必要とするのはフラッシュメモリや組み込みDRAM/SRAMで、こちらはそもそも最近だとSPIですら足りないという話で、DSPI(Double SPI)やQSPI(Quad SPI)を利用しており、I3Cはこれらをターゲットとしていない。
- 信号線:I2CとI3Cは、共にSDA/SCLを利用する2線式で実装される。マルチドロップ、つまり1対の信号線に複数デバイスが接続できるのも同じである。
- 割り込みのサポート:I2C/SPIはデバイスからの割り込み、あるいはデバイスへの割り込みは規定されていない。このため、割り込み機能が必要な場合は別に信号線が必要となる。一方I3Cは割り込み機能を通信プロトコルの中でサポートしており、割り込み線無しに割り込み機能が実装できる。
- Master/Slave方式なのはいずれも一緒で、Multi-Masterをサポートするのも同じ。
- I2Cでは7bit/10bitの2種類のアドレスをサポートするが、I3Cでは7bitアドレスのみになった。その代わり、Dynamic Addressをサポートする。ちなみにI2Cとの後方互換性を保つためにStatic Addressもサポートする。
- Hot JoinとIn-Band integrated commandをサポートする。これらはいずれも新機能であり、I2CやSPIには存在しない。
といったあたりになる。