2 Replies Latest reply on May 21, 2020 1:17 AM by MoTa_728816

    Community Translation - Bug in Cy_USBFS_Dev_Drv_Disable() Function of USBFS v1.0 Driver - KBA225989

    MoTa_728816

      Hi,

       

      I'd like to translate KBA225989 into Japanese.

       

      moto

       

      Original KBA: KBA225989

      Bug in Cy_USBFS_Dev_Drv_Disable() Function of USBFS v1.0 Driver - KBA225989

        • 1. Re: Community Translation - Bug in Cy_USBFS_Dev_Drv_Disable() Function of USBFS v1.0 Driver - KBA225989
          AikoO_51

          Hi Moto-san,

           

          I confirmed the KBA.

          Please work to do.

           

          Thanks,

          Aiko

          • 2. Re: Community Translation - Bug in Cy_USBFS_Dev_Drv_Disable() Function of USBFS v1.0 Driver - KBA225989
            MoTa_728816

            Original KBA: KBA225989

            Bug in Cy_USBFS_Dev_Drv_Disable() Function of USBFS v1.0 Driver - KBA225989

             

            Translated by: MoTa_728816

            ==============================

            タイトル: USBFS v1.0 ドライバ Cy_USBFS_Dev_Drv_Disable() 関数のバグ - KBA22598

             

            ヴァージョン:**

             

            質問:USBFS ドライバを endpoint management mode が CPU Manual の設定で Cy_USBFS_Dev_Drv_Disable() をコールするとフォールトが発生するのはなぜですか?

             

            回答:

            Cy_USBFS_Dev_Drv_Disable() は endpoint management mode を確認せずに内部の関数で DMA チャンネルをディセーブルします。CPU Manual モードでは DMA チャネルはアロケートされていないため、DMA の関数が正しくない引数でコールされ、それがフォールトの原因になっています。

            この問題を回避するためには、下記のように disable 関数を実装してください:

             

            void Cy_USBFS_Dev_Drv_Disable_CpuMode(USBFS_Type *base, cy_stc_usbfs_dev_drv_context_t *context)

            {

                /* 使用しない変数に関するウォーニングを止める */

                (void) context;

             

             

                /* D+ のプルアップをディセーブルする */

                USBFS_DEV_LPM_POWER_CTL(base) &= ~USBFS_USBLPM_POWER_CTL_DP_UP_EN_Msk;

                (void) USBFS_DEV_LPM_POWER_CTL(base);

             

             

                /* デバイスの USB トラフィックに対する応答をディセーブルする */

                USBFS_DEV_CR0(base) &= ~USBFS_USBDEV_CR0_USB_ENABLE_Msk;

            }

             

             

            USBFS ドライバのこの問題は Cy_USB_Dev_Disconnct() 関数が Cy_USBFS_Dev_Drv_Disable() 関数をコールしているため USB Device ミドルウェアにも影響を与えます。

            この問題を回避するためには、下記のように disconnect 関数を実装してください:

             

            void Cy_USB_Dev_Disconnect_CpuMode(cy_stc_usb_dev_context_t *context)

            {

                /* D+ のプルアップをディセーブルする */

            USBFS_DEV_LPM_POWER_CTL(context->drvBase) &= ~USBFS_USBLPM_POWER_CTL_DP_UP_EN_Msk;

                (void) USBFS_DEV_LPM_POWER_CTL(context->drvBase);

             

             

                /* デバイスの USB トラフィックに対する応答をディセーブルする */

                USBFS_DEV_CR0(context->drvBase) &= ~USBFS_USBDEV_CR0_USB_ENABLE_Msk;

             

             

                /* デバイスを初期状態に設定する */

                context->state   = CY_USB_DEV_DISABLED;

                context->address = 0U;

                context->configuration  = 0U;

            }

             

            この Cy_USBFS_Dev_Drv_Disable() 関数のバグは次のペリフェラルドライバライブラリ (PDL) のリリースで修正される予定です。

            ==============================

            21-May-2020

            moto