ロジックアナライザ ZEROPLUS LAP-C でSPIデータ解析

ロジックアナライザは、通信プロトコルのデータ解析機器・ツールです。

信号の波形を見るだけならオシロスコープでもいいのですが、SPI, I2C, UARTなどのデジタル通信で、実際にどのようなデータが流れているかを解析するのにはロジックアナライザが便利です。

波形表示
![image.png](https://qiita-image-store.s3.amazonaws.com/0/120192/e9517004-9afa-18a6-ed2d-40c16b8ec806.png)

パケットデータ表示
![image.png](https://qiita-image-store.s3.amazonaws.com/0/120192/fd707ff6-bdbd-2913-82b5-1a8ca444d2d3.png)


ここでは、ZEROPLUSのLAP-Cを使って、SPIのデータ解析を行う方法を記載します。

参考記事：
[ZEROPLUS社のLAP-CシリーズのロジアナがWindows 10に対応](https://synapse.kyoto/blog/electronic_handicraft/zeroplus_software)
[ロジックアナライザー ZEROPLUS LAP-C を使ってみた ( SDカードの SPI クロック測定等 )](https://www.mgo-tec.com/blog-entry-logicanalyzer-zeroplus-lap-c-01.html)

数年ぶりに調べてみたら、日本語記事が多数出ていますね。ありがたいです。

# 使用機器
ZEROPLUS LAP-C (16032)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/120192/141c29a3-7a89-50cb-3161-f762117c6789.png)

## 仕様
対応プロトコル：SPI, I2C, UART, USB 1.1, USB 2.0, CAN, eMMC, GPIB, HDMIなど、
　　　　　　　　多数のプロトコルが標準機能として使えます。
チャンネル数：16
サンプリング周波数：100Hz ～ 100MHz
データ表示：PCアプリ(Webからダウンロード可)

## 接続方法
Youtubeに公式動画が有ります。
[LAP-C - Unboxing and connection to DUT (En)](https://www.youtube.com/watch?v=NV1xpP-Me5E&feature=youtu.be)

本製品と測定対象プロトコルの信号線をケーブルで繋ぎます。
この時、GNDの接続を忘れないようにします。

# PCアプリ
![image.png](https://qiita-image-store.s3.amazonaws.com/0/120192/306201a5-9584-0315-0ae5-e76566a37f8b.png)

## インストール
各製品のページからソフトウェアをダウンロードしてインストールします。
[http://www.zeroplus.com.tw/logic-analyzer_en/products.php?pdn=3&pdnex=list](ZEROPLUS Logic Analyzers)

本記事では、LAP-C(16032) V3.13.05を使用しました。

最新版ではWindows10に対応しており、多くのプロトコルが最初から使えるようになっています。
(旧版では、パッケージ付属のキーで追加ダウンロードが必要でした)

## 使い方

### 信号線の設定
以下で接続している場合です。
A0 : SCLK
A1 : CS
A2 : MOSI
A3 : MISO

各「チャネル名称」のシングルクリックで信号線に名前を付けます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/120192/388ebd13-2a1c-445d-feab-27c36b01d471.png)

#### MOSI 対応 (masterからslaveへの送信データ)
SCLK, CS, MOSIまでを範囲選択して右クリックから「信号線をバスにまとめる」を選択します。
グループ化されるので、さらに右クリックで「バス特性」を選択します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/120192/10c68c5c-b2d1-d813-1239-7919f38d1390.png)

「プロトコルアナライザ」から目的のプロトコルを選択します。
(ここでは「SPI MODULE V1.18.01(CN01)」を指定)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/120192/a6cbabc9-8d1c-48bf-0f6a-32a826201608.png)

「パラメータ構成」ボタンから、

* [Configuration]
先ほど付けた名前を設定します。
DATAにはデータの中身を表示したい信号線として、MOSIを指定します。
１つのバスでは同時に１つの信号線データしか表示出来ません。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/120192/d61bd991-5f09-fd38-bfca-4748a8dd92cc.png)
その他、接続するデバイスに応じて設定します。

* [Data Format]
DATAの表示形式を指定します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/120192/90dfcc9b-acac-f92a-07a1-bc850a561c9d.png)

次に、CSの「トリガ条件」をクリックして、以下の状態にします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/120192/130255a6-f0e0-8a33-036e-04c39567266f.png)
SPIで通信開始を表す、CSがHighからLowに落ちるタイミングのデータが取得されます。

#### MISO 対応 (slaveからmasterへの送信データ)
チャネル名称のMISOを右クリックして「新しいチャネル/バス」を追加し、
SCLKの信号線名(A0など)を指定
同様にCSの信号線名(A1など)を指定
すると、MISOの上にA0とA1の信号線が追加されます。

それぞれSCLK, CSと名前を付けて、後はMOSIと同様な設定を行います。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/120192/80c50b2b-dc64-c83d-6fc7-3a244d7ff9f4.png)

### サンプリング設定
メニューから「バス/シグナル」-「サンプリング設定」を選びます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/120192/091562dc-4426-af0b-d4ab-2de0ddd2022a.png)
対象のプロトコルに応じた周波数を設定します。
SPIが1MHz設定ならそれよりも大きい10MHzなどを選択する必要が有ります。

RAMサイズは本製品のスペックに応じた値を選択します。
ここでは、16Kを設定します。

データ圧縮すると、取得出来るデータが増えます。

## サンプリング
### 実行
本製品自体に付いているボタン
![image.png](https://qiita-image-store.s3.amazonaws.com/0/120192/2994ef67-785e-26dd-56cb-bb9cbb829055.png)
もしくは、アプリの実行ボタン(F5)を押します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/120192/c75ae7c3-c047-e4cf-b519-b0d7707a1bc8.png)
ターゲットでSPIの通信を行わせて、トリガ条件を満たしたところでデータを取得して停止します。

### 結果表示
![image.png](https://qiita-image-store.s3.amazonaws.com/0/120192/59cc9909-8d51-d61e-50e9-85846a49d4da.png)

MOSIとMISOの値が16進で表示されています。
データがASCIIであれば、バス特性で「ASCII」を指定することでテキスト表示されます。

メニューの「ウィンドウ」-「バスパケットを図形リスト化して表示」を選択しておくと、
一連のパケットがリストで表示されます。

### トリガのタイミング調整
例えば、複数パケットが流れるがそのうち何番目かのトリガでデータを取得したいという場合、
メニューの「トリガ回数」に何番目かを設定しておきます。

また、全体のサンプリング期間におけるトリガを掛けるタイミングを指定することが出来ます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/120192/4d554271-964f-5bda-3de0-b09db98a611b.png)

例えば、10%にすると、以下のように全サンプリングデータの最初から10%の所がトリガ(Tのラベルが付いている縦の赤い線)になります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/120192/1bb36391-c708-277c-314b-6eb842e0db3b.png)

トリガ後の一連のデータを見たいのか、トリガの前のデータを見たいのかで割合を設定します。

## 画面表示設定
### 拡大/縮小/移動
ツールバーの以下で拡大と縮小が出来ます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/120192/81602ea4-aedb-3dcd-7432-89578c4ae56c.png)

左右移動については、
マウスホイールでも出来ますが、次のトリガー位置に移動したいという場合、
トリガーを掛けている信号線(CS)を選択して、ツールバーの以下左右ボタンを押します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/120192/cd47324c-7bff-5bb0-06d7-e58cc92f055d.png)

以下の「手」のボタンでも左右ドラッグが出来ますし、真ん中のボタンで範囲選択しての拡大表示が出来ます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/120192/e8842deb-1231-f29f-2eec-cb87afaeeb8d.png)

### 表示モード
![image.png](https://qiita-image-store.s3.amazonaws.com/0/120192/ad03ea5c-0eff-b145-4beb-794b1c2c4482.png)
時間モードにすると、信号の変化から変化の間の時間が表示されるようになります。

### 時間間隔計測
例えば、ある位置から別の位置までの時間を知りたいという場合、「定位バー」を使用します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/120192/3fc96d01-b867-5605-2c00-a7ad0885e137.png)
ラベルAとBが付いた縦線です。
上の「A - B = 65.404us」がAとBの時間間隔です。
Tはトリガが掛かった位置です。

この線自体のドラッグ移動も出来ますが、設定したい場所での右クリックで設定することも出来ます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/120192/dd0d30de-805c-63c7-ef00-374e5eedc174.png)