USBの波形を測定!D+とD-をロジックアナライザで解析してみた

本サイトはアフィリエイト広告を利用しています。
インターフェース

USBの波形をロジアナで解析してみました。D±の波形、また測定動画含めて紹介します。

USB2.0や3.0の高速信号の測定では差動プローブ・専用機器が必要ですが、Low-speed(1.5Mbps)ならば個人の環境で対応可能でした。

 

スポンサーリンク

USBの波形を測定!D+とD-をロジックアナライザで解析してみた

USBのLow-Speed(1.5Mbps)ならば個人的な環境で十分にロジアナで解析できます。

下記のようにUSBのパケットをSOP(Start of Packet)から EOP(End of Packet)まで確認できています。

 

PC-マウス間のUSB信号のD±を取り出してロジアナで確認しました。

 

USB2.0やUSB3.0の高速信号は難しいですが、Low-Speed(1.5Mbps)を確認するだけでも十分にUSBの勉強になります。

 

分かりやすいように動画でもまとめてみました。ぜひご覧ください。

 

測定方法・測定した波形の詳細を紹介していきます。

 

USBの規格を確認して測定可能なデバイスを探す

USBといえば「USBメモリ」「USBキーボード」「USBハードディスク」など身近にいくらでもあります。

最近はUSB2.0やUSB3.0の規格が主流です。信号速度も高速になっています。

(USB3.0からの対応のSuper Speedモードは最大転送速度_5.0Gbps)

 

高速の差動信号を測定しようとすると差動プローブや専用機器が必要です。

個人的な環境では難しいと思われます。(筆者の趣味のロジアナの最大サンプリングは最大12MHzです。)

 

「Hi Speedの480Mbps」や「Super Speedの5Gbps」の高速なUSB信号は筆者の環境では測定できません。

 

Low-speedの1.5Gbpsならば測定可能

しかし、高速の信号を測定できなくともUSBの解析は可能です

USB2.0、USB3.0含めてUSBには「Low-speed」というモードが規格が定められています。

現在でも多くの箇所で使われています。

 

マウス・キーボードのような高速な転送速度が必要ないデバイスは「Low-speed」で対応しています。

(USB2.0や3.0の通信している高機能なマウス・キーボードもあると思いますが、そこは省略します)

 

「Low-speed」はUSBのモードでも一番遅く、最大転送速度は1.5Mbpsです。

1.5Mbps程度ならば個人的なロジアナでも十分に測定可能です。

 

以前にUSB以外のシリアル通信のUART(転送速度115200bps)も測定しました。

その際の下記記事もよろしければ参考ください。

Pythonでserial(シリアル)通信!Read/Writeの波形を見てみた
uartのシリアル通信でRead/Write・ボーレート変更時の波形をアナライザで確認しました。 Pythonとraspberry piでテストして測定動画を撮っています。 シリアル通信の使い方・基礎を確認したい方におすすめです。 以前はP...

 

USBの規格書はダウンロード可能

もし「USB」について本格的に勉強したい方は規格書を読めばどれだけでも勉強可能です。

規格書はUSBの規格団体から自由に個人でもダウンロードできます。リンク先はこちらから

※実際に波形を見て勉強したい方もいると思います(主に筆者ですが…)。そのため今回は実際に測定してみました。

 

USB4.0の規格書もダウンロードできます

最新のUSB4.0はコネクタはType-Cで最大転送速度が40Gbpsという高速信号になっています。

もし興味ある方は規格書をダウンロードして詳細を確認してみてください。リンク先はこちらから

 

USB波形の解析ならオシロスコープよりロジアナ

今回はUSBの信号の中身(プロトコル)を解析したいという目的ですのでロジアナを使用します。

 

もし信号特性(DC特性・AC特性)を確認したいのであれば、オシロスコープが必要です。

 

ロジックアナライザの購入は個人でも可能です

趣味のロジックアナライザ(ロジアナ)は簡単に購入できます

最近はI2CやSPIなど数MHz程度の解析するアナライザが1000円足らずで買えます。

 

筆者はモジュール化されていないアナライザの開発ボードを買いました。

値段は安く多くのピンで遊べますが、EEPROMなどの設定が少し手間でした。

 

下記のようなモジュールのアナライザを買った方が簡単に測定できて楽です。

値段としても数百円程度の差です。

 

USB通信のプロトコルを解析する

マウスのUSB信号を引き出してロジアナでプロトコルを解析する準備をしていきます。

今回は「Low-speed(1.5Mbps)の遅い通信速度」かつ「個人的なデバッグ」のためジャンパー接続していきます。

 

※冒頭にも記載しましたがUSBを波形を正確に測定するには差動プローブや専用機器が必要になります。

 

USBのケーブルからD+とD-とGNDを引き出す

最初にUSBケーブルをワイヤーストリッパーで被膜を剥きます。

 

USBケーブルの一番外の被膜だけ剥がすと「電源_赤」「GND_黒」「D+_緑」「D-_白」の信号線が確認できます。

 

USB信号である「D+_緑」「D-_白」とグランドの「GND_黒」の被膜をさらに剥いてロジアナと接続します。

 

USBのロジアナの設定をする

ロジアナについては各装置・ソフトで設定方法が違いますので、筆者の環境を簡単に説明します。

ロジアナのソフトを起動してUSBの設定にします。(筆者のソフトは「sigrok」です)

 

「D+」と「D-」にどの信号Chを使っているかを設定します。

 

あとはサンプリングとレコード長を設定しておきます。

今回筆者は「サンプリング_12MHz」「レコード長_50M samples」にしました。

50M/12M=約4秒分のUSB通信のデータが取れます。

 

後はマウスとPCを繋げれば接続・設定が終了しますので、測定すれば波形が取れます。

 

USB通信の基礎を波形から学ぶ

USB通信の中身を測定した波形から勉強していきます。

 

USBのプロトコルを学ぶ上で非常に参考になったのは下記3記事です。

下記サイトの管理者様・運営者様にはこの場を借りて御礼申し上げます。

USB Made Simple

USBの通信プロトコル

USBフルスピード信号波形

 

USBのプロトコルの全ては紹介できないので、Low-speedの基礎的なことを紹介していきます。

最初に紹介した動画を再度下記にも載せておきます。解析の流れ含めて分かりますのでぜひ一緒にご覧ください。

 

 

詳細を確認したい場合は紹介したサイト、もしくはUSBの仕様書をご確認お願いします。

 

USBのLow-speedはD-がプルアップされている

USBのLow-speed(1.5Mbps)は「D-」が1.5kΩでプルアップされています。

今回はデバイスのマウス内でプルアップされます。回路構成は下記となっています。

※Hi-speed(12Mbps)では「D+」が1.5kΩでプルアップする形になります。

 

実際に波形を確認してもLow-speedは「D-」がプルアップされて、基本Hiになっていることが分かります

 

USBのLow-speedでは1ms事にKeep Aliveが確認できる

Low-speedのUSBの波形ではms単位で確認すると1ms事に「D-」がLowに落ちています

 

この信号は「Keep alive」と言って1ms事にデバイスが接続していることを示す信号です。

「Keep Alive」で2bit分「D-」がLowに落ちています

「Keep alive」信号がないとデバイスが接続されていないと判断され、サスペンド(一時停止))されてしまいます。

 

USBのLow-speedの最大転送速度(1.5Mbps)を確認する

USBのLow-speedの最大転送速度1.5Mbpsを波形から確認しました。

 

1bit当たり1/1.5M=667nsを確認できましたので問題有りませんでした。

12MHzのサンプリングのため1bit当たり8個サンプルが取れています。

 

USBパケットのSOPからEOPまでを確認する

USBにはパケットというの概念があり、始まりはSOP(Start of Packet)、終わりは EOP(End of Packet)と呼ばれています。

 

SOP(Start of Packet)はアイドル状態からK状態になったタイミングを示します。

 

EOP(End of Packet)は「SE0」が2bit以上のタイミング(その後にJ状態1bit)です。

※SE0…D+とD- が両方ともLowに落ちている時です。

 

USBのSYNCを確認する

パケットの最初に同期をとるためのデータ「SYNC」があります。

 

測定したSYNC箇所のデータを確認すると「00000001」ということが分かります

 

USBのPIDを確認する

SYNCの後にはパケットの種類のデータ「PID」があります。(PID…Packet Identifier)

※PIDの詳細は今回は省略させてください。ここ説明し始めるとパケットの種類全て説明する必要があるため…

 

PIDは「前半4bit」+「後半(反転した)4bit」の8bit構成となっています。

今回は「10010110」ですのでPIDは「1001」の4bitとなり「INパケット」と分かります。

パケットの種類がINということはデータをホストへ転送するパケットです。

 

USBのADDRとENDPとCRCを確認する

PIDの後ろの中身はPIDの種類によって変わってきますので概略だけの説明にします。

今回はINパケットのため「ADDR」「ENDP」「CRC」となります。

 

その後はEOP(End of Packet)となります。

大分省略した形になりますがUSBのパケットを紹介することができました

 

USBのフルスピード(12Mbps)とハイスピード(480Mbps)をオシロで確認しました

オシロを購入したのでUSB2.0のフルスピードとハイスピードの切り替え信号を確認しました

 

USB2.0の回路構成・プロトコルの基礎を下記記事で分かりやすく紹介しています。

よろしければぜひ一緒にご覧ください。(リンク先はこちらから)

USBのフルスピードとハイスピードの切り替えをオシロで確認してみた
USBのフルスピード(12Mbps)とハイスピード(480Mbps)の切り替え信号を確認しました。 オシロスコープでChirp信号の波形測定しています。 USB2.0の回路構成・プロトコルの基礎を実際の波形含めて分かりやすく紹介します。

 

USBのインピーダンスについてシミュレーションしてみました

USBは高速信号のためインピーダンスについても注意する必要があります。

(今回のLowspeed(1.5Mbps)では速度が遅いので特に問題なりませんでしたが…)

 

USBのインピーダンス不整合が起きた場合どうなるかLTSPICEで確認してみました。

よろしければご覧ください。(リンク先はこちらから)

インピーダンス不整合と反射の影響をオシロとシミュレーションで確認
インピーダンス不整合と反射の影響を調査してみました。 シミュレーションに加えて、実際のオシロスコープでも確認をしています。 実際に反射が起きてしまった場合の波形への影響具合を分かりやすく紹介します。

 

まとめ

USBをロジアナで測定、その後にパケットの中身を確認しながらプロトコルを勉強することができました。

USB通信の基礎ならばLow-speedでも十分に勉強できます。

個人的なロジアナも簡単に手に入りますので、ぜひ皆さまも試してみてください

コメント