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

cross mob

マルチチャネル コミットバッファでの無効なシーケンスエラー – KBA218830 - Community Translated (JA)

マルチチャネル コミットバッファでの無効なシーケンスエラー – KBA218830 - Community Translated (JA)

ChaitanyaV_61
Employee
Employee
50 questions asked 25 likes received 25 sign-ins

Community Translated by: RyKi_1693141          Version: **

質問:

FX3で動画をストリーミングしているときに、"Error in CyU3PDmaMultiChannelCommitBuffer: code 71 "というメッセージがUART端末に表示されます。このエラーの原因と復旧方法を教えてください。

回答:

"Error in CyU3PDmaMultiChannelCommitBuffer: code 71 "というメッセージは、DMAバッファオーバーフローが発生したときに表示されます。code 71のエラーは「CY_U3P_ERROR_INVALID_SEQUENCE」のエラーを指します。このエラーは、UVC ホストアプリケーションが DMA バッファをクリアするために十分な速さで IN トークンを発行しなかった場合に発生することがあります。

code 71のエラーから復旧するためには、以下に従ってください。

I) ファームウェアに割り当てられた DMA バッファ領域を増やしてください。

II) AN75779 に関連付けられたサンプル プロジェクトに以下を実装してください。

 1.   CyU3PDmaMultiChannelCommitBuffer() APICY_U3P_SUCCESSを返すことに失敗したとき、CyFxUvcApplnDmaCallback()関数にフラグ (例えば、commit_buffer_failure) を設定してください。

 2,   UVCAppThread_Entry()関数のfor(;;)ループで、このフラグがセットされているかどうかを確認してください。セットされている場合は、DMA チャネルをリセットするため、以下のプログラムコードを実装し、GPIF II ステートマシンを再起動してください。

if (commit_buffer_failure == 1)

  

{

  

   commit_buffer_failure = 0;

  

   /* Stop the GPIF state machine to stop data transfers through FX3 */

  

   CyU3PGpifDisable (CyFalse);

  

   streamingStarted = CyFalse;

  

   /* Place the Endpoint in NAK mode before cleaning up the pipe. */

  

    apiRetStatus = CyU3PUsbSetEpNak (CY_FX_EP_BULK_VIDEO, CyTrue);

  

    if (apiRetStatus != CY_U3P_SUCCESS)

  

    {

  

CyU3PDebugPrint (4, "\r EP_NAK=%d\n", apiRetStatus);

  

    }

  

    /* Reset the DMA channel and flush the endpoint pipe. */

  

    apiRetStatus = CyU3PDmaMultiChannelReset (&glChHandleUVCStream);

  

    if (apiRetStatus != CY_U3P_SUCCESS)

  

    {

  

CyU3PDebugPrint (4, "\r DMA_RESET=%d\n", apiRetStatus);

  

    }

  

    apiRetStatus = CyU3PUsbFlushEp (CY_FX_EP_BULK_VIDEO);

  

    if(apiRetStatus != CY_U3P_SUCCESS)

  

    {

  

       CyU3PDebugPrint (4, "\r EP_FLUSH=%d\n", apiRetStatus);

  

   }

  

   apiRetStatus = CyU3PDmaMultiChannelSetXfer (&glChHandleUVCStream, 0, 0);

  

   if (apiRetStatus != CY_U3P_SUCCESS)

  

   {

  

       CyU3PDebugPrint (4, "\r DMA_XFER  = %d\n", apiRetStatus);

  

   }

  

   apiRetStatus = CyU3PUsbSetEpNak (CY_FX_EP_BULK_VIDEO, CyFalse);

  

   if(apiRetStatus != CY_U3P_SUCCESS)

  

   {

  

        CyU3PDebugPrint (4, "\r EP_ACK=%d\n", apiRetStatus);

  

   }

  

apiRetStatus = CyU3PGpifSMStart (START_SCK0, ALPHA_START_SCK0);

  

if (apiRetStatus != CY_U3P_SUCCESS)

  

       {

  

        CyU3PDebugPrint (4, "CyU3PGpifSMStart  = %d\n", apiRetStatus);

  

}

  

   apiRetStatus = CyU3PGpifSMSwitch (257, 0, 257, 0, 2);

  

   if (apiRetStatus != CY_U3P_SUCCESS)

  

{

  

CyU3PDebugPrint (4, "CyU3PGpifSMSwitch  = %d\n", apiRetStatus);

  

        }

  

        streamingStarted = CyTrue;

   }

0 件の賞賛
199 件の閲覧回数
寄稿者