ZEROPLUS LAP-C(16032) 16ch100Mロジックアナライザ

概要

ZEROPLUS LAP-C(16032)を他のロジックアナライザと比べながら使ってみました。

商品

  • ZEROPLUSロジックアナライザ(ロジック キューブ)[32kビット16ch100M]LAP-C(16032)(秋月電子)

※現在ページが消えています

こちらの商品になります。定番のロジックアナライザですが、流石に10年以上前の発売なのでちょっと古くなってきました。秋月電子さんでもディスコン扱いになって、ちょっと安くなっています。

非常に使っている人は多いロジックアナライザだと思います。

公式サイト

ドライバーとアプリは公式サイトからダウンロードできます。それなりの頻度で更新は続いているようです。

インストール方法

ダウンロードしたファイルを実行するだけでかんたんにインストールすることができました。ただし、Winows版しかありません。

アプリ画面

起動直後はこんな画面になります。最初から日本語化されていますね。sigrok(PulseView)と比べるとかなり多機能です。

メニュー解説

ざっくりと画面説明をします。

①データ圧縮

サンプリングしたデータを、圧縮するかを指定します。基本的にメモリ量が少ないので常に圧縮を推奨します。ランレングス的な圧縮で波形に変化がない場合にメモリ利用量が減ります。

②メモリサイズ

常に最大の32Kでいいと思いますが、起動直後は2Kに戻ってしまいます、、、

③サンプリングレート

ターゲットとなる周波数の4倍から10倍を指定します。ただしメモリ圧縮をしている場合には割と高めの周波数をとりあえず設定しておいても大丈夫と言われています。

④表示項目

波形に表示する項目を設定します。

上記が時間表示です。パルスの継続時間がわかります。一番上がクロックですので、10マイクロ秒間隔ですので、100KHzというのがわかります。

上記がサンプリングポイントモードです。一番短い波形が最低でも2ポイント以上、できれば4ポイント以上ないと安定して取り込めていないと思います。

周波数モードです。クロックは正しく100KHzと表示されています。データ部分はHIGHとLOWの時間から計算しているので、正しい数値ではありません。

デフォルトは上記の波形時間を表示ですが、誤訳で表示しないになります。オプション画面だと「波形の時間を非表示」と正しいです。

⑤プリトリガ

トリガ条件を設定した場合に、トリガ前後のデータ量を指定します。トリガ後のデータを主に見たい場合には10%ぐらいに設定するとわかりやすいと思います。

⑥トリガページ

通常普通に取得したものが1ページになります。2ページにすると、1ページの次のデータになります。通常は1ページ固定で利用して、毎回同じデータ通信をする場合に、続きのデータも取得したい場合、2ページ目を指定して取得することで続きを取得することができます。

⑦トリガ回数

何度目のトリガからデータ取得を始めるかになります。通常は1ですが、電源投入時にパルスが出力されるなどの場合には回数を増やして、適切な場所にトリガがかかるようにします。

サンプル環境

今回は速度が調整できるようにSPIのデータを取得しました。利用している機材はESP-WROVER-KITになります。画面付きで、ピンがすぐにアクセスできるのでこの手の実験は便利だと思います。とはいえ、Digi-KeyやMouserなどでないと購入できないので、入手性は悪いです。4500円ぐらいですので、ESP32-DEVKITSなどと合わせて6千円以上にすれば送料無料になります。

スケッチ

#include <LovyanGFX.hpp>

struct LGFX_Config
{
  static constexpr spi_host_device_t spi_host = VSPI_HOST;
  static constexpr int dma_channel = 1;
  static constexpr int spi_mosi = 23;
  static constexpr int spi_miso = 25;
  static constexpr int spi_sclk = 19;
};

static lgfx::LGFX_SPI<LGFX_Config> lcd;
static lgfx::Panel_ILI9341 panel;

void setup(void)
{
  Serial.begin(115200);

  panel.spi_3wire = false;
  panel.spi_cs   = 22;
  panel.spi_dc   = 21;
  panel.gpio_rst = 18;
  panel.gpio_bl  = 5;
  panel.pwm_ch_bl = 7;
  panel.freq_write = 1000000;
  panel.freq_read  = panel.freq_write;
  panel.freq_fill  = panel.freq_write;
  panel.backlight_level = false;
  panel.offset_rotation = 2;
  panel.spi_mode_read = 1;
  panel.len_dummy_read_pixel = 16;

  lcd.setPanel(&panel);
  lcd.init();
}

void loop(void)
{
  uint32_t start_time = millis();
  lcd.fillScreen(random(65536));
  Serial.printf("%d, %ld\n", panel.freq_write, millis() - start_time);
}

LovyanGFXを利用させていただいています。panel.freq_writeで好きな周波数に設定が可能です。塗りつぶしだけの描画なので最高80MHzぐらいまで動くはずです。低速は100Hzとか好きなだけ下げることができます。

スケッチ例は1MHzに設定しています。ATOMの写真も写っていますが、前回のI2Cの信号も同時に取り込んでいます。

接続

ロジアナGPIO設定値役割
A019spi_sclkSCL
A125spi_misoSDO
A223spi_mosiSDA
A322spi_csCS
A421spi_dcD/C
A518gpio_rstRESET
A65gpio_blBacklight

LovyanGFXの設定値をみて、上記の配線にしました。B0とB1にATOMのI2Cもつながっていますが、とりあえず無視します。

使ってみる

周波数分析

リアルタイムモニタリングから周波数モードを使うと、各ポートの周波数が表示されます。A0がクロックで1M、A2がMOSIで500KHz、A6がバックライトのPWM制御で12KHzというのがわかります。一番大きい1MHzをターゲットにして、とりあえず10倍の10MHzのサンプリングで取得してみます。

取得してみる

リセットバタンを押しながら、キャプチャ開始をして直後にリセットボタンを離した場合のキャプチャです。A3のCSがはねているのが確認できました。

この例だとボタンを離すまでの時間が無駄になるので、トリガをかけたいと思います。SPIの液晶の場合にはリセット信号かCS信号あたりがトリガになると思います。

トリガの表示追加

トリガ属性設定からトリガーマークを有効化しておきます。これで何個目のトリガかがわかりやすくなります。トリガとトリガーの訳が混ざっている、、、翻訳はちょっと甘いですね。

CSにトリガを設定して取り直し

CSのA3のトリガ条件をLOWに下がった場合にして取り直してみました。下のサマリを見るとリセット時におそらくCSのパルスがでて、そこがトリガになっています。その後T1が2度目、T2以降からが実際のクロックがでていますのでこれぐらいの場所からが本当のデータだと思います。

プリトリガは、最初のTの左側の割合ですので10%ぐらいにして、トリガ後のデータをたくさん表示しています。デフォルトは50%なので前後が半分ずつになります。

トリガ回数を3に変更して取り直す

あまり変わっていないように見えますが、トリガより右側のデータがかなり増えています。プレトリガが10%なのでトリガより右が90%のデータになります。どうやらメモリ圧縮をかけているので、トリガより左側は単純なクロック信号しかないので時間は長いですが、10%分みたいです。

信号線をバスにまとめる

A0からA6を選択して、信号線をバスにまとめるを選択します。こうすることでプロトコル分析が利用できます。同じように不要なA7以降を選択して削除します。

バス特性

実際にプロトコル分析の設定をするために、バス特性を設定します。

バス特性の設定画面

プロトコルアナライザを選択し、検出でSPIでフィルターをした画面です。SPIだけでも複数ありますね。

上記のページの下の方にプロトコルの一覧があります。

プロトコルA0A1A2A3A4A5
SPISCLKSSDATA
Quad SPICSCLKSI/IO0SO/IO1WP/IO2Hold/IO3
SPI PLUSDataSS
eSPICSCLKI/O0I/O1
SPI Compatible(Atmel Memory)CSSCKSISO
MODIFIED SPICSSCKSDA

SPIのプロトコルを調べたところ、上記の設定になっていました。プロトコルごとに命名規則や端子アサインが違うので、設計が一貫していませんね、、、

単なるSPIはどうやら3線式のSPIのようです。データ入出力が同じ端子ですね。Quad SPIが4線式ですね。あとはメモリなどの特殊なSPIみたいでした。

SPIのプロトコル自体は上記のようなページで調べてみてください。

さて、4線式SPIで分析するのですが端子名がよくわかりません。CSとSCKはわかるのですが、SIとSOが一般的な名称ではない気がします。調べたところシグナルインプットとアウトプットな気がします。SIはMISOでマスター側インプット、SOはMOSIでマスター側アウトプットでした。そしてWPとHoldはありません。

いろいろ試したところ、Quad SPIも特定デバイス向けみたいで、普通にSPIでまずは試してみたいと思います。

パラメータ基本設定

SCLK、DATA、SSを設定します。

データフォーマット

データフォーマットのタブでアクティブにすると、画面上の波形にデコード結果が表示されるようになります。

プロトコル分析の結果がでるようになりました。左側の端子にも画面で設定した名前に変更されていますね。

波形の高さを変更

左側の端子名も正しい名前に変更して、その後に高さを増やしてみました。するとプロトコル分析結果のフォントサイズが大きくなって、逆に見にくくなります、、、

オプションの中にあるフォントサイズを指定すると、小さいままになりますが縦スクロールが面倒なので、デフォルトの大きさで使うのがいいのかもしれません。。。

サンプリングの限界調査

100MHzスペックですが、200MHzを選ぶことができます。SPIは1MHzで動かしていて、サンプリングポイントが200あるのでちゃんと秒間200Mサンプリングですね。

スペックを確認したところ、外部クロックは100MHzで内部クロックは200MHzみたいです。他のロジックアナライザだと200MHzと表記されることが多い気がしますが、100MHzとして販売しているんですね。

80MHzを取り込んでみる

んー、データ0x11なのですが、クロック判定がおかしいですね。

40MHz

おっ、こちらは正しくクロックが取れていますね。

60MHz(設定できず)

40MHzと判定されていますね。というかESP32ですので80MHzの約数しか設定できませんでした。。。

まとめ

とりあえず80MHzのターゲットは難しそうですが、40MHzであれば取得できそうです。100MHzだと思っていたので25MHzまでかと思いましたら、50MHzぐらいまでは安定して行けそうですね。

使っていて感じたのはちょっととっつきにくいアプリです。なれるといろいろわかってくるのですが、単純にI2Cなどのプロトコルを分析するのであればsigrokのほうが使いやすいです。

あとは一番安い16032なので、メモリサイズが足りません。圧縮があるのでなんとかなりますが32Kですので、高い周波数で長めにデータを取ることが難しいです。I2Cみたいな低速のプロトコルであればオンメモリに保存するZEROPLUSではなく、24MHzまでのEZ-USBみたいなストリーミングでメモリ容量関係なく長時間保存できるデバイスの方が便利かもしれません。

この商品がおすすめかというと、ちょっと微妙です。ディスコンなので非常に安くなっているのはおすすめポイントですが、今風のと比べるとスペック控えめです。

同じ価格帯だと、上記のDSLogic PlusあたりがAliExpressやBanggoodなどでは1万円強で販売されています。PlusでないU2Basicという安い旧モデルもありますがメモリが256Kbitsです。Plusは256Mbitsなので、単位が違います。。。1000倍になっているのでU2Basicはおすすめしません。非常に間違いやすくなっているので注意してください。

ちなみにDSLogicはSpartan-6 FPGAを使ったロジックアナライザで、アプリはsigrokをベースに改造したものになるみたいです。

ロジックアナライザはハードウエアはそれほど高くないのですが、アプリ開発にお金がかかるので、DSLogicはsigrokをベースにしている分安くなっていると思います。

安定度はZEROPLUSだと思いますが、海外通販でハードスペックは上ですが、ソフトにお金をかけていないのがDSLogicです。

コメントする

メールアドレスが公開されることはありません。

管理者承認後にページに追加されます。公開されたくない相談はその旨本文に記載するかTwitterなどでDM投げてください。またスパム対策として、日本語が含まれない投稿は無視されますのでご注意ください。