I2C

出典: フリー百科事典『ウィキペディア(Wikipedia)』
I²Cから転送)
移動: 案内検索
本来の表記は「I²C」です。この記事に付けられた題名は記事名の制約から不正確なものとなっています。
I2Cバスでの接続の例

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

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

設計[編集]

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

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

改訂[編集]

元々の I²C システムは、フィリップスの各種チップを使った電子機器制御用のシンプルな内部バスシステムとして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.0 は Fast mode plus (Fm+) を追加、通信速度を従来の Fast mode (Fm) 0~400kbit/s から 0~1000Kb/s に向上させるための条件を規格化。

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

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

応用[編集]

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

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

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

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

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

OSでのサポート[編集]

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

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

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

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

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

派生技術[編集]

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

関連項目[編集]

外部リンク[編集]

  1. ^ トランジスタ技術2014年10月号 p.152「2線シリアル・インターフェースI2C詳解」