Tip / ログイン to post questions, reply, level up, and achieve exciting badges. Know more

cross mob

FX3のCYU3P_USBEP_SS_RESET_EVTイベントを処理する – KBA226725

FX3のCYU3P_USBEP_SS_RESET_EVTイベントを処理する – KBA226725

Infineon_Team
Employee
Employee
50 replies posted 25 likes received 25 replies posted

Original KBA: Handling CYU3P_USBEP_SS_RESET_EVT event in FX3 - KBA226725

Version: **

この資料は、EZ-USB™ FX3ファームウェアでCYU3P_USBEP_SS_RESET_EVT の処理の仕方について説明しています。

このイベントは、拙劣なケーブルまたは劣悪な試験/実行環境のために、多くのUSB 3プロトコル-レベルがバス上で再試行が発生した場合に、INエンドポイントでのみ発生する可能性があります。(プロトコル-レベルCRCエラーが発生する可能性がある)

イベントを処理するには以下を実行してください:

手順 1

このイベントがトリガされる場合は、確認にためファームウェアのエンドポイントイベントコールバックを登録してください。CyU3PUsbRegisterEpEvtCallback()APIを使用して、エンドポイントコールバックを登録してください。

使用方法:

CyU3PUsbRegisterEpEvtCallback (CyU3PUsbEpEvtCb_t cbFunc, uint32_t eventMask, uint16_t outEpMask, uint16_t inEpMask);

cbFunc  : コールバック機能ポインタ

eventMask: 各々のエンドポイントイベントの列挙は以下の通りです:

Infineon_Team_0-1665473458716.png

CYU3P_USBEP_SS_RESET_EVTのコールバックを生成するには、eventMaskと0x0100に設定します。CYU3P_USBEP_SS_RESET_EVT、およびCYU3P_USBEP_SS_RETRY_EVTの両方のコールバックを生成するには、eventMaskを0x0110に設定します。

outEpMask: イベントを有効にするOUTエンドポイントを表すビットマップ変数。ビット1はEP 1-OUTを、2はEP 2-OUTを表し、以下同様。

inEpMask: イベントを有効にするINエンドポイントを表すビットマップ変数。ビット1はEP 1-INを、2はEP-2-INを表し、以下同様。

注: このコールバックが登録されており、イベントが2つのINエンドポイントに対して処理されるFX3 SDKの以下のパスを参照してください:

[FX3_Installation_Path]\EZ-USB FX3 SDK\1.3\firmware\basic_examples\cyfxgpiftousb

手順2

このイベントは、エンドポイントに特化しています。このイベントがエンドポイントで発生した場合、特定のINエンドポイントをストールさせる必要があります。以下のコードスニペッドを参照してください。

if (evtype == CYU3P_USBEP_SS_RESET_EVT)
    {
        if (epNum == CY_FX_EP_CONSUMER)
        {
            CyU3PDebugPrint (2, "Halting USB Streaming EP: %d\r\n", BulkRstCnt++);
            CyU3PUsbStall (CY_FX_EP_CONSUMER, CyTrue, CyFalse);
        }
        if (epNum == CY_FX_EP_LOOP_IN)
        {
            CyU3PDebugPrint (2, "Halting USB Loopback EP: %d\r\n", LoopRstCnt++);
            CyU3PUsbStall (CY_FX_EP_LOOP_IN, CyTrue, CyFalse);
        }
    }

手順3

INエンドポイントがストールされた場合、このエンドポイントでデータを要求したホストアプリケーションのAPIがフェイルし、エラーコードはエンドポイントストールを示します。

この場合、ホストアプリケーションは、この特定のINエンドポイント(データ要求が失敗した)を目的とするCLEAR_FEATURE要求を送る必要があります。

CLEAR_FEATUREを受信した場合、FX3ファームウェアは、以下のハンドラが必要になります:

if ((bTarget == CY_U3P_USB_TARGET_ENDPT) && (bRequest == CY_U3P_USB_SC_CLEAR_FEATURE)
                && (wValue == CY_U3P_USBX_FS_EP_HALT))
        {
            if (glIsApplnActive)
            {
                if (wIndex == CY_FX_EP_CONSUMER)
                {
                    CyU3PUsbSetEpNak (CY_FX_EP_CONSUMER, CyTrue);
                    CyU3PBusyWait (125);

                    CyU3PDmaChannelReset (&glDmaChHandle);
                    CyU3PUsbFlushEp(CY_FX_EP_CONSUMER);
                    CyU3PUsbResetEp (CY_FX_EP_CONSUMER);
                    CyU3PDmaChannelSetXfer (&glDmaChHandle, CY_FX_GPIFTOUSB_DMA_TX_SIZE);
                    CyU3PUsbStall (wIndex, CyFalse, CyTrue);

                    CyU3PUsbSetEpNak (CY_FX_EP_CONSUMER, CyFalse);
                    isHandled = CyTrue;
                    CyU3PUsbAckSetup ();
                }

 

これらのコードスニペッドの両方は、gpiftousb の例で実装されています。([FX3_Installation_Path]\EZ-USB FX3 SDK\1.3\firmware\basic_examples\cyfxgpiftousb)

注: この記事に加えて、FX3 SDK問題解決ガイドの2.3.IVの章も参照してください。

[FX3_Installation_Path]\EZ-USB FX3 SDK\1.3\doc\firmware\ FX3_SDK_TroubleShooting_Guide.pdf

0 件の賞賛
205 件の閲覧回数