USBのフルスピード(12Mbps)とハイスピード(480Mbps)の切り替え信号を確認しました。
オシロスコープでChirp信号の波形測定をしています。
USB2.0の回路構成・プロトコルの基礎を実際の波形含めて分かりやすく紹介します。
USBのフルスピードとハイスピードの切り替えをオシロで確認してみた
USB2.0のフルスピードとハイスピードの切り替えをオシロスコープで測定しました。
ラズベリーパイからUSBをリセットさせることで、切り替え時の波形を確認しています。
USB2.0は最初にフルスピード(12Mbps)で接続して、その後ハイスピード(480Mbps)になります。
実際にフルスピードとハイスピードの切り替わるUSB2.0動作の波形を確認できています。
時間軸を拡大すると、切り替え信号であるChirp信号も確認することができました。
USB2.0の測定は専用のオシロスコープ・差動プローブが必要
本来USB2.0を測定するにはハイスピード(480Mbps)に対応できる専用オシロ・プローブが必要です。
数百万円単位の測定器のため、個人ではとても手が出せません。
USB2.0の測定が周波数特性の視点で難しい理由を下記記事で紹介しました。
よろしければご覧ください。。(リンク先はこちらから)
もし仮に数万円レベルのオシロで確認しても480Mbpsの正常波形の測定は難しいです。
高速域の帯域が足りない,インピーダンスが合わない、など多くの懸念点があります。
インピーダンス不整合による波形への影響に関しては下記記事でも紹介しています。
そのため個人のオシロスコープ・プローブでも何とかUSB2.0で測定出来る箇所を確認しました。
USB2.0のハイスピード(480Mbps)が本格的に動き出す前をメインに調査しています。
測定方法、またUSBのフルスピードとハイスピードの確認方法含めて紹介していきます。
また今回使用したオシロスコープに関しては下記記事で紹介しています。
よろしければご覧ください。(リンク先はこちらから)
USBのハイスピードとフルスピードとロースピード
USBには複数のスピードのモードがあり、用途によって通信速度が異なります。
今回は下記の3種類をオシロスコープで確認しました。
- USBメモリ(ハイスピード)
- USB-RS232C変換ケーブル(フルスピード)
- USBマウス(ロースピード)
USB3.0以降だとSuperSpeed_5.0Gbps等の更に高速なモードもあります。
但し、個人の環境では測定できないため今回の記事では省略します。
USBのハイスピードとフルスピードの違い
USBのハイスピードとフルスピード(またロースピード)では通信速度と回路構成が大きく違います。
各スピードの違いを紹介します。
USBのハイスピードの速度は480Mbps
USBのハイスピード(High-Speed)はUSBメモリ含めて多くの場所で使われています。
通信速度は480Mbpsです。
ハイスピードのD+とD-はプルダウンされている
USBハイスピードの回路図としては下記形になります。
ホスト側・デバイス側のD+とD-の両方で45Ωでプルダウンされます。
PD(プルダウン)されているためオシロで波形測定すると通常Low(0)でアクティブHi(1)となります。
※フルスピードで正確な波形は取れませんが、通常がLow/Hiのどちらか程度は分かります。
USBのフルスピードの速度は12Mbps
USBのフルスピード(Full-Speed)はプリンター・変換ケーブルなどに使われています。
大容量のデータ転送はしなくとも、ある程度の通信速度が必要な箇所で使用されています。
通信速度はハイスピード(480Mbps)と比べると遅く、12Mbpsとなります
12Mbps程度ならばUSB・シリアル通信含めて個人的なオシロスコープでも測定可能です。
以前にUARTで最大通信速度を12Mbpsで測定しました。
よろしければご覧ください。(リンク先はこちらから)
フルスピードのD+は1.5kΩでプルアップ
USBフルスピードの回路図としては下記形になります。
ホスト側はD±の両方が15kΩでプルダウンされ、デバイス側はD+のみ1.5kΩでプルアップしてます。
D+のみがプルアップされているため「D+が通常Hi(1)」「D-が通常Low(0)」となります。
USBのロースピードの速度は1.5Mbps
USBのロースピード(Low-Speed)はUSBマウス・キーボードなどに使われています。
通信速度は遅くとも問題ない箇所のため、1.5Mbpsとなります
ロースピードに関しては以前アナライザで測定しました。下記記事で紹介しています。
USBの基礎的なプロトコルも紹介していますので是非ご覧ください。(リンク先はこちらから)
ロースピードのD-は1.5kΩでプルアップ
USBロースピードの回路図としては下記形になります。
ホスト側はD±の両方が15kΩでプルダウンされ、デバイス側はD-のみ1.5kΩでプルアップしてます。
D-のみがプルアップされているため「D+が通常Low(0)」「D-が通常Hi(1)」となります。
フルスピードとはD±が逆の形になります。
USBのハイスピードとフルスピードの確認方法
大抵身近にあるUSB2.0のデバイスはハイスピード(480Mbps)が多いです。
その中でフルスピード(12Mbps)をどのようにして判別するのか紹介します。
ラズベリーパイ(raspberry pi)もしくはLinuxのPCであれば簡単にUSBのスピードが確認できます。
Linuxはlsusbで確認できる
一番簡単なのはラズパイ(Linux)にUSBを接続して下記コマンドのlsusbを打つことです。
USBのスピード(480M,12M,1.5M)が表示されます。
一応実施例のログを下記に貼り付けておきます。
1 2 3 4 5 6 7 8 |
pi@raspberrypi:~ $ lsusb -t /: Bus 03.Port 1: Dev 1, Class=root_hub, Driver=dwc_otg/1p, 480M /: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 5000M /: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/1p, 480M |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/4p, 480M |__ Port 1: Dev 3, If 0, Class=Mass Storage, Driver=usb-storage, 480M |__ Port 3: Dev 4, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M |__ Port 4: Dev 5, If 0, Class=Vendor Specific Class, Driver=ftdi_sio, 12M |
Linuxはdmesgで詳細を確認可能
詳細に確認したい場合はdmesgをおすすめします。下記コマンドで簡単に調査可能です。
USBデバイスのメーカ名・製品名まで分かります。
High-Speed(480Mbps)のdmesg
参考までにハイスピード(480Mbps)対応のUSBメモリのdmesg箇所を貼り付けておきます。
2行目に「high-speed」と表記されています
1 2 3 4 5 6 7 8 9 |
[ 1222.457683] hub 1-1:1.0: USB hub found [ 1222.776869] usb 1-1.3: new high-speed USB device number 15 using xhci_hcd [ 1222.908602] usb 1-1.3: New USB device found, idVendor=0930, idProduct=6544, bcdDevice= 1.00 [ 1222.908618] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [ 1222.908631] usb 1-1.3: Product: TransMemory [ 1222.908643] usb 1-1.3: Manufacturer: TOSHIBA [ 1222.908654] usb 1-1.3: SerialNumber: 0022CFF653F1C130DA4D088D [ 1222.910494] usb-storage 1-1.3:1.0: USB Mass Storage device detected [ 1222.911167] scsi host0: usb-storage 1-1.3:1.0 |
Full-Speed(12Mbps)のdmesg
参考までにフルスピード(12Mbps)のUSB変換ケーブルのdmesg箇所を貼り付けておきます。
2行目に「full-speed」と表記されています
1 2 3 4 5 6 7 8 9 10 |
[ 947.754808] hub 1-1:1.0: USB hub found [ 948.073868] usb 1-1.3: new full-speed USB device number 13 using xhci_hcd [ 948.219609] usb 1-1.3: New USB device found, idVendor=0403, idProduct=6001, bcdDevice= 4.00 [ 948.219617] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [ 948.219622] usb 1-1.3: Product: USB HS SERIAL CONVERTER [ 948.219627] usb 1-1.3: Manufacturer: FTDI [ 948.219632] usb 1-1.3: SerialNumber: FTY513QL [ 948.227712] ftdi_sio 1-1.3:1.0: FTDI USB Serial Device converter detected [ 948.227774] usb 1-1.3: Detected FT232BM [ 948.228957] usb 1-1.3: FTDI USB Serial Device converter now attached to ttyUSB0 |
Low-Speed(1.5Mbps)のdmesg
参考までにロースピード(1.5Mbps)のUSBマウスのdmesg箇所を貼り付けておきます。
2行目に「low-speed」と表記されています
1 2 3 4 5 6 7 8 |
[ 107.039944] hub 1-1:1.0: USB hub found [ 107.369055] usb 1-1.3: new low-speed USB device number 4 using xhci_hcd [ 107.506820] usb 1-1.3: New USB device found, idVendor=046d, idProduct=c016, bcdDevice= 3.40 [ 107.506835] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=0 [ 107.506848] usb 1-1.3: Product: Optical USB Mouse [ 107.506860] usb 1-1.3: Manufacturer: Logitech [ 107.515986] input: Logitech Optical USB Mouse as /devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.3/1-1.3:1.0/0003:046D:C016.0002/input/input1 [ 107.516530] hid-generic 0003:046D:C016.0002: input,hidraw0: USB HID v1.10 Mouse [Logitech Optical USB Mouse] on usb-0000:01:00.0-1.3/input0 |
Windowsはデバイスマネージャーから確認可能?
最初Windowsは「デバイスマネージャー」からUSBのスピードが確認できると考えていました。
しかし(筆者の)最新のPCだと内部のUSB3.0ハブ経由になるのかスピードが分からず…
WindowsではUSB Device Tree Viewerで判別可能
(筆者の力量では)デバイスマネージャーで確認できませんでした。
しかしWindowsのPCではフリーソフトでUSBのスピードを確認できました。
「USB Device Tree Viewer」という海外の無料ソフトです。(英語ですがダウンロード先はこちら)
USBの詳細情報を表示できるツールで「Device Bus Speed」の箇所でスピードを判別できます。
フルスピード(12Mbps)だと「0x01」で、ハイスピード(480Mbps)だと「0x02」でした。
USBハイスピードの波形を確認する
ハイスピードの波形確認するために準備します。
USB2.0では最初はフルスピード(12Mbps)で接続され、その後ハイスピード(480Mbps)になります。
USB2.0動作の最初のモード切り替わりを確認するため測定準備を行います
USB信号を電圧測定できるように取り出す
今回はデバッグ測定のため、USBの延長ケーブルを使ってUSBの信号D+とD-を取り出します。
ワイヤーストリッパーでシースを剥いて信号線をプローブで掴めるようにしました。
以前にホーザン製とベッセル製のワイヤーストリッパーを比較した記事も作成しました。
よろしければご覧ください。(リンク先はこちらから)
これでUSBのD±の電圧測定できるようになりました。
但し、本来の測定ではNGです。(今回は趣味のデバッグの測定ということで楽をします)
ケーブル中間地点ではなく測定したい(ドライバ・レシーバ)箇所で波形確認する必要があります。
USBのリセットをLinuxのコマンドで実施する
フルスピードとハイスピードの切り替わり信号を測定するためには、USBをリセットさせます。
USB2.0であるUSBメモリをリセットさせます
ラズベリーパイ(Linux)でUSBをリセットする方法は簡単です。
下記の2つの(unbind,bind)コマンドを実行します。
上記コマンドにより一度USBを抜いて挿したリセット状態が作れます。
(手でUSB抜き差しすると挿入時のノイズにより狙ったトリガーで測定できないことを配慮しました)
ロースピード(1.5Mbps)とフルスピード(12Mbps)のリセット時の波形
今回はUSB2.0のハイスピードのリセットがメインですが、他のスピードでも確認しました。
Full-Speed(12Mbps)のリセット時(Unbind→bind)の波形は下記になります。
リセット後からD+のプルアップが維持される形になります。
Low-Speed(1.5Mbps)のリセット時(Unbind→bind)の波形は下記になります。
リセット後からD-プルアップが維持される形になります。
USBハイスピードとフルスピードの判定
USBの測定環境も整いましたので切り替わりの判定となるChirp信号を確認します
USB2.0の規格書はダウンロード可能
Chirp信号含めてUSBの詳細に関しては規格書を参考ください。
USBは特に登録不要で、USB規格団体のHPから誰でもダウンロードすることができます。
(英語ですがリンク先はこちらから)
Reset(Chirp)プロトコルを確認する上で参考になったサイト
今回USB2.0のReset(Chirp)プロトコルを学ぶ上で非常に参考になったのは下記2記事です。
下記サイトの管理者様・運営者様にはこの場を借りて御礼申し上げます。
Wave1 USB信号の波形(1) リセットChirp信号(EZ-USB/FX2)
Chirpはハイスピード通信前のハンドシェイク
Chirp信号には細かいフロー・仕様があるのですが、概略だけ紹介します。
切り替わりのタイミングは一瞬ですので拡大して確認して確認していきます
ホスト・デバイス間でChirp信号をお互いに確認した後にハイスピード(480Mbps)で通信します。
Chirp信号確認後に、D±がハイスピードの45Ωのプルダウンに切り替わります。
(フルスピード(12Mbps)のD+の1.5kΩも切り離しています)
まとめ
今回の記事をまとめますと下記になります。
趣味レベルのオシロのRIGOL DS1054ZでもUSB通信の確認・勉強が可能です
よろしければ皆さまもオシロスコープを触ってみてください
コメント