I2C

**I<sup>2</sup>C**（アイ・スクエアド・シー、アイ・アイ・シー）はフィリップス社で開発されたシリアルバスである。低速な周辺機器をマザーボードへ接続したり、組み込みシステム、携帯電話などで使われている。

*Inter-Integrated Circuit* の略で、*I-squared-C*（アイ・スクエアド・シー）が正式な読みとされている。ただし、一般的な文字コード環境のプレーンテキスト上では上付き文字が使えないため、**I2C**あるいは**IIC**と表記されることも多く、これをもって「アイ・ツー・シー」と発声されたりカタカナ表記されることがある。

## 設計
I2C で使われているのは、抵抗でプルアップされた双方向のオープンコレクタ信号線が**2本**だけである。2本の信号線は、**シリアルデータ** (SDA) と**シリアルクロック** (SCL) からなる。電圧は最高で +5V までで、よく使われるのは +3.3V だが、他の電圧でも構わない。

I2C の参照設計では、7bit のアドレス空間のうち 16 の予約アドレスを除いた最大 112 個のノードが、同じバス上で通信できる。もっとも一般的な I2C バスのモードは、100kbit/s の標準モード () と 10kbit/s の低速モード () だが、クロック周波数はゼロまで下げても構わない。ノード数の拡大と高速動作が可能な 400kbit/s のファーストモード () や 3.4Mbit/s の高速モード () の追加と、10bit アドレス空間などの機能拡張が行なわれている。

特定のI2Cバス上に存在できるノードの数は、アドレス空間とバスの静電容量によって制限され、実際の通信距離は数メートルに制限される。比較的高いインピーダンスと低い雑音耐性は共通の接地電位を必要とし、実用的にはPC基板や小さな基板同士の通信に制限される。

## 改訂
元々の I2C システムは、フィリップスの各種チップを使った電子機器制御用のシンプルな内部バスシステムとして1980年代初期に開発されたものである。

* 1992年バージョン 1.0 - 最初の標準化が行なわれ、400kbit/s のファーストモード (fast mode) と、1008ノードまでの 10bit アドレッシングモードが追加された。

* 1998年バージョン 2.0 - 3.4Mbit/s の高速モード (high-speed mode) と、低消費電力を目的とした低電圧・低電流条件が追加された。

* 2001年バージョン 2.1 - 2.0 からの小修正である。

* 2007年バージョン 3 - Fast mode plus (Fm+) を追加、通信速度を従来の Fast mode (Fm) 0～400kbit/s から 0～1000Kb/s に向上させるための条件を規格化。

* 2012年
**バージョン 4  - Ultra fast mode (UFm) を追加、通信速度を 0～5000Kb/s に高速化させるため物理層をオープンコレクタ出力からCMOS出力に変更。予約アドレスから不要な CBUS address / Hs-mode master code が reserved に変更され general call address / START byte / 10-bit slave addressing のみ対応。
**バージョン 5 - 誤記修正

* 2014年バージョン 6 - 2つの図を修正。

* 2021年バージョン 7 - メーカーIDの表を更新。用語を変更(マスター/スレーブをコントローラ/ターゲットに変更)。MIPI I3C概要の節を追加。最新版。

最新の仕様書は、フィリップスが設立したNXPセミコンダクターズ社のサイトにて配布されている。また、2004年8月に特許が失効しており、現在はロイヤリティフリーである。

## 応用
I2C が適しているのは、シンプルで製造コストを抑えることが速度よりも重要とされるような周辺機器である。I2C バスの代表的な用途としては、次の通り。

* DRAMのバスタイミングの設定記憶()
* ユーザの設定を記憶しているシリアル不揮発性メモリ(24C01/24C02/24C04など)へのアクセス。
* 低速な D/Aコンバータへのアクセス。
* 低速な A/Dコンバータへのアクセス。
* モニターのコントラスト、色調、色バランスの変更。
* インテリジェント・スピーカの音量変更。
* 携帯電話などの LED 表示の制御。
* リアルタイムクロックの読み出し。
* CPU の温度やファンの回転速度など、ハードウェアの監視や診断用センサーの読み取り。(パーソナルコンピュータにおけるACPI制御下のSMBusなど)
* システムの電源オン・オフ制御。
* 2次電池の充放電状態コントローラの通信インタフェース。(スマートバッテリシステム)

わずか2本の汎用I/Oピンとソフトウェアだけで、マイクロコントローラからデバイス・チップのネットワークを制御できることが、I2C の最大の利点である。

I2C バスでは、システムが動作中であっても周辺機器の取り付け・取り外しが可能なので、ホットスワップが必要とされる用途には特に向いている。

I2C のようなバスが広まったのは、パッケージのサイズとピン数が、生産コストや集積回路設計に大きな影響を与えていることにコンピュータ技術者が気付いたからである。パッケージが小さければ軽量化・低消費電力化が可能で、これは携帯電話やポータブル・コンピューティングでは特に重要なことである。

## OSでのサポート
Linux では、I2C は特定のデバイス（ADM1026やLM92など）用に特定のカーネルモジュールで扱われている。Linux 2.6ではカーネルコンフィグレーションのでサポートするシステムハードウェアモニタを選択できる。I2Cドライバのソースコードは drivers/hwmon 配下にある。I2Cドライバは大きく分けて core と algorithm, adapter の3種類のモジュールに分割されている。I2C クライアントの書き方の詳細は、カーネル関連のドキュメントや `/usr/include/linux/i2c.h` ヘッダファイルにある。OpenBSD には最近、いくつかの共通マスター・コントローラとセンサのサポートで I2C フレームワークが加えられた。

シンクレア QDOS とミネルヴァ（ QDOS の再実装） QL オペレーティング・システムでは、TF サービスから提供されている拡張セットで I2C がサポートされている。

AmigaOS では、 Wilhelm Noeker の *i2c.library* 共有ライブラリで I2C アクセスできる。

eCos は、いくつかのハードウェア・アーキテクチャで I2C に対応している。

EPIA-M マザーボードは、Mini-ITX で I2C に対応している。

## 派生技術
I2C が元になっているものには、 ACCESS.bus 、 VESA の Display Data Channel (DDC) インターフェイス、 SMBus 、 IPMI などがある。これらの実装では、電圧やクロック周波数に違いがあり、また割り込み信号があることもある。

## 関連項目
* バス (コンピュータ)
* SPI
* CCI (カメラ制御インターフェース) - I2C互換
* 1-Wire
* Wiiリモコン - ヌンチャク等との通信に使用

## 参考文献

## 外部リンク

* MCC I2C Bus Technical Overview
* I2C-bus specification and user manual Rev.6
* I2Cバス仕様およびユーザーマニュアル Rev.5
* Detailed introduction, Primer
* Introduction to I2C
* I<sup>2</sup>C Bus / Access Bus
* Using the I2C Bus with Linux
* OpenBSD iic(4) manual page
* Linux package lm-sensors support I2C bus among others.
* massmind i2c page Source code, samples and technical information for using i2c with PC, PIC and SX microcontrollers.
* I<sup>2</sup>C bus
* Serial buses information page
* I2C Bus Technical Overview and Frequently Asked Questions
* The I2C Faq Version 2.0
* The Bus Buffer Resource. For 2-wire buses such as I2C, SMBus, PMBus, IPMB & IPMI
* SMBus (System Management Bus)
* SBS-IF Smart Battery System Implementers Forum