pico-jxgLABO × PulseView: プローブ接続いらずで気軽に使えるロジックアナライザを体験しよう!
RaspberryPi Pico の実験プラットフォーム pico-jxgLABO が PulseView に対応しました!
pico-jxgLABO と PulseView を組み合わせることで、プローブ接続を一切することなく Pico ボードの内部信号をロジックアナライザで観測できるようになります。
もちろん、Pico ボードをロジックアナライザ専用にして外部信号の観測をすることもできますし、内部・外部信号の両方を同時に観測することも可能です。ロジックアナライザ専用にする方法については、この記事の最後で説明します。
この記事では、pico-jxgLABO と PulseView のインストールと設定方法について説明し、実際に Pico ボードの波形観測を行います。ホスト PC として Windows を想定していますが、Linux などでも同様の手順で利用できると思います。
pico-jxgLABO の書き込み
Pico ボードへの pico-jxgLABO の書き込みと基本的な使い方はこちら。特別なハードウェアは必要なく、Pico や Pico 2 ボードを USB ケーブルで PC に接続するだけで始められます。
この記事で説明する実験を行うには、バージョン 0.2.0
以降の pico-jxgLABO が Pico ボードに書き込まれている必要があります。ターミナルソフトで about-me
コマンドを実行すると pico-jxgLABO のバージョンを確認できます。
L:/>about-me
Program Information
name: pico-jxgLABO
version: 0.2.0
:
:
PulseView のインストールと pico-jxgLABO との接続方法
インストール
PulseView はロジックアナライザの信号を可視化するためのツールです。I2C や SPI をはじめとする様々なプロトコルのデコードもサポートしているので、これらを活用することで pico-jxgLABO でキャプチャした信号を簡単に解析できます。
PulseView は以下のサイトで入手できます。
Nightly builds の「PulseView (32bit)」または「PulseView (64bit)」を選択してダウンロード・インストールしてください。
pico-jxgLABO と PulseView の接続
pico-jxgLABO と PulseView の接続手順は以下の通りです。
-
pico-jxgLABO を書き込んだ Pico ボードを USB ケーブルで PC に接続します
-
ターミナルソフトで pico-jxgLABO のロジックアナライザコマンド
la
を実行して、測定する GPIO ピン番号を指定します。以下の例では GPIO2, GPIO3, GPIO4 を測定対象にしていますL:/>la -p 2,3,4 disabled ---- 12.5MHz (samplers:1) pins:2-4 events:0/0 (heap-ratio:0.7)
-
PulseView を起動すると以下のいずれかのメイン画面が表示されます。
<No Device>
またはDemo device
と表示されている部分をクリックして「Connect to Device」ダイアログを表示します -
Step 1: Choose the driver
のドロップダウンリストからRaspberryPI PICO (raspberrypi-pico)
を選択します -
Step 2: Choose the interface
でSerial Port
を選択します。pico-jxgLABO は二つのシリアルポートを提供しますが、二つ目のポート (以下の例ではCOM25
) がロジックアナライザ用になるので、これを選択します。ボーレートは空白のままで大丈夫です -
Step 3: Scan for devices
のScan for devices using driver above
ボタンをクリックします。Step 4: Select the device
のリスト中にRaspberryPi PICO with 3 channels
というアイテムが表示されているのを確認してOK
ボタンをクリックします -
メイン画面が以下のようになります。
la
コマンドの-p
オプションで指定した順に、各 GPIO の信号がD2
,D3
,D4
として表示されます。取得するサンプル数が
1k samples
、サンプリングレートが5 kHz
になっていますが、これらを以下のように変更します。-
取得するサンプル数: 最大の
1 G samples
に変更します -
サンプリングレート: ターミナルソフトで
la
コマンドを実行すると、pico-jxgLABO のサンプリングレートを確認できますL:/>la disabled ---- 12.5MHz (samplers:1) pins:2-4 events:0/0 (heap-ratio:0.7)
今回の例では
12.5MHz
であることが分かったので、PulseView のサンプリングレートはこれよりも少し大きい15 MHz
に設定します。
-
これで PulseView から Pico ボード上の pico-jxgLABO を操作できるようになりました。左上の Run
ボタンをクリックすると、ラベルが Stop
に変わって信号のキャプチャが開始されます。
Stop
ボタンをクリックすると、キャプチャが停止して、観測した波形が表示されます。今はまだ信号が生成されていないので、波形は何も表示されません。
それでは、実際にいろいろな信号を生成して波形を観測してみましょう!
Pico ボード内部信号の波形観測
ここでは、pico-jxgLABO のコマンドを使用して Pico ボード自体で I2C, SPI, UART, PWM の信号を生成し、その波形を観測します。また、それらの信号をプロトコルデコーダで解析する方法も説明します。
I2C の波形観測
PulseView で Run
ボタンをクリックしてキャプチャを開始した後、ターミナルソフトで以下のようにコマンドを実行します。
L:/>i2c1 -p 2,3 scan
このコマンド操作で、GPIO2 と GPIO3 を I2C1 の SDA と SCL に割り当て、I2C アドレス 0x00 から 0x7f に Read リクエストを送ります。
PulseView で Stop
ボタンをクリックしてキャプチャを停止すると、以下のようにキャプチャした波形が表示されます。D2
が GPIO2 (I2C1 SDA)、D3
が GPIO3 (I2C1 SCL) の信号です。
基本的なマウス操作方法は以下の通りです。
- ホイールで拡大・縮小ができます
- 左クリックをしたまま波形表示エリア内でドラッグをすると表示範囲を上下左右に移動できます
信号波形の最初の部分を拡大したのが以下の画像です。
下図の矢印で示されるボタン:
をクリックすると、Decoder Selector
ペインが表示され、ここからプロトコルデコーダを選択できます。検索ボックスに i2c
を入力し、リストに表示された I2C
をダブルクリックすると、波形に I2C デコーダが追加されます。
下図の矢印で示されるボタン:
をクリックすると、Decoder Selector
ペインを非表示にします。
信号名の中の I2C
ラベルを左クリックすると、プロトコルデコーダのパラメータを設定するダイアログが表示されます。SCL
と SDA
にそれぞれ D3
と D2
を設定します。
ダイアログを閉じると、I2C をデコードした結果を確認できます。
I2C アドレス 0x00 から 0x7f に対して Read リクエストが送信されているのが分かります。I2C デバイスが接続されていないので、NACK 応答が返されています。
SPI の波形観測
PulseView で Run
ボタンをクリックしてキャプチャを開始した後、ターミナルソフトで以下のようにコマンドを実行します。
L:/>spi0 -p 2,3 write:0-255
このコマンド操作で、GPIO2 と GPIO3 を SPI0 の MOSI と SCK に割り当て、0 から 255 までのデータを送信します。
PulseView で Stop
ボタンをクリックしてキャプチャを停止すると、以下のようにキャプチャした波形が表示されます。D2
が GPIO2 (SPI0 SCK)、D3
が GPIO3 (SPI0 MOSI) の信号です。
信号波形の最初の部分を拡大したのが以下の画像です。
Decoder Selector
ペインを表示して検索ボックスに spi
を入力し、リストに表示された SPI
をダブルクリックすると、波形に SPI デコーダが追加されます。信号名の中の SPI
ラベルを左クリックするとプロトコルデコーダのパラメータを設定するダイアログが表示されるので、CLK
と MOSI
にそれぞれ D2
と D3
を設定します。
ダイアログを閉じると、SPI をデコードした結果を確認できます。
SPI の MOSI に 0 から 255 までのデータが送信されているのが分かります。
UART の波形観測
PulseView で Run
ボタンをクリックしてキャプチャを開始した後、ターミナルソフトで以下のようにコマンドを実行します。
L:/>uart1 -p 4 write:0-255,0
このコマンド操作で、GPIO4 を UART1 の TX に割り当て、0 から 255 および最後に 0 のデータを送信します。最後に 0 を送信するのは、最終データが 255 だと PulseView の UART プロトコルデコーダがそのデータのストップビットを正しく認識できないためです。
PulseView で Stop
ボタンをクリックしてキャプチャを停止すると、以下のようにキャプチャした波形が表示されます。D4
が GPIO4 (UART1 TX) の信号です。
信号波形の最初の部分を拡大したのが以下の画像です。
Decoder Selector
ペインを表示して検索ボックスに uart
を入力し、リストに表示された UART
をダブルクリックすると、波形に UART デコーダが追加されます。信号名の中の UART
ラベルを左クリックするとプロトコルデコーダのパラメータを設定するダイアログが表示されるので、TX
に D4
を設定します。
ダイアログを閉じると、UART をデコードした結果を確認できます。
UART の TX に 0 から 255 および 0 のデータが送信されているのが分かります。
PWM の波形観測
PulseView で Run
ボタンをクリックしてキャプチャを開始した後、ターミナルソフトで以下のようにコマンドを実行します。
L:/>pwm 2,3,4 func:pwm freq:1000 counter:0
L:/>pwm2 duty:.2; pwm3 duty:.5; pwm4 duty:.8
L:/>pwm 2,3,4 enable
このコマンド操作で、GPIO2, GPIO3, GPIO4 のファクションを PWM にし、周波数を 1kHz に設定します。デューティ比はそれぞれ 20%, 50%, 80% に設定し、PWM を有効にします。
PulseView で Stop
ボタンをクリックしてキャプチャを停止すると、以下のようにキャプチャした波形が表示されます。
信号波形の最初の部分を拡大したのが以下の画像です。
Decoder Selector
ペインを表示して検索ボックスに pwm
を入力し、リストに表示された PWM
をダブルクリックすると、波形に PWM デコーダが追加されます。PWM デコーダを全部で 3 つ追加します。信号名の中の PWM
ラベルを左クリックするとプロトコルデコーダのパラメータを設定するダイアログが表示されるので、各 PWM デコーダの Data
にそれぞれ D2
, D3
, D4
を設定します。
ダイアログを閉じると、PWM をデコードした結果を確認できます。
デューティ比がそれぞれ 20%, 50%, 80% で周波数 1.0kHzの PWM 信号が生成されているのが分かります。
pico-jxgLABO における PWM の操作方法は以下の記事で詳しく説明しているので、参考にしてください。
▶️ 操作方法を知って使いこなす! pwm コマンドで Pico の PWM の限界を探る
la
コマンドのオプション
la
は pico-jxgLABO のロジックアナライザコマンドです。la
コマンドのオプションを変更することで、測定する GPIO ピン番号や測定対象 (内部信号/外部信号)、サンプリングレートなどを指定できます。
ここでは、PulseView との連携に影響する主なオプションについて説明します。
測定する GPIO ピン番号の指定方法
la
コマンドの -p
オプションで測定する GPIO ピン番号を指定します。単一の GPIOピン番号を指定することもできますし、範囲を指定することもできます。例を以下に示します。
コマンド | 説明 |
---|---|
la -p 0 |
GPIO0 を測定対象にします |
la -p 2,3,8,9 |
GPIO2,3,8,9 を測定対象にします |
la -p 2-15 |
GPIO2 から GPIO15 までを測定対象にします |
la -p 2-5,8-10,15 |
GPIO2 から GPIO5, GPIO8 から GPIO10, GPIO15 を測定対象にします |
PulseView で表示されるラベルは、ここで設定した GPIO ピン番号にかかわらず常に D2
, D3
, D4
... となります。 ラベルを左クリックすることで表示名を変えることができるので、分かりやすい名前に変更しておくと良いでしょう。
測定対象の指定方法
測定対象の信号を Pico ボード内部にある信号 (internal) にするか、Pico ボードの GPIO ピンに入力される外部信号 (external) にするかを --target
オプションで指定します。指定しない場合は、内部信号が測定対象になります。
コマンド | 説明 |
---|---|
la --target:external |
外部信号を測定対象にします |
la --target:internal |
内部信号を測定対象にします |
--target
オプションは全体の GPIO ピンの測定対象を指定しますが、オプション --internal
や --external
を使うことで一部の GPIO ピンを内部信号または外部信号として指定することができます。例を以下に示します。
コマンド | 説明 |
---|---|
la --target:external --internal:2,3,4 |
GPIO2,3,4 は内部信号、それ以外は外部信号 |
la --target:internal --external:2,3,4 |
GPIO2,3,4 は外部信号、それ以外は内部信号 |
サンプリングレート
pico-jxgLABO はサンプラーと呼ばれる実行単位を用いて信号のサンプリングを行い、最大 4 個まで動作させることができます。一つのサンプラーは最大 12.5MHz (Pico2) または 10.4MHz (Pico) のサンプリングレートで動作し、全体のサンプリングレートはこのサンプリングレートにサンプラー数を乗じた値になります。動作させるサンプラーの数はオプション --samplers
で指定します。以下に例を示します。
コマンド | サンプリングレート |
---|---|
la --samplers:1 |
12.5MHz (Pico2), 10.4MHz (Pico) |
la --samplers:2 |
25.0MHz (Pico2), 20.8MHz (Pico) |
la --samplers:3 |
37.5MHz (Pico2), 31.2MHz (Pico) |
la --samplers:4 |
50.0MHz (Pico2), 41.7MHz (Pico) |
サンプラーの数を増やすとサンプリングレートが上がりますが、サンプリングできるイベント数が減ります。
Pico ボードをロジックアナライザ専用にして使用する方法
Pico ボードをロジックアナライザ専用にして、外部信号を観測することも可能です。例えば、以下のように la
コマンドを実行すると、GPIO2 から GPIO22 および GPIO26 から GPIO28 の合計 24 本の GPIO ピンをロジックアナライザの計測ピンとして利用できます。
L:/>la -p 2-22,26-28 --target:external
以下の内容で autoexec.sh
という名前のファイルを L:
ドライブのルートディレクトリに作成しておくと、Pico ボードの電源を入れたときに自動的にロジックアナライザの GPIO ピン設定が行われるようになります。ターミナルソフトでコマンド操作をする必要がなくなるので便利です。
la -p 2-22,26-28 --target:external
まとめ
本記事では、pico-jxgLABO と PulseView のインストールと設定方法について説明し、実際に Pico ボードの波形観測を行いました。また、プロトコルデコーダを使用して、I2C, SPI, UART, PWM の信号を解析する方法も紹介しました。これらを活用することで、Pico ボードの内部信号や外部信号を簡単に観測・解析できるようになります。
pico-jxgLABO と PulseView を組み合わせて、快適な信号解析ライフを楽しんでください!
Discussion