公開:

I2C(Inter-Integrated Circuit)とは?意味をわかりやすく簡単に解説

text: XEXEQ編集部


I2C(Inter-Integrated Circuit)とは

I2C(Inter-Integrated Circuit)はフィリップス社によって開発された同期式のシリアル通信プロトコルです。I2Cは複数のデバイス間で双方向通信を行うために使用されるシンプルかつ低速な通信方式となっています。

I2Cの最大の特徴はわずか2本の信号線で複数のデバイス間の通信を実現できることです。クロック線(SCL)とデータ線(SDA)の2本を使用し、これらの信号線を複数のデバイスで共有することで、効率的な通信が可能になります。

I2Cでは通信を開始するデバイスがマスターとなり、他のデバイスはスレーブとして動作します。マスターは通信を制御し、スレーブはマスターからの要求に応答する役割を担います。

I2Cの通信速度は標準モードで100kbps、高速モードで400kbpsとなっています。比較的低速ではありますが、センサーやメモリなどの小規模なデバイス間の通信には十分な速度を提供します。

I2Cは多くのマイコンやセンサーモジュールに搭載されており、ハードウェアの設計を簡素化できる利点があります。また、I2Cデバイスには固有のアドレスが割り当てられているため、複数のデバイスを同じバスに接続することが可能です。

I2Cの通信プロトコル

I2Cの通信プロトコルに関して、以下3つを簡単に解説していきます。

  • I2Cのデータ転送フォーマット
  • I2Cのアドレッシング方式
  • I2Cのクロックストレッチング機能

I2Cのデータ転送フォーマット

I2Cのデータ転送はスタートコンディション、アドレス、データ、ストップコンディションの順に行われます。スタートコンディションはSDA線がHIGHからLOWに変化する際にSCL線がHIGHの状態で開始されます。

データ転送は8ビットごとに行われ、各バイトの転送後にはACKビットが付加されます。受信側がデータの受信に成功した場合、ACKビットとしてLOWを送信し、失敗した場合はNACKビットとしてHIGHを送信します。

転送が完了すると、ストップコンディションが送信されます。ストップコンディションはSCL線がHIGHの状態でSDA線がLOWからHIGHに変化することで示されます。

I2Cのアドレッシング方式

I2Cでは各デバイスに固有の7ビットまたは10ビットのアドレスが割り当てられています。通信を開始する際、マスターはスレーブのアドレスを送信することで、目的のデバイスを特定します。

7ビットアドレスの場合、最上位ビットはRead/Writeビットとして使用されます。このビットが0の場合は書き込み、1の場合は読み出しを示します。10ビットアドレスの場合は特別なアドレス指定方式が採用されています。

複数のデバイスが同じI2Cバスに接続されている場合、各デバイスは自身のアドレスを認識し、該当するアドレスの通信にのみ応答します。これにより、バスの共有が可能になります。

I2Cのクロックストレッチング機能

I2Cにはクロックストレッチング機能が備わっています。これはスレーブがデータの処理に時間を要する場合に、SCL線をLOWに保持することでクロックを一時的に停止させる機能です。

スレーブがクロックストレッチングを行っている間、マスターはSCL線がHIGHになるまで待機します。スレーブが処理を完了してSCL線を解放すると、通信が再開されます。

クロックストレッチング機能は速度の異なるデバイス間の通信を可能にし、デバイスの処理時間に柔軟に対応できるようにします。ただし、クロックストレッチングを過度に行うと通信速度が低下するため、適切に使用する必要があります。

I2Cのマスター・スレーブ構成

I2Cのマスター・スレーブ構成に関して、以下3つを簡単に解説していきます。

  • I2Cのマスターデバイスの役割
  • I2Cのスレーブデバイスの役割
  • I2Cのマルチマスター構成

I2Cのマスターデバイスの役割

I2Cにおけるマスターデバイスは通信を開始し、クロック信号を生成する役割を担います。マスターは通信を開始するタイミングや、送信するデータの内容を決定します。

マスターはスレーブデバイスのアドレスを指定し、Read/Writeビットを設定することで、スレーブとの通信方向を制御します。また、マスターは通信の終了を決定し、ストップコンディションを送信します。

一般的に、マイコンやプロセッサがマスターデバイスとして動作し、センサーやメモリなどの周辺デバイスがスレーブとして接続されます。マスターはスレーブデバイスからデータを読み出したり、スレーブデバイスにデータを書き込んだりします。

I2Cのスレーブデバイスの役割

I2Cのスレーブデバイスはマスターからの要求に応答し、データの送受信を行う役割を担います。スレーブは自身に割り当てられたアドレスを認識し、そのアドレスが指定された場合にのみ応答します。

スレーブはマスターから送信されたデータを受信し、要求に応じて内部のレジスタやメモリにデータを書き込みます。また、マスターからの読み出し要求に対して、要求されたデータを送信します。

スレーブデバイスはマスターからのクロック信号に同期して動作します。スレーブは必要に応じてクロックストレッチング機能を使用し、通信速度を調整することができます。

I2Cのマルチマスター構成

I2Cは複数のマスターデバイスが同じバスに接続されるマルチマスター構成をサポートしています。マルチマスター構成では複数のマスターが同時にバスを制御しようとする可能性があります。

I2Cのマルチマスター構成ではバスの衝突を防ぐために、アービトレーション(arbitration)機能が使用されます。各マスターはバスが解放されているかを確認し、解放されている場合にのみ通信を開始します。

複数のマスターが同時に通信を開始した場合、アービトレーションによって優先順位が決定されます。優先順位の高いマスターがバスを獲得し、通信を継続します。他のマスターはバスが解放されるまで待機します。

I2Cの応用例

I2Cの応用例に関して、以下3つを簡単に解説していきます。

  • I2Cを用いたセンサーデータの読み取り
  • I2Cを用いたメモリデバイスとの通信
  • I2Cを用いた複数デバイス間の同期制御

I2Cを用いたセンサーデータの読み取り

I2Cは温度センサーや加速度センサーなどの各種センサーモジュールとの通信に広く使用されています。センサーモジュールはI2Cインターフェースを介してマイコンやプロセッサに接続されます。

マイコンやプロセッサはI2Cを使用してセンサーモジュールのアドレスを指定し、センサーからデータを読み取ります。センサーモジュールは要求されたデータを返信し、マイコンやプロセッサはそのデータを処理することができます。

I2Cを使用することで、センサーモジュールとの通信を簡素化し、効率的にデータを取得することができます。また、複数のセンサーモジュールを同じI2Cバスに接続することで、配線を最小限に抑えることができます。

I2Cを用いたメモリデバイスとの通信

I2CはEEPROM(Electrically Erasable Programmable Read-Only Memory)やSRAM(Static Random Access Memory)などのメモリデバイスとの通信にも使用されます。メモリデバイスはI2Cインターフェースを介してマイコンやプロセッサに接続されます。

マイコンやプロセッサはI2Cを使用してメモリデバイスのアドレスを指定し、データの読み書きを行います。メモリデバイスは要求されたアドレスのデータを返信したり、指定されたアドレスにデータを書き込んだりします。

I2Cを使用することで、メモリデバイスとの通信を簡素化し、少ないピン数で効率的なデータのやり取りが可能になります。また、I2Cは低速な通信であるため、メモリデバイスとの通信に適しています。

I2Cを用いた複数デバイス間の同期制御

I2Cは複数のデバイス間の同期制御にも利用されます。I2Cバスに接続された複数のデバイスはマスターからのクロック信号に同期して動作します。

マスターデバイスはI2Cを使用して複数のスレーブデバイスに同期信号を送信することができます。スレーブデバイスはその同期信号に基づいて動作のタイミングを調整します。

I2Cを使用した同期制御は複数のデバイスが協調して動作する必要がある場合に有効です。例えば、複数のセンサーモジュールから同時にデータを取得する場合や、複数のアクチュエータを同期して制御する場合などに活用されます。

「コンピュータ」に関するコラム一覧「コンピュータ」に関するニュース一覧
ブログに戻る

コメントを残す

コメントは公開前に承認される必要があることにご注意ください。