cyfxuvcdscr.cの編集

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

cross mob
user_3987996
Level 3
Level 3
25 replies posted 10 replies posted 5 replies posted

初歩的な質問で申し訳ありません。

解像度が違う場合Descriptor Fileと解像度が異なるのでDescriptor File(cyfxuvcdscr.c)

の編集が必要とのことですが、具体的にどの部分をどの様に修正すればいいのでしょうか?

0 件の賞賛
1 解決策
HirotakaT_91
Moderator
Moderator
Moderator
500 replies posted 250 replies posted 100 replies posted

FX3のAN75779をベースに開発する際、解像度やフォーマットを変更する場合は、Descriptor(cyfxuvcdscr.cに書かれています)を修正する必要があります。

USB 3.0のみで接続する場合は、Super Speed Configuration Descriptor (CyFxUSBSSConfigDscr[])を修正してください。

(USB2.0でも設定が必要であればCyFxUSBHSConfigDscr[]も修正してください。)

解像度の変更はClass specific Uncompressed VS Frame Descriptorで、

- Width in pixel  (SSだとdefault 1280 (0x00, 0x05))

- Height in pixel (SSだとdefault 720 (0xD0, 0x02))

- Frame rate   (SSだとdefault 30 fps (0x15, 0x16, 0x05, 0x00))

GUID等はClass specific Uncompressed VS Format Descriptorで、

- Number of bits per pixel (default 16bit)

- GUID used to identify streaming-encoding format (default YUV422)

を利用したいイメージセンサに合わせてご変更ください。

例として、解像度640x480 YUV422のイメージセンサを利用する場合は、

Width in pixel: 640 (0x80,0x02)

Height in pixel: 480 (0xE0,0x01)

にご変更ください。

UVCについては、USB-IFから USB Video Class v1.1 ​をダウンロードし、併せてご参照ください。

よろしくお願い致します。

Hirotaka Takayama

元の投稿で解決策を見る

0 件の賞賛
7 返答(返信)
HirotakaT_91
Moderator
Moderator
Moderator
500 replies posted 250 replies posted 100 replies posted

FX3のAN75779をベースに開発する際、解像度やフォーマットを変更する場合は、Descriptor(cyfxuvcdscr.cに書かれています)を修正する必要があります。

USB 3.0のみで接続する場合は、Super Speed Configuration Descriptor (CyFxUSBSSConfigDscr[])を修正してください。

(USB2.0でも設定が必要であればCyFxUSBHSConfigDscr[]も修正してください。)

解像度の変更はClass specific Uncompressed VS Frame Descriptorで、

- Width in pixel  (SSだとdefault 1280 (0x00, 0x05))

- Height in pixel (SSだとdefault 720 (0xD0, 0x02))

- Frame rate   (SSだとdefault 30 fps (0x15, 0x16, 0x05, 0x00))

GUID等はClass specific Uncompressed VS Format Descriptorで、

- Number of bits per pixel (default 16bit)

- GUID used to identify streaming-encoding format (default YUV422)

を利用したいイメージセンサに合わせてご変更ください。

例として、解像度640x480 YUV422のイメージセンサを利用する場合は、

Width in pixel: 640 (0x80,0x02)

Height in pixel: 480 (0xE0,0x01)

にご変更ください。

UVCについては、USB-IFから USB Video Class v1.1 ​をダウンロードし、併せてご参照ください。

よろしくお願い致します。

Hirotaka Takayama

0 件の賞賛
lock attach
Attachments are accessible only for community members.

早々の回答ありがとうございます。

新しいスレッドを立てた方がいいのか分からなかったので、このスレッドで質問します。

カメラの解像度に合わせて下記を修正しました。

Width in pixel: 640 (0x80,0x02)

Height in pixel: 480 (0xE0,0x01)

Number of bits per pixel:0x08

に修正しましたが、まだPCで画像を確認ができません。

ソフト実行後、添付波形のようにUSB3.0のTXラインから360msecほど波形が

確認できますが、この波形がデータ後デバイスマネージャが反応しているので

デバイスに関するデータを送っていると思われます。

その後波形が出ないので、データが取り込めていないのか、変換機能が動いて

いないのかが不明です。

J-TAGを使用して上記を確認する方法をお教え下さい。

0 件の賞賛

UARTでデバッグ出来れば楽になると思いますが、CYUSB3KIT-003のご購入は検討されましたか?本評価キットは各種ピンにオシロスコープやロジックアナライザも当てられますし、デバッグしやすくなると思われます。FX3のFirmwareの動作を理解するのにも役立ちます。

お客様にも依りますが、評価キットが安価なことから、評価キットを使用してFirmwareの動作を試されるお客様が多くいらっしゃいます。結果的に素早く製品リリースまで行えることも多々あります。

J-TAGを使用してであれば、以前お伝えしたドキュメント(EzUsbSuite_UG.pdf)の通り、EZ USB SuiteでStep実行していくことになるかと思います。

デバイスマネージャーでFX3が表示されているとのことですが、USB3.0でenumerationされていますか?

ソフト、というのはVirtualDubのようなビデオキャプチャソフトを指していますか? 申し訳ございませんが、どのタイミングで観測された波形なのかがわかりません。

問題の切り分けをするのであれば、例として以下のようなことを試せます。

・イメージセンサとFX3を繋いでいるI2Cのラインやデータライン(GPIFライン)を観測する。(ロジックアナライザやプロトコルアナライザがあればどういう信号がやり取りされているかも見えます。TOTAL PHASEのアナライザやSaleaeのアナライザなどは比較的安価です。)

これによって、データがイメージセンサから送られているかがわかります。

・ホストとFX3が問題なく通信できているか確認するため、Control Center, StreamerなどのCypressが提供しているホストアプリケーションを使い、転送できるかを確かめる。

"SuperSpeed Explorer Kit User Guide" 3.6 Firmware Examplesを御覧ください。

・UARTが使えないならば、任意の場所でGPIOピンの値を変えて、どこまでFirmwareが実行されているかをGPIOの値を観測することで確認する(あくまで例です。)

・他社の使い慣れているマイコンを使用し、低解像度や低フレームレートで一連のシステムが組めるか試し、動作が確認できたら、次の段階としてFX3をご利用になる(イメージセンサの設定は正しく、他の部分に問題があるということがわかります。)

よろしくお願い致します。

Hirotaka Takayama

0 件の賞賛

typedef enum CyU3PErrorCode_t (cyu3error.h内) にてエラーコードは宣言されています。

0x07ならば

    CY_U3P_ERROR_NO_EVENTS,            /**< Failed to set/get the event flags specified. */

となります。

0 件の賞賛

CY_U3P_ERROR_NO_EVENTSが0x07になるという事は

CY_FX_UVC_STREAM_ABORT_EVENT | CY_FX_UVC_STREAM_EVENT | CY_FX_UVC_DMA_RESET_EVENT | CY_FX_USB_SUSPEND_EVENT_HANDLER

のどれか又は全てのイベントが動作していないという事でしょうか?

その場合、考えられる要因は何でしょうか?

0 件の賞賛

APIの仕様を見たい時は、EZ USB SuiteでF3キー(動作は"Open Declaration")を押下いただくか、FX3APIGuide.pdfをご覧ください。

細かい実装を確認する必要があれば、Source codeをご参照ください。(FX3 SDKのページからダウンロードできます。)

さて、APIの仕様に従い、全てのイベントが指定した時間内に来なかったことがわかります。

getOptionは、CYU3P_EVENT_OR: Wait until any of selected flags are signaled.

waitOptionは、LOOP_TIMEOUT (uvc.hにて1000でdefineされています。) /**< Timeout duration in timer ticks. */

まず、waitOption Timeout時間を長くして動作が変わるかどうかをお試しください。

ビデオストリームが開始されるときにはCY_FX_UVC_STREAM_EVENTフラグがセットされます。

(AN75779では、uvc.cのline1643にてセットされます。)

ここから考えるにストリーミングが始まる前の段階で止まっています。

イメージセンサの初期化に問題がある可能性が高いように見えます。

さて、上記の点やドキュメント、ソースコードなどを元に何がどこまで上手く動いているのか/どこから動いていないのか調べていただければと思います。

"cyfxuvcdscr.cの編集"というトピックから大きく外れておりますので、追加でご質問があれば新たにスレッドを立てていただければと思います。

よろしくお願い致します。

Hirotaka Takayama

0 件の賞賛

uvc.cを順にブレークポイントを設け実行してみました。

for分の中の最初の行の

apiRetStatus = CyU3PEventGet (&glFxUVCEvent, CY_FX_UVC_STREAM_ABORT_EVENT | CY_FX_UVC_STREAM_EVENT |

                CY_FX_UVC_DMA_RESET_EVENT | CY_FX_USB_SUSPEND_EVENT_HANDLER, CYU3P_EVENT_OR_CLEAR, &flag, LOOP_TIMEOUT);

を実行して、返値のapiRetStatus が0x07になっているのが判りました。

このため、

返値 0x07が何を示しているのかお教え下さい。

0 件の賞賛