- リンクを取得
- ×
- メール
- 他のアプリ
- リンクを取得
- ×
- メール
- 他のアプリ
こんにちはドルフィンシステム福島です。
USB接続型のUSRPであるB200は、USB 2.0でも3.0でも接続が可能です。転送レートで劣るUSB 2.0ポートに接続してしまうと、IQデータのデータ落ちが発生する場合があります。
これを事前に防ぐためにはプログラムでUSB 2.0接続時に警告を表示する等の方法があります。
前回、Linux上でプログラム的にUSRP B200がUSB 3.0で接続されているか、2.0で接続されているのか判別する方法を紹介しました。
今回は、Windows上のC#とLabVIEWでUSB デバイスディスクリプタを取得し、USB 2.0か3.0で接続されているかを判別する方法を紹介します。
ここで紹介するソースコードなどはgithubで公開しています。
mikiofuku / get_usrpb200_usb_connected_speed
https://github.com/mikiofuku/get_usrpb200_usb_connected_speed
USRP B200をWindowsで認識させる
WindowsでUSRP B200をPCに接続しても、自動的にドライバはインストールされません。
念のためWindowsでUSRP B200を認識させる方法も紹介しておきます。
以下のページの"Post-Install Tasks"のURLからWindows UHD USB Drivers(erllc_uhd_winusb_driver.zip)をダウンロードし、展開します。
https://files.ettus.com/manual/page_install.html
USRP B200をPCに接続します。するとデバイスマネージャで"WestBridge"というデバイスとして認識されます。
"WestBridge"を右クリック→"ドライバーの更新"→コンピュータを参照してドライバーを検索→参照ボタン→zipを展開したフォルダを選択→OKボタン→次へボタン
下図のように更新されます。
無事認識しました。
コンパイル済LibUsbDotNetをダウンロードする
USRP B200のUSB接続制御は、libusbというドライバで行っています。このlibusbからをC#で制御するライブラリがLibUsbDotNetです。
今回はLibUsbDotNetを通じてB200の情報を取得したいと思います。
LibUsbDotNetはgithub上にソースコードが公開されていますが、コンパイル済バイナリは以下のURLからダウンロード可能です。LibUsbDotNet_Bin.2.2.8.zipをダウンロードしてください。
https://sourceforge.net/projects/libusbdotnet/files/LibUsbDotNet/LibUsbDotNet%20v2.2.8/
ちなみにLibUsbDotNetトップページの"Download"ボタンからダウンロードするとLibUsbDotNetインストーラーがダウンロードされてきますので注意が必要です。
B200を認識していることを確認する
LibUsbDotNet_Bin.2.2.8.zipを適当な場所に展開すると、BenchmarkCon.exeが入っています。
B200を接続した状態でコマンドプロンプトを開き、下図のようにBenchmarkConコマンドを実行します。
B200がリストアップされることを確認します。
C#でプログラム的に認識してみる
C#プロジェクト一式はリポジトリに入っています。
次にC#でプログラム的に認識させてみます。
C#のコンソールプロジェクトを新規作成し、プロジェクトエクスプローラーの参照で"LibUsbDotNet.dll"を選択します。(このファイルは展開したzipファイルに含まれています。)
そして以下のコードを実行し、USB DescriptorからbcdUSBを取得し接続プロトコルを判別します。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using LibUsbDotNet; using LibUsbDotNet.WinUsb; namespace fs_dotnet { class Program { static void Main(string[] args) { // 認識している全デバイスから指定したVendorId, ProductIdで抽出する。 var dev = UsbDevice.AllDevices.Where(d => { return d.Vid == 0x2500 && d.Pid == 0x21; }); foreach(WinUsbRegistry d in dev) { var wd = (WinUsbDevice)d.Device; Console.WriteLine(wd.Info.Descriptor); Console.WriteLine("{0:x}", wd.Info.Descriptor.BcdUsb); } } } }
B200接続して直ぐの状態(USB 2.0接続)
B200の動作が開始してからの状態(USB 3.0接続)
LabVIEWで実装する
C#でUSB Descriptorの取得方法が分かったので、それをLabVIEWから使えるように実装します。
このLabVIEW VIはリポジトリに入っています。
直接ダウンロードするには、以下の2つのページの"Download"ボタンを押してダウンロードしてください。
実行すればUSB DescriptorからB200の接続速度を取得することが出来ます。
以上、ドルフィンシステム福島でした。
- リンクを取得
- ×
- メール
- 他のアプリ
コメント
コメントを投稿