LabVIEW通信入門 SPI(シリアル・ペリフェラル・インタフェース)

SPI(Serial Peripheral Interface シリアル・ペリフェラル・インタフェース)は、4線式の同期シリアル通信プロトコルです。高速かつ全二重通信が可能で、ADC/DAC、フラッシュメモリ、ディスプレイ、FPGA コンフィグレーション、RF トランシーバなど、広範なデバイスで採用されています。

本記事では、LabVIEWからSPIデバイスを制御するための基本知識、ハードウェア選定、手法、プログラミングで役立つノウハウを解説します。

SPIの特徴

  • 同期式シリアル通信
    SPIは同期通信方式で、マスタのクロック信号に合わせてデータを送受信します。
  • 全二重通信
    SPIは全二重通信をサポートして、同時にデータ送受信が可能です。
  • シンプルなプロトコル
    通信プロトコルがシンプルで高速かつ安定した通信を実現しますが、エラーチェックはソフトウェアで補います。

SPIプロトコルの基本

信号線

SPIは以下の4本の信号線で構成されます。

  1. SCK(Serial Clock シリアル・クロック)
    マスタが生成するクロック信号で、通信の送受信タイミングを決定します。
  2. MOSI(Master Out Slave In マスター・アウト・スレーブ・イン)
    マスタからスレーブへデータを送るための信号線です
  3. MISO(Master In Slave Out マスター・イン・スレーブ・アウト)
    はスレーブからマスタへデータを返すために使用されます。
  4. SS (Slave Select スレーブ・セレクト)
    複数スレーブの中から通信対象を選択する信号線で、通常はアクティブLowです。
    CS(Chip Select チップ・セレクト)などと表記される事があります。

クロック極性とクロック位相(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ですが、必ずデータシートで確認してください。

全二重通信

SPIはMOSIとMISOが独立しているため、マスタがクロックを供給する限り、送信と受信が同時に行われます。

  • 読み出し時でも、マスタはダミーデータ(通常 0x00 or 0xFF )を送出する必要がある
  • 最初のバイト交換では、スレーブはまだコマンドを受け取っていないため無効なデータを返す

通信速度

SPIにはプロトコル規格上の速度上限はなく、デバイスの仕様に依存します。

  • 一般的なセンサ・EEPROM:1~20MHz
  • 高速フラッシュメモリ:50~100MHz
  • FPGA間通信:100MHz以上も可能

SPIとI²Cの比較

項目SPII²C
通信方式全二重半二重
配線本数最小4本(デバイス数に比例して増加)2本:SCL, SDA
マスタ/スレーブ1マスタ + 複数スレーブ1マスタ + 複数スレーブ(マルチマスタ可)
スレーブ選択CS信号(デバイスごとに1本)アドレス指定
通信速度高速(数MHz〜数十MHz)3.4 MHz(High Speed Mode)(標準: 100kHz)
プロトコルの複雑さシンプルやや複雑(ACK/NACKあり)
エラーチェック基本なし(実装依存)ACK/NACKによる確認あり
配線距離短距離向き比較的長距離向き
プルアップ抵抗不要必須
消費電力やや高め低消費電力
主な用途ADC, DAC, Flash, LCDセンサ, RTC, EEPROM
LabVIEWでの扱い専用SPIツール/ VISA / DAQVISA / I2C対応デバイス

SPI が適するケース

  • 高速データ転送が必要(ADC の連続サンプリングなど)
  • 全二重通信が必要
  • デバイス数が少ない(1~4 台程度)

I²Cが適するケース

  • 配線数を最小化したい
  • 多数のデバイスをバス接続したい
  • 低速で十分(センサモニタリングなど)

LabVIEWからSPIを制御

  • 専用LabVIEWツール(VI)を使用
    NI・メーカーが提供しているデバイス専用APIを使用して、LabVIEWからSPI制御を行います。
  • NI-VISAを使った外部機器通信
    NI-VISAを利用しSPI対応外部機器と通信可能で、多様な機器接続に対応します
  • NI-DAQmxによるデジタルI/O制御
    NI-DAQmx対応デバイスでクロックやデータ線をソフト制御します。柔軟ですが高速通信には不向きです。

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

ハードウェア特徴
NI USB-8451USB 接続の I2C/SPI マスタ。最大12MHz。LabVIEW ドライバあり
NI USB-8452USB-8451の後継機。最大50MHz。LabVIEW ドライバあり
CompactRIOFPGA搭載。CシリーズDIOモジュール(例:NI-9401)とSPI/I2CドライバAPIで実装。
sbRIO/Single-Board RIO組み込み向け。FPGA上でSPI通信IPを実装可能。
FlexRIO/RシリーズLabVIEW FPGAでSPI通信IPを実装可能。高性能・カスタム用途向け。

NI USB-8452

ni-usb-8452
NI USB-8452

NI USB-8452は、集積回路(I2C)、シリアルペリフェラルインターフェース(SPI)デバイスに接続し、通信を行うためのマスターインターフェースです。

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

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

ハードウェア特徴
ArduinoSPI/I2C/UART対応。
Raspberry PiLinuxベース。SPI/I2C/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、I2C、UART、CAN、JTAG、ROMロジック、カスタムプロトコルなど対応

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

  1. 高速 ADC データ収集
    SPI 接続の高分解能 ADC(ADS1256, AD7768 など)から計測データを高速に取り込むシナリオです。FPGA ベースの SPI マスタと組み合わせることで、連続サンプリングとリアルタイムデータストリーミングが実現できます。
  2. フラッシュメモリの読み書き検査
    製品に搭載された SPI フラッシュ(W25Q シリーズなど)に対し、ファームウェアイメージの書き込み・ベリファイ・消去を行います。セクタ消去やページプログラムのタイミング管理が実装のポイントです。
  3. RF トランシーバの設定・検査
    SPI 経由で RF IC(Si4463、CC1101 など)のレジスタを設定し、各周波数・出力電力条件での送受信性能を評価します。TestStand のシーケンスと連動させることで、多条件の自動試験が可能です。
  4. DAC を用いたアナログ信号生成
    SPI 接続の DAC(AD5761、MCP4921 など)を LabVIEW から制御し、任意波形や精密基準電圧を生成するシステムです。DUT への試験入力信号源として活用できます。

LabVIEW SPI通信プログラム例(NI USB-8452)

NI USB-8452を使用して、SPI通信で熱電対センサーMAX31855のデータを読み込みます。

  1. USB-8452との通信ポートを開く
  2. SPI通信の設定
  3. SPIデータを読み込み
  4. SPIデータを熱電対の温度データに換算
  5. USB-8452との通信ポートを閉じる
LabVIEW SPI通信プログラム例-フロントパネル
フロントパネル
LabVIEW SPI通信プログラム例-ブロックダイアグラム
ブロックダイアグラム

まとめ

  • SPIは高速性、全二重通信、シンプルなプロトコル構造を特長とする通信インタフェースです。
  • SPI制御はセンサや評価システムで幅広く応用可能で、正確な理解と注意が不可欠です。
  • LabVIEWでは NI-845x ドライバによる手軽な実装から、FPGA によるカスタム高速実装まで、幅広い選択肢があります。
  • LabVIEWを使うと複雑なSPI処理を視覚的かつ直感的に構築でき、開発効率が向上します。