I²C
出典: フリー百科事典『ウィキペディア(Wikipedia)』
I²C はフィリップス社で開発されたシリアルバスである。 低速な周辺機器をマザーボードへ接続したり、組み込みシステム、携帯電話などで使われている。 Inter-Integrated Circuit の略で、 I-squared-C(あい・すくえあど・しー)が正式な発音とされている。 ただし、プレーンテキスト上では上付き文字が使えないため、I2Cと表記されることも多く、あい・つー・しーと発音される。
目次 |
[編集] 設計
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) だが、クロック周波数はゼロまで下げても構わない。 最新版の I²C では、ノード数の拡大と高速動作( 400kbit/s のファーストモード (Fast mode) や 3.4Mbit/s の高速モード (High Speed mode) )が可能で、他にも 10bit アドレス空間などの機能拡張が行なわれている。
[編集] 改訂
元々の I²C システムは、フィリップスの各種チップを使った電子機器制御用のシンプルな内部バスシステムとして1980年代初期に開発されたものである。
最初の標準化は1992年に行なわれ、400kbit/s のファーストモード (fast mode) と、 1008ノードまでの 10bit アドレッシングモードが追加された。 1998年のバージョン 2.0 では、3.4Mbit/s の高速モード (high-speed mode) と、低消費電力を目的とした低電圧・低電流条件が追加された。 2001年のバージョン 2.1 は 2.0 からの小修正で、これが現在の最新バージョンである。
最新の仕様書は、フィリップスが設立した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 、 VESA の Display Data Channel (DDC) インターフェイス、 SMBus 、 IPMI などがある。 これらの実装では、電圧やクロック周波数に違いがあり、また割り込み信号があることもある。
[編集] 関連項目
[編集] 外部リンク
- MCC I2C Bus Technical Overview
- Philips I2C specifications
- I2Cバス仕様書(日本語版) 表紙に「バージョン2.1」とあるが、内容はバージョン2.0がベースと思われる
- Detailed introduction, Primer
- Introduction to I2C
- I2C 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.
- I2C 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