LabVIEW通信入門 I²C(Inter-Integrated Circuit)
I²C(Inter-Integrated Circuit アイ・スクエアド・シー)は、フィリップス(現NXP)が開発した2線式のシリアル通信プロトコルです。
「I2C」と記されることもあり、表記に合わせて「アイ・ツー・シー」とも呼ばれます。
センサ、EEPROM、ADC/DAC、ディスプレイコントローラなど、多くのデバイスがI²Cインタフェースを備えており、計測・検査システムにおいても頻繁に登場します。
本記事では、LabVIEW を用いてI²Cデバイスを制御する際の基本概念、ハードウェア構成、実装パターン、トラブルシューティングの実践的なノウハウを解説します。
I²Cの特徴
- 配線が少ない:2本の配線(SDA, SCL)のみで、データ入出力とクロック共有が可能。
- 複数デバイス対応:アドレス指定により、1つのマスタで多数の機器を管理可能。
- 安定・低速・省電力:通信は低速(主に100kHz~400kHz)だが、安定した省電力での通信が可能。
- プルアップ抵抗必須:オープンドレイン方式のため、各信号線にプルアップ抵抗が必要。
I²C プロトコルの基本
信号線
I²Cは2本の信号線で構成されます。
- SDA(Serial Data シリアル・データ):双方向データライン。
- SCL(Serial Clock シリアル・クロック):クロックライン(マスタが生成)
両線ともオープンドレイン構成で、外部プルアップ抵抗(一般的に 4.7 kΩ)を介して電源に接続します。この構成により、複数デバイスのバス共有が可能です。
アドレッシング
I²Cでは、複数のスレーブの中から、通信するデバイスをアドレス指定します。
各スレーブデバイスに7ビット、または、10 ビットのアドレス が割り当てられます。
マスタは通信開始時にアドレスとR/Wビットを送出し、該当スレーブのみが応答(ACK)します。
クロック極性とクロック位相(CPOL/CPHA)
SPIには 4 つの動作モード の存在です。
| モード | CPOL | CPHA | クロックアイドル状態 | データサンプリングエッジ |
|---|---|---|---|---|
| Mode 0 | 0 | 0 | Low | 立ち上がりエッジ(最初でサンプル) |
| Mode 1 | 0 | 1 | Low | 立ち下がりエッジ(最後でサンプル) |
| Mode 2 | 1 | 0 | High | 立ち下がりエッジ(最初でサンプル) |
| Mode 3 | 1 | 1 | High | 立ち上がりエッジ(最後でサンプル) |
CPOL(Clock Polarity クロック・ポウラリティ):クロックのアイドル状態が Low(0)/High(1)
CPHA(Clock Phase クロック・フェーズ):データをサンプリングするのがクロックの最初エッジ/最後エッジ
デバイスのデータシートに記載された CPOL/CPHA 設定を合わせなければ、データ化けや通信ができないという問題が発生します。一般的なのはMode 0ですが、必ずデータシートで確認してください。
通信シーケンス
基本的な通信シーケンスは以下のとおりです。
- STARTコンディション:SDAがSCL=Highの間にHigh→Lowへ遷移
- アドレスバイト送出: 7ビットアドレス+Wビット(0)
- ACK受信:スレーブがSDAをLowに引く
- データバイト送出:レジスタアドレス、設定値など
- ACK受信
- STOPコンディション: SDAがSCL=Highの間にLow→Highへ遷移
読み出し時はリピーテッドスタートを挟み、Rビット(1)で再アドレッシングを行います。
速度モード
I²Cには4つの速度モードの存在です。
| モード | クロック周波数 |
|---|---|
| Standard Mode(標準モード) | 100 kHz |
| Fast Mode(ファストモード) | 400 kHz |
| Fast Mode Plus(ファストモード・プラス) | 1 MHz |
| High Speed Mode(ハイスピードモード) | 3.4 MHz |
計測システムでは、Standard Mode、または、Fast Modeが一般的です。
I²CとSPIの比較
| 項目 | I²C | SPI |
|---|---|---|
| 通信方式 | 半二重 | 全二重 |
| 配線本数 | 2本:SCL, SDA | 最小4本(デバイス数に比例して増加) |
| マスタ/スレーブ | 1マスタ + 複数スレーブ(マルチマスタ可) | 1マスタ + 複数スレーブ |
| スレーブ選択 | アドレス指定 | CS信号(デバイスごとに1本) |
| 通信速度 | 標準:100kHz~High Speed Mode:3.4MHz | 高速(数MHz〜数十MHz) |
| プロトコルの複雑さ | やや複雑(ACK/NACKあり) | シンプル |
| エラーチェック | ACK/NACKによる確認あり | 基本なし(実装依存) |
| 配線距離 | 比較的長距離向き | 短距離向き |
| プルアップ抵抗 | 必須 | 不要 |
| 消費電力 | 低消費電力 | やや高め |
| 主な用途 | センサ, RTC, EEPROM | ADC, DAC, Flash, LCD |
| LabVIEWでの扱い | VISA / I2C対応デバイス | 専用SPIツール/ VISA / DAQ |
I²Cが適するケース
- 配線数を最小化したい
- 多数のデバイスをバス接続したい
- 通信エラーを検出できる低速通信(試験・制御・設定用途など)
SPIが適するケース
- 全二重通信が必要
- デバイス数が少ない(1~4 台程度)
- 高速データ転送が必要(ADC の連続サンプリングなど)
LabVIEWからI²Cを制御
- 専用LabVIEWツール(VI)を使用
NI・メーカーが提供しているデバイス専用APIを使用して、LabVIEWからI²C制御を行います。 - NI-VISAを使った外部機器通信
NI-VISAを利用しI²C対応外部機器と通信可能で、多様な機器接続に対応します。
I²C通信が可能なNIハードウェア例
| ハードウェア | 特徴 |
|---|---|
| NI USB-8451 | USB 接続のI²C/SPIマスタ。最大250kHz。LabVIEW ドライバあり |
| NI USB-8452 | USB-8451の後継機。最大3.3MHz。LabVIEW ドライバあり |
| CompactRIO | FPGA搭載。CシリーズDIOモジュール(例:NI-9401)とI²C/SPIドライバAPIで実装。 |
| sbRIO/myRIO | FPGA 搭載。カスタムI²C実装が可能。 |
NI USB-8452

NI USB-8452は、I²CとSPIのデバイスと接続して、通信するためのマスタインタフェースです。
| モデル | USB-8452 |
| バスコネクタ | USB 2.0 |
| 最大I²Cクロックレート | 3.3 MHz |
| 最大SPIクロックレート | 50 MHz |
LabVIEWでSPI通信が可能なハードウェア例
| ハードウェア | 特徴 |
|---|---|
| Arduino | SPI/I²C/UART対応。 |
| Raspberry Pi | Linuxベース。SPI/I²C/UART対応。 |
| Analog Discovery 3 | 教育・評価用。SPI/I²C/UART/CANなどに対応。 |
VIパッケージマネージャー(VIPM)を用いて対応するLabVIEWのツールキットをダウンロードできます。
Analog Discovery 3

Analog Discovery 3は、デジタルオシロスコープ、ロジックアナライザ、波形発生器、パターンジェネレータなど、多彩な機能を備えた計測器です。
- 16個のデジタルI/Oチャネル(チャネルあたり最大125 MS/s)
- 個別に設定可能な3.3Vデジタル入力と出力、5Vトレラント入力
- SPI、I²C、UART、CAN、JTAG、ROMロジック、カスタムプロトコルなど対応
テストシステムでの活用例
- DUT上のセンサキャリブレーション
被試験デバイス(DUT)上のI²Cセンサに対し、LabVIEW からキャリブレーションデータを書き込み、読み出し検証を行うケースです。TestStandと組み合わせることで、量産ラインでの自動キャリブレーションが実現できます。 - EEPROMの読み書き検査
製品に搭載された EEPROMに対して、シリアル番号やファームウェアパラメータの書き込み・データ入力をI²C経由で行います。ページ書き込み時のウェイト(通常5ms程度)を考慮した実装が必要です。 - 電源ICのレジスタ設定
PMIC(Power Management IC)の出力電圧やシーケンスをI²Cレジスタ経由で動的に変更して、各条件でのDUT動作を検証するシナリオです。
LabVIEW 実装例(NI-845xドライバ使用)
NI-845x ドライバVIを使う場合
NI USB-8451/8452 を使用する場合、NIパッケージマネージャーから「NI-845x Driver Software」をインストールします

インストールすると、LabVIEWパレットにNI-845xドライバVIが表示されます。

ブロックダイアグラムにて、パレット[計測器I/O]→[NI-845x]→[I2C Basic]
LabVIEW I²C通信プログラム例(USB-8452)
●USB-8452を使用して、I²C通信で温湿度センサーSHT-21のデータを読み込みます。
- I²Cセッション開始
- 温度データ読み込みコマンド( 0xF3)送信
- 85msec待機
- 温度データ受信
- 温度データを数値変換(温度=-46.85+175.72×(Data/2^16))
- 湿度データ読み込みコマンド(0xF5)送信
- 85msec待機
- 温度データ読み込み
- 湿度データ受信
- 湿度データを数値変換(湿度=-6+125×(Data/2^16))
- I²Cセッション終了


実装上の注意点
アドレス表記
I²Cアドレスは7ビット値 で表記されるのが標準ですが、一部のデータシートではR/Wビットを含む8ビット値(左シフト済み)で記載されています。
例:温度センサTMP102の場合
- 7ビットアドレス: 0x48
- 8ビット Write アドレス: 0x90
- 8ビット Read アドレス: 0x91
NI-845x APIは7ビット表記を受け取ります。データシートの表記を確認して、必要に応じてシフト処理を行ってください。
プルアップ抵抗の選定
プルアップ抵抗値はバス容量とクロック速度に依存します。
- バス容量が大きい(配線が長い、デバイス数が多い)場合→抵抗値を小さくして立ち上がり時間を短縮
- 低消費電力が求められる場合→抵抗値を大きめに
- 一般的な目安:Standard Modeで4.7 kΩ、Fast Modeで2.2 kΩ
エラー処理パターン
I²C通信で発生しやすいエラーと対処法を以下に示します。
| エラー | 原因 | 対処 |
|---|---|---|
| NAK(No Acknowledge) | アドレス不一致、デバイス未接続、 デバイスビジー | アドレス確認、接続確認、リトライ |
| バスハング | SDAがLowに固定される | SCLを9回トグルして復旧、ハードウェアをリセット |
| タイムアウト | クロックストレッチング超過 | タイムアウト値の延長、デバイスの動作確認 |
| データ化け | ノイズ、プルアップ不足 | 配線短縮、プルアップ値調整、シールドケーブル使用 |
バスのスキャン
デバッグ時には、アドレス0x03~0x77を順にスキャンしてACKを返すデバイスを列挙する「バススキャン」が有効です。
LabVIEWでは、Forループと「Write.vi」を組み合わせて、ACK/NAK結果を配列に格納するだけで実装できます。
まとめ
I²Cは配線のシンプルさとデバイスの豊富さから、計測・検査システムにおいても非常に有用な通信プロトコルです。
LabVIEWではNI-845xドライバによる簡潔な実装から、FPGAによるカスタム実装まで、用途に応じた柔軟なアプローチが可能です。
実装の際は、アドレス表記の確認、適切なプルアップ抵抗の選定、安全なエラー処理を心がけることが、安定した通信を実現する鍵となります
