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本の信号線で構成されます。

  1. SDA(Serial Data シリアル・データ):双方向データライン。
  2. SCL(Serial Clock シリアル・クロック):クロックライン(マスタが生成)

両線ともオープンドレイン構成で、外部プルアップ抵抗(一般的に 4.7 kΩ)を介して電源に接続します。この構成により、複数デバイスのバス共有が可能です。

アドレッシング

I²Cでは、複数のスレーブの中から、通信するデバイスをアドレス指定します。
各スレーブデバイスに7ビット、または、10 ビットのアドレス が割り当てられます。
マスタは通信開始時にアドレスとR/Wビットを送出し、該当スレーブのみが応答(ACK)します。

クロック極性とクロック位相(CPOL/CPHA)

SPIには 4 つの動作モード の存在です。

モードCPOLCPHAクロックアイドル状態データサンプリングエッジ
Mode 000Low立ち上がりエッジ(最初でサンプル)
Mode 101Low立ち下がりエッジ(最後でサンプル)
Mode 210High立ち下がりエッジ(最初でサンプル)
Mode 311High立ち上がりエッジ(最後でサンプル)

CPOL(Clock Polarity クロック・ポウラリティ):クロックのアイドル状態が Low(0)/High(1)
CPHA(Clock Phase クロック・フェーズ):データをサンプリングするのがクロックの最初エッジ/最後エッジ

デバイスのデータシートに記載された CPOL/CPHA 設定を合わせなければ、データ化けや通信ができないという問題が発生します。一般的なのはMode 0ですが、必ずデータシートで確認してください。

通信シーケンス

基本的な通信シーケンスは以下のとおりです。

  1. STARTコンディション:SDAがSCL=Highの間にHigh→Lowへ遷移
  2. アドレスバイト送出: 7ビットアドレス+Wビット(0)
  3. ACK受信:スレーブがSDAをLowに引く
  4. データバイト送出:レジスタアドレス、設定値など
  5. ACK受信
  6. 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²CSPI
通信方式半二重全二重
配線本数2本:SCL, SDA最小4本(デバイス数に比例して増加)
マスタ/スレーブ1マスタ + 複数スレーブ(マルチマスタ可)1マスタ + 複数スレーブ
スレーブ選択アドレス指定CS信号(デバイスごとに1本)
通信速度標準:100kHz~High Speed Mode:3.4MHz高速(数MHz〜数十MHz)
プロトコルの複雑さやや複雑(ACK/NACKあり)シンプル
エラーチェックACK/NACKによる確認あり基本なし(実装依存)
配線距離比較的長距離向き短距離向き
プルアップ抵抗必須不要
消費電力低消費電力やや高め
主な用途センサ, RTC, EEPROMADC, 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-8451USB 接続のI²C/SPIマスタ。最大250kHz。LabVIEW ドライバあり
NI USB-8452USB-8451の後継機。最大3.3MHz。LabVIEW ドライバあり
CompactRIOFPGA搭載。CシリーズDIOモジュール(例:NI-9401)とI²C/SPIドライバAPIで実装。
sbRIO/myRIOFPGA 搭載。カスタムI²C実装が可能。

NI USB-8452

ni-usb-8452
NI USB-8452

NI USB-8452は、I²CとSPIのデバイスと接続して、通信するためのマスタインタフェースです。

モデルUSB-8452
バスコネクタUSB 2.0
最大I²Cクロックレート3.3 MHz
最大SPIクロックレート50 MHz

LabVIEWでSPI通信が可能なハードウェア例

ハードウェア特徴
ArduinoSPI/I²C/UART対応。
Raspberry PiLinuxベース。SPI/I²C/UART対応。
Analog Discovery 3教育・評価用。SPI/I²C/UART/CANなどに対応。

VIパッケージマネージャー(VIPM)を用いて対応するLabVIEWのツールキットをダウンロードできます。

Analog Discovery 3

Analog Discovery 3

Analog Discovery 3は、デジタルオシロスコープ、ロジックアナライザ、波形発生器、パターンジェネレータなど、多彩な機能を備えた計測器です。

  • 16個のデジタルI/Oチャネル(チャネルあたり最大125 MS/s)
  • 個別に設定可能な3.3Vデジタル入力と出力、5Vトレラント入力
  • SPI、I²C、UART、CAN、JTAG、ROMロジック、カスタムプロトコルなど対応

テストシステムでの活用例

  1. DUT上のセンサキャリブレーション
    被試験デバイス(DUT)上のI²Cセンサに対し、LabVIEW からキャリブレーションデータを書き込み、読み出し検証を行うケースです。TestStandと組み合わせることで、量産ラインでの自動キャリブレーションが実現できます。
  2. EEPROMの読み書き検査
    製品に搭載された EEPROMに対して、シリアル番号やファームウェアパラメータの書き込み・データ入力をI²C経由で行います。ページ書き込み時のウェイト(通常5ms程度)を考慮した実装が必要です。
  3. 電源ICのレジスタ設定
    PMIC(Power Management IC)の出力電圧やシーケンスをI²Cレジスタ経由で動的に変更して、各条件でのDUT動作を検証するシナリオです。

LabVIEW 実装例(NI-845xドライバ使用)

NI-845x ドライバVIを使う場合

NI USB-8451/8452 を使用する場合、NIパッケージマネージャーから「NI-845x Driver Software」をインストールします

NI-845xドライバ

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

NI-845xドライバVI

ブロックダイアグラムにて、パレット[計測器I/O]→[NI-845x]→[I2C Basic]

LabVIEW I²C通信プログラム例(USB-8452)

●USB-8452を使用して、I²C通信で温湿度センサーSHT-21のデータを読み込みます。

  1. I²Cセッション開始
  2. 温度データ読み込みコマンド( 0xF3)送信
  3. 85msec待機
  4. 温度データ受信
  5. 温度データを数値変換(温度=-46.85+175.72×(Data/2^16))
  6. 湿度データ読み込みコマンド(0xF5)送信
  7. 85msec待機
  8. 温度データ読み込み
  9. 湿度データ受信
  10. 湿度データを数値変換(湿度=-6+125×(Data/2^16))
  11. I²Cセッション終了
LabVIEW I²C通信プログラム例-フロントパネル
フロントパネル
LabVIEW 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によるカスタム実装まで、用途に応じた柔軟なアプローチが可能です。
実装の際は、アドレス表記の確認、適切なプルアップ抵抗の選定、安全なエラー処理を心がけることが、安定した通信を実現する鍵となります