cyusb3ドライバーを使用してホストアプリケーションのFinishDataXfer()から返されるデータ - KBA229186 - Community Translated (JA)

Version 1

    Community Translated by  NoTa_4591161 Expert          Version: **

     

    Translation - English: Data returned by FinishDataXfer() in a host application using the cyusb3 driver – KBA229186

     

    質問:
    cyusb3ドライバーを使用するホストアプリケーションでのBulkIsoc非同期転送のFinishDataXfer()によって返されるデータの違いは何でしょうか?

     

    回答:
    非同期データ転送は、BeginDataXfer()WaitForXfer()FinishDataXfer() APIを使用して行われます。

     

    この記事では、BulkおよびIsocエンドポイントの場合に、FinishDataXfer()から受信したデータを使用するアプリケーションについて説明します。BeginDataXfer()USBリクエストブロック(URB)を作成し、アプリケーションでFinishDataXfer()からデータを取得できます。

     

    APIの説明については、{FX3インストールパス}\EZ-USB FX3 SDK\1.3\doc\SuiteUSB\CyUSB.NET.pdfをご参照願います。

     

    EZUSB_FX3_SDKCStreamerの例では、これらのAPIを使用してデバイスからデータを取得します。以下の説明は、USB3デバイスでの例を述べております。


    ケース1 Bulkエンドポイント

     

    次の設定を検討してください。

    • Bulkエンドポイントのエンドポイントコンパニオンディスクリプタのバースト値は4です。
    • streamer アプリケーションのXferPPX)あたりのパケット数は8です。

     

    この設定では、EndPoint.MaxPktSize4 * 1024 = 4KBです。ここで、4はバースト値です。1024は、Bulkエンドポイントの最大USB PacketSizeです。 BeginDataXfer()32KB8 * 4KB8PPXです)のURBを作成します。この転送は、次のいずれかが発生したときに完了します。

    • 短いUSBパケット(1024バイト未満のパケットサイズ)が受信される。
    • 長さゼロのパケット(ZLP)が受信された。
    • すべての32KBデータが受信される。

     

    ケース2 Isocエンドポイント 次の設定を検討してください。

    • Bulkエンドポイントのエンドポイントコンパニオンディスクリプタのバースト値は4です。
    • mult設定を2にします。
    • streamer アプリケーションのXferPPX)あたりのパケット数は8です。

     

    上記の構成の場合、EndPoint.MaxPktSize4 * 2 * 1024 = 8KBです。ここで、4はバースト値です。2multです。1024は、Isocエンドポイントの最大USB PacketSizeです。

     

    BeginDataXfer()は、64KB8 * 8KB8PPXです)のURBを作成します。この場合の転送は、すべてのパケットが受信されると終了します。受信されるパケットには、ZLP /ショートパケット/フルパケットを含めることができます。上記の例では、URB64KBです。したがって、予想されるパケット数は64です。転送が完了すると、64パケットはZLP /ショートパケット/フルパケットの組み合わせになります。

     

    添付されているものは、長さ8Kのデータバッファを送信するファームウェアの例です。この例でデバイスがデータを送信するシーケンスは次のとおりです。1つのデータバッファ、USBバス上の遅延、2つのバッファ、遅延、3つの バッファ、遅延、1 つのバッファなど。ただし、3つのバッファが送信されると、3つのバッファの2番目は短いパケットになります。1つのバッファには8つの1024パケットがあるため、各パケットの最初のバイトには0x00からインデックスが付けられます。

     

    変更されたCStreamerアプリケーションの例も添付されており、FinishDataXfer()から返されたデータ(ZLPを除く各USBパケットの最初のバイト)をファイルに書き込みます。アプリケーションの[Start]ボタンをクリックすると、FinishData.binファイルがアプリケーションと同じディレクトリに作成されます。この名前のファイルがすでに存在する場合、そのファイルは削除され、再度作成されます。[Stop]ボタンをクリックすると、ファイルが閉じます。

     

    上記のIsocエンドポイントの構成を選択すると、次のデータが書き込まれます。

    1.png

     

    この図では:

    1. 0xaaは、FinishDataの開始を示すマーカーです。
    2. 0xccは、パケットにすべてのZLPが含まれていることを示します。注:前述のように、0xaaおよび0xccは受信したデータの一部ではありません。
    3. 最初の行には、0x00から0x17までの24個のインデックスがあり、24個の1024サイズのパケット、つまり24KBを示します。5 * 8KBの代わりにZLPに相当する5つの0xccマーカーがあります(つまり、デバイスからの40 ZLP)。これは合計で64KBであり、Xferごとに要求されました。
    4. 上の図の最後のボックスでは、2番目のXferの最初のパケットのインデックスは0x38です(これは短いパケットからのものです)。2番目のXferの残りの7つのパケットはZLPであることに注意してください。

     

    上記のログの理解を深めるには、添付のStreamerアプリケーションソースと添付のファームウェアを参照してください。