UVCのトラブルシューティングガイド– KBA226722 - Community Translated (JA)

Version 1

    Community Translated by  NoTa_4591161        Version: *A

     

    Translation - English: UVC Troubleshooting Guide – KBA226722

     

    質問:

    FX3でUVCのアプリケーションファームウェアをデバッグするにはどのようにすればよろしいでしょうか?

     

    回答:

    このナレッジベースの記事は、UVCのアプリケーションをデバッグするためのクイックリファレンスと見なすことができます。FX3がペイロードのUVCヘッダーを追加し、リファレンスファームウェアがAN75779準拠していることを想定しております。

     

    1. セクション - ディスクリプタファイル(cyfxuvcdscr.c)の/* Class specific Uncompressed VS format descriptor */

    • ピクセルの深さが正しいことを確認してください。
    • このセクションで説明されているGUIDMicrosoft UVC Driverでサポートされていることを確認します。(RAW形式はUVCドライバーではサポートされていません。GUIDRAW形式に設定されている場合、UVCドライバーはFX3から送信されたデータをドロップし、標準のビデオアプリケーションでビデオを表示できません)。

     

    2. セクションディスクリプタファイル(cyfxuvcdscr.c)の/* Class specific Uncompressed VS frame descriptor */ で、以下が正しいことを確認します。

    • フレームの幅と高さ(ビデオストリームによる)
    • フレームレート
    • 最大ビデオフレームサイズ(バイト)

     

             注:一部のデザインでは、GPIFデータバスに接続されたイメージセンサーのデータバスが8/16/24/32幅ではない場合があります。たとえば、イメージセンサーのデ             ータバスは10ラインを持つことができます(RAW10をサポートするイメージセンサーの場合)。これらの10本のラインがGPIFに接続されており、GPIFのバス幅               が16として構成されている場合、各PCLKについて、16本のラインすべてがサンプリングされます。残りの6本のラインがボードでプルダウンされている場合、FX3             はこれらのラインでサンプリングロジック「ゼロ」になります。プルアップされている場合、ロジック「1」がサンプリングされます。したがって、PCLKごとに2             バイトがサンプリングされ、10ビットはサンプリングされません。従って、ホストアプリケーションは、各ピクセルデータの余分なビットを処理する必要がありま             す。

     

    3. プローブ制御ストラクチャ(glProbeCtrl)で設定されている最大ビデオフレームサイズが、1つのフレームで送信されるバイト数以上であることを確認します。また、プローブ制御御ストラクチャで設定された最大ペイロードサイズが、ペイロードで送信されたサイズ(通常はDMAバッファサイズ)よりも大きいことを確認してください。

     

    4. DMAのバッファサイズは、バイト単位の合計フレームサイズが(DMAのバッファサイズ 16)で割り切れないように選択されていることを確認します。DMAバッファ設定において、12バイトがUVCヘッダー用に予約され、4バイトがフッター用に予約されているため、画像データは(DMAバッファサイズ– 16)バイトで構成します。DMAコールバックでDMAバッファが一杯に満たない理由は、「Frame end marker」がペイロードヘッダーに挿入されているフレームの終わりを示します。

     

    5.正確なラインデータ(つまり、ラインデータの最後に何も追加されない)をホストに送信する場合は、バイト単位のラインサイズがGPIFバス幅(バイト単位)で割り切れるようにしてください。

     

    6.各フレームに必要となる一杯に満たされたDMAバッファの数を計算します。フレームごとの合計バイト数:S =(ピクセル単位の画像の幅) * (ピクセル単位の画像の高さ) * (バイト単位のピクセル深度)フレームあたりの一杯に満たしたDMAバッファの総数:F =S / DMAバッファサイズ– 16)少数を切り捨てた整数)一杯に満たないバッファのバイト数:P = DMA buffer size – 16) * ((S / DMAバッファサイズ – 16))の小数部)注:この一杯に満たないバッファサイズ(P)は、DMAコールバックで一杯に満たないバッファを受信したときのdmaBuffer.countと同じです。        

     

                ファームウェアでは、FPを追跡し(前述のとおり)、値が期待どおりかどうかを確認できます。

     

    計算例AN75779で言及されているファームウェアの高速構成では、FX3は解像度640 * 480およびピクセルあたり2バイトをストリーミングします。この場合:

     

    S = 640 * 480 * 2 = 614400バイト

    F =614400 /16384 – 16))少数を切り捨てた整数= 37  

    P =(DMA buffer size – 16) * ((S / DMAバッファサイズ – 16))の小数部)= 8784バイト

     

    7. DebugPrintsCyU3PDebugPrint()呼び出し)をDMAコールバックに配置しないでください。代わりに、フラグ変数を使用して、それらをfor;;)ループで追跡します。

     

    8. FX3を介してビデオをストリーミングするときにメッセージ「CyU3PDmaMultiChannelCommitBuffercode 71」のデバッグがUARTターミナルに表示される場合は、Invalid Sequence Error in Multi-Channel Commit Bufferマルチチャネルコミットバッファーの無効なシーケンスエラー- KBA218830記載されている変更を実装します。

     

    9. フレーム有効(FV)およびライン有効(LV)ラインをプローブし、パルス幅が期待どおりであることを確認します。

     

              LVHighの期間 = (ラインあたりのピクセル数) * (ピクセルあたりのバイト数) / PCLK_frequency

              FVHighの期間 = LV高持続時間 + ラインブランキング時間) * (ライン数)

     

    10. GPIO16PCLK)のイメージセンサーによって設定されたPCLK周波数が100 MHz未満であることを確認します。

     

    11. GPIFラインが22Ωの直列抵抗で終端されていることを確認します。また、GPIFラインの長さが500 mil以内であることを確認してください。

     

    12. USBトレースを取得して、次のことを確認します。

    • 一杯に満たされたDMAバッファに対応するペイロードのUVCヘッダーフィールドの2番目のバイトは、後続のフレームで0x8C0x8Dを切り替えます。一杯に満たないDMAバッファに対応する最後のペイロードのUVCヘッダーの2番目のバイトは、後続のフレームに対して0x8E0x8Fの間で切り替わります。

    上記の例を考えてみましょう:

    • フレーム「k」の場合、0x8C37ペイロードのUVCヘッダーの2番目のバイトであり、0x8Eはフレーム「k」の最後のペイロードのUVCヘッダーの2番目のバイトです。
    • フレーム「k + 1」の場合、0x8D37ペイロードのUVCヘッダーの2番目のバイトであり、0x8Fはフレーム「k + 1」の最後のペイロードのUVCヘッダーの2番目のバイトです。
    • 一杯に満たされたバッファと一杯に満たさないバッファの合計数が期待どおりにホストに送信されています。