技術コラム Vol.21

いまさら聞けない通信の話 ~I2C編~

公開日:2024/08/28

技術コラム Vol.20「いまさら聞けない通信の話 ~CAN編~」では、通信技術の一つとして「CAN」を紹介しました。車載ネットワークとしても利用される「CAN」は、主に近距離の装置や機器間を接続するM2M(Machine to Machine)通信に分類されます。
また、IoT機器などインターネット接続で利用される「モバイル通信」「Wi-Fi」「Ethernet」などは、遠距離を接続するM2M通信として分類されます。

一方で、装置内や回路内のように短距離を接続するための通信規格も多く存在します。例えば、PCの場合には「USB」「SATA」「PCIe」などがよく知られています。
さらに、基板内のCPU(マイコン)やIC(デバイス)間など、ごく短距離を接続する通信方式としては「I2C」「SPI」「I2S」などがあります。

今回は、このIC間で利用される「I2C」について詳しく解説します。

  1. I2Cの概要
  2. I2C通信の波形を見てみよう
  3. まとめ

1. I2Cの概要

(1) I2Cの概要

I2Cとは「Inter-Integrated Circuit」の略で「アイ・スクエアド・シー」と呼びます。「I2C」と記されることも多く、その表記に合わせて「アイ・ツー・シー」とも呼ばれます。

I2Cは当時のPhilips Semiconductors社(現在のNXP Semiconductors社)が開発したシリアルバスの通信規格です。
元々は1980年代に自社システム用に開発していたものを、1992年に仕様を標準化してバージョン1.0として公開しました。現在ではバージョン7(2021年)が公開されています。
パソコンのマザーボードや組込みシステムなどで広く使われ、事実上の標準規格(デファクトスタンダード)となっており、I2C通信を採用したセンサやEEPROMなど様々なICがあります。

I2Cの仕組みは2本のバス・ライン(シリアルデータラインSDA・シリアルクロックラインSCL)で構成され、基本的には1つのマスタで複数のスレーブを通信する仕組みです。

  • バージョン7から「マスタ」「スレーブ」という役割名は「コントローラ」「ターゲット」に変わりましたが、本コラムでは広く知られた「マスタ」「スレーブ」のまま表記します。

以下はマスタとスレーブの接続図の例です。
SDAとSCLはライン型として各デバイスに配線され、プルアップ抵抗を介して電源電圧に接続されます。両線ともHighであるときは、通信を行っていない状態(バス解放中)と判断できます。

通信はSCL信号を使った同期式であり、各モードの仕様範囲内であれば通信速度に制限はありませんが、一般的には各モードの最高速度で通信されることが多いようです。

I2C通信速度
モード 最高速度
low-speed mode 10kbps
standard mode 100kbps
fast mode 400kbps
fast mode plus 1Mbps
high-speed mode 3.4Mbps
Ultra fast mode 5Mbps

また、I2Cに代わる次世代規格としてI3C Basic規格も策定されており、最高速度は12.5Mbpsとなっています。

(2) I2Cの特徴

I2Cの特徴を幾つかピックアップして下記に挙げます。
① スレーブごとに異なるID(アドレス)を使い分ける1対多通信

スレーブは「スレーブアドレス」と呼ばれる、スレーブごとに自機を認識するためのIDを保持しています。
マスタがスレーブと通信する際は、必ず最初にスレーブアドレス(&転送するデータの方向(Read/Write))を送ることで、ネットワーク上の一意のスレーブと通信することが可能です。
IDは7bitモードと10bitモードの2パターンから選べ、スレーブアドレスが被るスレーブは同一のネットワークに存在できません。
スレーブアドレスの送信後は、データの方向に従ってマスタ/スレーブがデータを1Byte単位で送信することになります。

また、”マスタ同士の通信ができない点”や、”他がバス使用中に通信できない点”などの制約に対応していれば、マスタは同一バス上に複数存在しても問題なく、マルチマスタにして冗長性を持たせることも可能です。

I2Cの通信は8bit単位です。7bit/10bitモードでスレーブアドレスを送信する際のデータフォーマットは以下の通りです。

② 通信開始・終了時の合図(スタートコンディション・ストップコンディション)

上図で示した通り、I2Cの2線はそれぞれプルアップ抵抗を使い、未使用時はHighに固定されます。
I2CはマスタがSCLを制御してクロックを与え、それに同期する形でデータ転送を行います。しかし、通信を始める際は突然クロックを与えるのではなく、まず「スタートコンディション」と呼ばれる信号で通信開始を示した後、クロックを与えます。
また、通信を終える際も「ストップコンディション」と呼ばれる信号で通信終了を示すことで、マスタ・スレーブ間で通信の状態を
管理します。

なお、上図で示した通り、I2Cは1Byteの通信ごとに9クロック必要とします。最後の9クロック目には受信側(マスタがデータ送信(Write)するならばスレーブ側、マスタがデータ受信(Read)するならばマスタ側)が出力します。

I2CにおいてACK/NACKは通信の継続/終了を意味します。
例えばマスタがデータを任意のサイズだけ受信したい際、スレーブ側はいつまでデータ送信を続ければいいのか判断できませんが、
受信側(マスタ)がNACKを出力することでスレーブ側は通信終了を認識することができます。

2. I2C通信の波形を見てみよう

I2C通信の実際の波形について紹介します。

(1) I2Cサンプルプロジェクトについて

当社のCPUボードの多くはEEPROMを搭載しており、Ethernet I/Fを持つ製品の場合、Ethernet通信用のMACアドレスを保存しています。 このEEPROMのアクセスにはI2C通信を使用し、Ethernet通信のサンプルプログラムを実行する際にはEEPROMからMACアドレスを読み出す仕組みが実装されています。

今回は、RA8D1搭載のCPUボード「AP-RA8D-0A」上でEthernetサンプルプログラムを実行し、実際にマイコンがEEPROMに対して行っている通信の内容をモニタリングしてみます。

EEPROM 回路構成

(2) I2C通信

サンプルプログラムを実行すると、EEPROMからのMACアドレス読出しは自動で行われます。

実際の通信波形図(黄色:SCL 、水色:SDA)

上述の通り、I2C通信ではマスタは通信開始前後に「スタートコンディション」「ストップコンディション」を発行します。
また、I2C通信の始まりの1Byte目はスレーブアドレスとなっています。

つまり、上図のI2C通信の信号波形では、EEPROM(スレーブアドレス:b’1010000)に対して、「0x00」を送信するような動きを示しています。 これは搭載しているEEPROM(R1EX24002ATAS0I)へのアクセス先を先頭アドレス(0x00)に移している処理となり、以降の通信からMACアドレスの読出しが行われます。

3. まとめ

今回は、製品内部のデバイス間で使われる通信技術の「I2C」の概要と特徴と、実際の信号波形を観察しました。

主に回路内で使用される「I2C」は、目に触れる機会はありませんが、組込みシステムを語るうえでは決して外すことのできない通信技術となります。
当社のCPUボードに搭載されている各CPUも標準で使える機能であり、実際にEEPROMやPmodデバイスの制御に使用しています。

本コラムで紹介したサンプルプログラムはCPUボードに付属しておりますので、「I2C」の教育や評価用途などでも、ぜひ当社のCPUボードをご利用ください。

製品のご案内

本コラム以外にも開発にお役立ていただける技術情報をアプリケーションノートとして公開しております。
ご興味のある方は、ぜひ製品をご利用ください。

  • ※Arm, TrustZone, HeliumおよびCortexは、米国および/またはその他の地域におけるArm Limited(またはその子会社)の登録商標です。
  • ※記載されている会社名、製品名は、各社の商標または登録商標です。
  • ※記載の内容は改良のため、予告なく変更する場合がございます。