FX3/FX2LP XferData() APIの使い方 - KBA226200 - Community Translated (JA)

Version 2

    Community Translated by  NoTa_4591161 Expert         Version: **

     

    Translation - English: FX3/FX2LP XferData() API Usage - KBA226200

     

    質問:

    XferData()API関数の「パケットモード」パラメーターの意味は何ですか?

     

    回答:

    KBAは、デバイスがエンドポイントディスクリプタのMaxPcktSizeパラメーターの倍数でデータパケットを送信する条件について説明します。

    XferData() API関数がCyUSBライブラリで定義されています。このライブラリのソースファイルはhttp://www.cypress.com/documentation/software-and-drivers/ez-usb-fx3-software-development-kitにあります

    このAPI関数は、CyUSB3ドライバーにバインドされているホストとデバイス間の同期データ転送に使用されます。このAPI関数を使用するには、CyUSB.NETガイド/ Cypress USB Control Centerソースコードを参照してください。サイプレスUSBコントロールセンターは、「Transfer Data」ボタンが押されたときにこのAPIを呼び出します。

    XferData()は、次のいずれかが発生すると戻ります。

    1. 要求された数のデータバイトが転送されていた。
    2. 短いパケットまたは長さがゼロのパケットが転送されたとき。
    3. タイムアウト(関数の呼び出し中に設定)が発生したとき。

     

    XferData()の定義は次のようにします:

     

    public bool XferData(ref byte[] buf, ref int len, bool PacketMode);

     

    IN転送中に、ホストから要求されたデータのバイトがディスクリプタ内のエンドポイントのMaxPcktSizeパラメーターの倍数でない場合、XferData()関数は失敗し、トランザクションが失敗したことを示すエラーコード997が表示されます。これらの条件下で、「PacketMode」パラメーターの重要性は次のように説明されます。USBBulkSourceSinkファームウェアでプログラムされたFX3デバイスを考えます。このファームウェアは、1024バイトとしてMaxPcktSize INエンドポイントを設定します。サイプレスUSBコントロールセンターは、デバイスからデータを読み取るために使用されます。サイプレスUSBコントロールセンターの[ PktMode]チェックボックスが選択されている場合、XferData関数のPacketModeパラメータはtrueに設定されます。ケースA

    1. PktMode」チェックボックスはオフです。
    2. Bytes to transfer」ボックスは16387バイトで埋められます(MaxPcktSizeの倍数ではありません)

    [Transfer Data]ボタンを押すと、XferData()関数はタイムアウトになるまで待機し続け、トランザクションが失敗したことを示すエラーコード997を返します。

    pastedImage_0.png

     

    ケースB

    1. 「PktMode」チェックボックスがオンになっている
    2. Bytes to transfer」ボックスは16387バイトで埋められます(MaxPcktSizeの倍数ではありません)

    [Transfer Data]ボタンをクリックすると、データ転送要求が複数のXferData()関数呼び出しに分割され、それぞれがエンドポイントのMaxPcktSizeパラメーターと等しいデータ長を持ちます。この場合、要求されたデータ長の前の倍数(この場合は16384バイト、0x4000)までのデータがホストアプリケーションで受信されます。

    pastedImage_1.png 

    これらの両方の状況で、エンドポイントは停止し、ResetPipe)()関数を使用してクリアする必要があり、アプリケーションからの保留中のI/Oトランザクションは、新しい転送を実行する前にAbortPipe()関数を使用してクリアする必要があります。

       pastedImage_2.png