前回までは、SVI-06のボードとアプリケーションを使用して、アプリケーションノートAN86947の転送速度が実現できるのかを検討してきました。
その過程でサイプレスがSDKの一部として提供している送受信アプリケーションStreamについて内部を見る機会がありましたので、その経験をもとに少しStreamの内部構造を軽く解剖してみたいと思います。
まず、サンプルアプリは下記のフォルダに格納されています。
(SDKインストールフォルダ)\EZ-USB FX3 SDK\1.2\application\
applicationフォルダ内に、C#とC++のサンプルがあります。
今回は速度検証という観点からC++版のアプリを使用していました。
そこで、ここではC++版の方で解説を行います。
StreamアプリケーションはGUI上にいくつか設定項目を持ちますが、内部動作としては、USBエンドポイントからデータを受信し、受信したデータは読み捨てるということを続けるアプリケーションになっています。
データ受信については、「XferLoop」というスレッドをフォームロード時(Form1_Load)に作成し、そのスレッドで受信し続けます。
またデータ受信については非同期関数により左記のフローで行われています。
左記のようにデータ受信に関して非同期で動作しているため、受信依頼をはじめに複数個行うことにより、効率的にデータ受信が行えるようになっています。
この個数の指定はGUIの「Xfer to Queue」にて変更できるようになっています。
気になる方はぜひこの数値を変更して速度の変化を確認してみてください。
弊社で確認したところでは、数値にもよりますが、20MB/sほどの高速化に寄与していました。
なお、SVI-06は非同期処理では動作していません。
フレーム抜け無く受信するためなど理由はいくつかありますが、同期処理にてボードからPCへデータを受信しています。
今回は以上で終了です。
Streamの内部構造を解析しようとしたのはたぶんこのブログだけではないでしょうか!!画期的ですね!!!!
さて、次回はPCでの保存についてベンチマークの結果を含めて検証結果を説明します。