- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi
I want to translate KBA92475, please confirm to my work.
Regards,
Nino
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi, Nino-san
Confirm for this KBA. Sorry to miss this item.
Thanks,
Jenna
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
タイトル:USB 2.0の同時バルクインとコントロールイン転送でのEZ-USB® FX3™問題 - KBA92475
バージョン 1
userc_45255が 2014/06/09 3:42 に作成。userc_45255 が 2017/05/17 3:00 に変更。
Version: *A
質問:
USB 2.0スピードで、FX3™のバルクインとコントロールイン転送が同時に動作する場合、バルクイン転送はコントロールパイプでエラーが発生し、制御エンドポイントデータの破壊が見られます。これをどのように回避しますか?
回答
この問題を回避するためには、バルクインエンドポイントに対応するDMAチャネルが制御要求の間に停止している事を確認し、かつ一旦制御要求が完了したら再開することを確認して下さい。これを行うために下記の指図に従って下さい。
- DMAチャネルを構成する場合、callback notification = CY_U3P_DMA_CB_CONS_SUSPでコールバックを有効にして下さい。これで、チャネルが正常に停止している場合はいつもコールバックが生成されます。
- 全ての制御標準/ベンダー要求が処理されるコールバック関数の設定では、CyU3PUsbGetSpeed() APIを使用して、デバイスが2.0モードで列挙される事を確認して下さい。
- CyU3PUsbGetSpeed()がCY_U3P_HIGH_SPEEDに戻る場合、バルクパイプを停止し、停止するまで待ってください。チャネルを停止するためにCyU3PDmaChannelSetSuspend() APIを使用します。このAPIがすぐに戻り、DMAチャネルコールバック関数(手順1で有効)が呼び出される時にチャネル停止が確認される事に注意して下さい。
- チャネルが正常に停止した後、CyU3PUsbSendEP0Data() APIを使用してホストに制御エンドポイントデータを送信する事ができます。
- 制御エンドポイントデータがホストに送信された後、制御転送のトランザクションステージが完了するのを待ちます。USBイベントCY_U3P_USB_EVENT_EP0_STAT_CPLTは、これが発生し、イベントがUSBイベントコールバック関数で処理された事を通知します。
- 制御転送が正常に完了すると、バルクインエンドポイントのDMAチャネルは停止状態(CyU3PDmaChannelSetSuspend)から出て、下記に示すように、再度(CyU3PDmaChannelResume)を実行する必要があります。
CyU3PDmaChannelSetSuspend (&DMA_channel_handle, CY_U3P_DMA_SCK_SUSP_NONE, CY_U3P_DMA_SCK_SUSP_NONE);
CyU3PDmaChannelResume( &DMA_channel_handle, CyFalse, CyTrue);
注意: 上記手順はFX3 SDKのGpifToUsbサンプルプロジェクトに記載されています。
このプロジェクトは“<install_path>\EZ-USB FX3 SDK\1.3\firmware\basic_examples\cyfxgpiftousb”にあります。
834 閲覧 カテゴリ: USB: SuperSpeed Peripherals タグ: superspeed usb peripherals, ez-usb fx3a superspeed usb 3.0 peripheral controller