SPIとI2Cのいいとこ取り!次世代2線式シリアル・バス「I3C」

前回と前々回では組み込みシステムでよく使われるI2CとSPI,さらにその使いこなし方について解説してきました.
これまでのシリアル・バスは用途によってI2CとSPIを使い分けていました.広く一般的に使われているI2CとSPIですが,システムの規模が大きくなったり,複雑になったりするにつれて機能やコスト面での最適化が望まれるようになってきました.そんな中,それぞれの欠点を補完することで使い分けを不要とし,低コスト化を可能にする,新世代のシリアル・バス仕様「I3C」が策定されました.
現在,I3Cコントローラやターゲットを搭載したマイコンやセンサが数多く登場し,I3Cに対応した電圧変換デバイスやマルチプレクサなどもリリースされています. また,DDR4メモリまで使われてきたI2Cに取って代わって,DDR5メモリではI3Cがシステム・マネジメント・バスとして使われることとなりました.このようにI3Cは採用事例が増え,普及が進んでいます.
I3CはI2Cと同じ2線式のバスですが,I2Cに比べ通信速度が速く,低消費電力です.加えて,これまでは追加の線などが必要だった割り込みも2本線で扱える仕様となっています(図1).今回は,現行のシリアル・バス方式であるI2CとSPIと比較しながら,I3Cの仕様を解説します.



I2CとSPIはどちらも低〜中速(数十k〜数十Mbps)デバイス間の通信でよく使われるシリアル通信です.これらは一般にマイコン(またはプロセッサ)と,その周辺デバイスの間におけるデータのやり取りに使われます.
I2Cの良いところは2線式のバスでマルチドロップ接続に対応し,少ない線数で多くのデバイスをさまざまな形(トポロジ)で接続できることです.また,それぞれのデバイスに割り振られたアドレスを使って任意の指定したデバイスに対しての通信を行えます.クロック速度や通信プロトコルも定義されているので,仕様に準拠したデバイス同士の互換性も確保されています.
しかし,I2Cは信号をオープン・ドレインで駆動するため,信号の立ち上がり波形がなまってしまい,転送速度に制限がかかります.この立ち上がり時間を短くするため,抵抗値が低いプルアップ抵抗を使用します.その結果,Lレベル出力時にはかえって大きな電流が流れて電力が消費されてしまいます.さらに1本のデータ線を読み込みと書き込みで切り替えて使う半二重通信のため,この点でもデータ転送レートが犠牲になります.
SPIの良いところはデータ転送速度が速く.プッシュ・プル駆動の信号によって数十Mbpsのデータレートを実現できる点です.またプッシュ・プル駆動は消費電力の点でも有利です.さらに読み込みと書き込みで独立したデータ信号を使うので,全二重通信が可能です.
SPIの問題点は信号線数が多いことです.コントローラとターゲット間で双方向通信を行う場合にはデータ線2本(読み込みと書き込みでそれぞれ独立),加えてクロックと,ターゲット・デバイスを指定するためのチップ・セレクト信号が必要です.このため,複数の種類のデバイスを同じバスに繋げて使うのが難しい場合があります.
I2CにもSPIにも,バスそのもので割り込み信号を扱う仕組みがありません.このため,なんらかのイベントをコントローラに通知するにはコントローラからポーリングを行ったり,割り込みを別の信号線として用意する必要があります.
I3Cは標準化団体MIPIアライアンスによって2017年に策定されました(v1.0の発行年.最新版はv1.2).I3Cはモバイル/IoT機器内でのセンサー用インターフェースとしての用途を主としています.
I3C仕様のフル・バージョンはMIPIアライアンスの会員向けに公開されています.しかし,MIPI会員以外の開発者や標準化団体も利用できるよう,一般的に必要とされるI3Cの機能をまとめたI3Cベーシック・バージョンは誰でも入手できるようになっています.MIPI会員でなくてもロイヤリティフリーのライセンス下で実装可能です.
I3Cは「アイスリーシー」と読みます.I2C(アイ・スクエアド・シー)ではソフトウェアのコード内では「I2C」と書かれたりするため,「アイツーシー」と呼ばれるなどの混乱もあります.このため,後継となるインターフェース仕様ではあえて上付きではない「3」を用い,呼称も「アイスリーシー」となっています.
I2Cの使いやすさにSPIの速度と省電力性を加え,さらに設計の簡素化も実現できるのがI3Cバスです(表1).ここでは,I3Cが持つ代表的な3つの長所と1つの短所を見ていきます.

先に示した図1はI2CとSPIを使用したシステム(現在のかたち)と,I3Cを使用した場合(理想のかたち)の比較です.このようにI3Cを使えば配線とSoCのピン数を大幅に削減できます.
I3Cには少線化を実現するためのいくつかの仕組みが用意されています.共通コマンド・コードやタイムスタンプ機能などがその例です.
ここではその中のひとつ,「インバンド割り込み(IBI:In-Band Interrupt)」と呼ばれる新しいプロトコルについて見てみましょう.
これまでのI2CやSPIのデバイスでは,デバイスに発生したイベントをコントローラに通知するために,シリアル・バス信号の他に割り込み信号を設けることがありました.これにより,コントローラとターゲット間にもう1本の余分な線が必要になるわけです.
デバイスの数が増えると割り込み信号も増えるので配線も増え,割り込み用に割かれるコントローラ側のピン数も多くなります.そのためパッケージも大きくなり,コストも上がってしまうという問題がありました.
これを解決するために考えられたのがIBIです.
I2Cでは通信開始の合図(スタート・コンディション)は必ずコントローラが発行します.これはコントローラの「SCLがHレベルの期間にSDAをLレベルに下げる」という操作で行われます.I3CがIBIの通信を行う場合は,SCLがHレベルの期間にターゲット側がSDAをLレベルに下げることで,割り込み要求を通知します.コントローラは要求を受けるとSCLを下げてスタート・コンディションを作ります(図2).
ターゲットはIBIの開始後にスタート・コンディションを検出すると,次に自身のアドレスを送出します.このとき,どのターゲットが通信の権利を持つか決定するための「調停」が実行されます.調停は複数のターゲット・デバイスが割り込み要求を出した場合を考えて設けられています.この調停が行われている期間はSDAはオープン・ドレインで駆動されます.調停は,より小さい値のアドレスを持ったデバイスが通信の権利を得るように動作します.

I3CはI2Cと下位互換性を持った仕様です.I3Cターゲット・デバイスはI2Cデバイスとしても動作するので,これまでのI2Cコントローラからも操作できます.またI3C信号はこれまでのI2Cターゲット・デバイスに対して影響を与えない仕様なので,I3Cバス上に旧来のI2Cデバイスを混在させて使うことも可能です.
I3C信号はクロックにHレベルの期間が45nsの細いパルスを使うので,I2Cデバイスでは回路に内蔵される50nsスパイク・フィルタによってこれが無視されます.このような特性を利用してI3CはI2Cデバイスの混在を可能にしています(図3).

I3Cのクロック周波数は12.5MHzに設定されています.基本となるシングル・データ・レート(SDR)のモードでは12.5Mbps,実効レートは約10Mbpsとなります.このほかいくつかのハイ・データ・レート(HDR)のモードが定義されており,これを使えば30Mbps程度まで高速化できます(表1).
ここまでの説明では,I3CはI2CとSPIの問題を全て解決しているかのように見えます.しかし,高速化のためにひとつ犠牲になっている仕様があります.
それはバスの最大静電容量です.400kHzまでのI2C (ファースト・モード) では最大400pFまでの静電容量が許容されていました(1MHzに対応するファースト・モード・プラスでは550pFまで).しかし,I3Cではそれが50pFまでに制限されています.
この仕様により,バスの配線長や接続できるデバイスの数が制限を受けます.I3C仕様のv1.1までは11個に制限されていたデバイスの数は撤廃されましたが,依然この静電容量の制限は残っており,既存のシリアル・バスの置き換えが単純にできない一つの要因になっています.
* * *
I3Cは組み込み機器ではまだまだこれからのインターフェース仕様ですが,今後はその利便性やコスト面でのメリットが評価され,しばらくの間はI2Cとの互換性も生かしながら,普及が進んでいくことでしょう.
I3Cには通電状態でコネクタを抜き挿しする機能(活線挿抜)をサポートする仕様として「ホット・ジョイン」があります.以前から多数の薄型サーバを高密度で扱うブレード・サーバのシステム管理バスに使われていました.しかし,I2Cには通信中のバスへのデバイスの追加をどのように行うかは規定されておらず,機能の実現にはユーザ独自の仕様策定や,専用のバス・バッファの使用が必要でした.I3Cでは,このような使用例を念頭においた仕様が規定されています.
(1) NXP Tech Blog:「I3Cバスの概要 ~次のシリアルバス~ (日本語ブログ)」
https://community.nxp.com/t5/NXP-Tech-Blog/I3Cバスの概要-次のシリアルバス-日本語ブログ/ba-p/2036760)
(2) 日本語ウェビナー動画『【今知っておくべき】次世代インターフェース「I3C」の基礎』
https://www.nxp.jp/design/design-center/training/TIP-240723_I3C_Webinar_JP
(4) MIPI I3C & I3C Basic 仕様 [英語]
https://www.mipi.org/specifications/i3c-sensor-specification
(5) NXP システム・マネジメントI2C, I3C, SPIセレクタ・ガイド
https://www.nxp.com/docs/ja/product-selector-guide/I2CSELECTORBROC.pdf
(6) NXP Tech Blog:「I3C動作サンプルコード:「i3c-temperature-sensor」の動かし方 (日本語ブログ)」
https://community.nxp.com/t5/NXP-Tech-Blog/I3C動作サンプルコード-i3c-temperature-sensor-の動かし方-日本語ブログ/ba-p/2040345
(7) NXP Tech Blog:「I2Cバスの概要 (日本語ブログ)」
https://community.nxp.com/t5/NXP-Tech-Blog/I-Cバスの概要-日本語ブログ/ba-p/2036898
(8) NXP Tech Blog:「SPIバスの概要 (日本語ブログ)」
https://community.nxp.com/t5/NXP-Tech-Blog/SPIバスの概要-日本語ブログ/ba-p/2036964
(9) MEMS and Sensors Whitepaper Series Introduction to the MIPI I3C Standardized Sensor Interface August 2016
https://www.mipi.org/knowledge-library/whitepapers/introduction-to-the-mipi-i3c-standardized-sensor-interface-august-2016
・組み込みマイコン入門講座
-- https://interface.cqpub.co.jp/mcu-hands-on/
・登録内容の変更,メール・マガジン配信中止はこちらからお願いします.
-- https://cc.cqpub.co.jp/system/auth/
I2CとSPIの良いとこ取り!次世代2線式シリアル通信「I3C」
・開催日 :2025年7月25日 10:00-17:00
・受講料 :5,000円(ボード・お弁当付き,税込み)
・使用ボード:FRDM-MCXA153(NXPセミコンダクターズ)
・講師 :岡野 彰文氏(NXPジャパン株式会社 プリンシパル・フィールド・アプリケーション・エンジニア)
※セミナ受講時に使用したFRDM-MCXA153はそのままお持ち帰り頂けます.
申し込みページはこちら