- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi
Please let me translate this topic in Japanese languge.
Regards,
Nino
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
タイトル:UVCトラブルシューティングガイド – KBA226722
chaitanyav_41が 2019/04/01 2:55 に作成。ChaitanyaV_61が 2020/03/31 3:30 に変更。
Author: HemanthR_06 Version: *A
質問:
FX3のUVCアプリケーションファームウェアをどのようにしてデバッグできますか?
回答:
この知識ベースの記事はUVCアプリケーションをデバッグするためのクイックリファレンスとして検討することが可能です。FX3はペイロードにUVCヘッダーを追加し、リファレンスファームウェアはAN75779に従っていると想定されます。
1. 記述子ファイル(cyfxuvcdscr.c)のセクション- /* Class specific Uncompressed VS format
descriptor */で:
- ピクセルの深さが正しい事を確認してください
- 本セクションに表記され、マイクロソフトUVCドライバでサポートされているGUIDを確認して下さい。(生フォーマットはUVCドライバではサポートされません。GUIDが生フォーマットに設定されている場合、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はライン上でロジック‘0’としてサンプリングされます。プルアップされている場合は、ロジック‘1’としてサンプリングされます。従ってPCLK毎で2バイトがサンプリングされ、10ビットではありません。ホストアプリケーションは各々のピクセルデータの余剰ビットを処理する必要があります。
3. プローブ制御構成(glProbeCtrl)で設定されている最大ビデオフレームサイズが1フレームで送信さられるバイト数以上であることを確認して下さい。また、プローブ制御構成に設定されている最大ペイロードサイズが、ペイロードに送信されたサイズ(標準のDMAバッファーサイズ)よりも大きい事を確認してください。
4. DMAバッファサイズは、バイトの合計フレームサイズが(DMAバッファサイズ – 16)で割り切れないように選択されている事を確認して下さい。DMAバッファ構成では12バイトがUVCヘッダ、4バイトがフッターに予約されているためイメージデータは(DMAバッファサイズ – 16)バイトで構成されます。DMAコールバックの部分的なDMAバッファの理由は‘フレームエンドメーカー’がペイロードヘッダに挿入されるフレームの終わりを示しています。
5. 余剰なラインデータ(例えばラインデータの終わりに何も追加されない)がホストに送られようとした場合、バイトのラインサイズがGPIFバス幅(バイト)で割り切れない事を確認して下さい。
6. 各々のフレームで要求されるフルDMAバッファの数を計算:
フレーム事のトータルバイト数: S=(ピクセルイメージの幅)x(ピクセルイメージの高さ)x(バイトでのピクセルの深さ)
フレーム事のフルDMAバッファ数: F=(S / (DMAバッファサイズ-16)より小さい最大整数)
部分的バッファのバイト数:P=DMAバッファサイズx(S / (DMAバッファサイズ-16))の小数部
注意: この部分的バッファサイズ(P)は、部分的バッファがDMAコールバックで受診された時のdmaBuffer.countと同じになります。
ファームウェアでは、(前述のように)FとPを覚えておき、期待通りかどうかを確認して下さい。。
計算例:
AN75779で記載されているファームウェアの高速設定では、FX3は解像度640x480およびピクセル毎に2バイトをストリーミングします。この場合、
S = 640*480*2 = 614400 バイト
F =(614400 /(16384 – 16))未満の最大の整数= 37
P = DMAバッファサイズx(S / (DMAバッファサイズ-16))の小数部=8784バイト
7. DMAコールバックにDebugPrints
(CyU3PDebugPrint() calls)を配置しないで下さい。その代わり、フラグ変数を使用し、for(;;)ループでそれらをトラッキングして下さい。
8. FX3を介してビデオをストリーミングしている時に、UART端子上で“Error in CyU3PDmaMultiChannelCommitBuffer:
code 71”デバッグメッセージが表示された場合、Invalid Sequence Error in
Multi-Channel Commit Buffer - KBA218830に記載されている変更を施してください。
9. フレーム有効(FV)およびライン有効(LV)ラインをプローブし、パルス幅が期待通りかどうかを確認して下さい。それは:
LV high 期間 = (ラインごとのピクセル数) x (ピクセル毎のバイト) / PCLK周波数
FV high 期間= (LV high期間 + ラインブレーキング時間) x (ライン数)
10. GPIO16(PCLK)上のイメージセンサーで設定されているPCLK周波数が100MHz以下を確認して下さい。
11. GPIFラインが22Ωシリーズ抵抗で終端されていることを確認して下さい。また、GPIFラインが500ミル以内の長さである事も確認して下さい。
12. USBトレースを使用して次の事を確認して下さい。:
- フルDMAバッファに関連するぺーロードのUVCヘッダフィールドの第2バイトは後続フレームで0x8Cと0x8Dの間でトグルします。部分的なDMAバッファに関連する最終ペイロードのUVCヘッダの第2バイトは後続フレームで0x8Eと0x8Fの間でトグルします
上記の例を考えると:
- フレーム‘k’の場合、08xCは37ぺーロードのUVCヘッダの第2バイトで、0x8Eはフレーム‘k’の最終ぺーロードのUVCヘッダの第2バイトになります。
- フレーム‘k+1’の場合、08xDは37ぺーロードのUVCヘッダの第2バイトで、0x8Fはフレーム‘k+1’の最終ぺーロードのUVCヘッダの第2バイトになります。
- フルバッファと部分バッファの合計数がホストに期待値として送信されます
822 閲覧 カテゴリ: USB: SuperSpeed Peripherals タグ: debug, uvc, fx3, an75779, ss_usb