cancel
Showing results for 
Search instead for 
Did you mean: 

USB Superspeed Peripherals

TeMa_2997106
Contributor II

AN75779のデザインを用いてUVCのイメージセンサインタフェースを構築しようとしていますが、

現在、センサからの出力がPC側で表示できておりません。

アプリケーション上(VirtualDubやAmCap)を開くと、デバイスの選択はFX3と表示されますが、

画像としてはまったく表示されず、Blankのままです。

このデザインにおいては、USB3.0でのインタフェース時、フレームレートは30fps固定でしょうか。

いま使用しているセンサの出力が22fps固定なのですが、フレームレートの問題でNGとなっている

のであればFirmを見合う形で変更したいのですが、可能なのでしょうか。

それとも、ISP側でフレームレート変換が必要でしょうか。

0 Likes
1 Solution
HirotakaT_91
Moderator
Moderator

FX3でのインタフェース時、フレームレートはUVCディスクリプタで設定が可能です。

cyfxuvcdscr.c 内でConfiguration Descriptor がCyFxUSBSSConfigDscr (USB3.0の場合)として定義されており、 "Class specific Uncompressed VS frame descriptor" にて、AN75779のデフォルトですと30 fpsで設定されています。

line 849に書かれた

0x15, 0x16, 0x05, 0x00,        /* 30fps */

がDefaultのフレームレートを30fpsにする、という設定です。値はフレームのインターバルが書かれています。

例として、VGAで22fpsを表示する "Class specific Uncompressed VS frame descriptor" を以下に記載します。

/* Class specific Uncompressed VS Frame descriptor for VGA*/

         0x1E,                           /* Descriptor size */

         0x24,                           /* Descriptor type*/

         0x05,                           /* Subtype: uncompressed frame I/F */

         0x01,                           /* Frame Descriptor Index */

         0x01,                           /* Still image capture method 1 supported */

         0x80,0x02,                      /* Width in pixel: 640-VGA */

         0xE0,0x01,                      /* Height in pixel 480-VGA */

         0x00,0x00,0x65,0x04,            /* Min bit rate bits/s. 640x480x15x16 (bitrate = width x height x frame rate x 16bit/pixel) */

         0x00,0x00,0x94,0x11,            /* Max bit rate bits/s. 640x480x60x16 */

         0x00,0x60,0x09,0x00,            /* Maximum video or still frame size in bytes(Deprecated) 640x480x2 bytes */

         0x91,0xEF,0x06,0x00,            /* Default Frame Interval 22 fps*/

         0x01,                           /* Frame interval(Frame Rate) types: Only one frame interval supported */

         0x91,0xEF,0x06,0x00,            /* Minimum Frame Interval 22 fps */

フレームインターバルの早見表を以下に示します:

Frame interval setting reference table

15 fps = 666666 ns (frame interval) = 0x2A,0x2C,0x0A,0x00

22 fps = 454545 ns (frame interval) = 0x91,0xEF,0x06,0x00

30 fps = 333333 ns (frame interval) = 0x15,0x16,0x05,0x00

60 fps = 166666 ns (frame interval) = 0x0A,0x8B,0x02,0x00

120 fps = 83333 ns (frame interval) = 0x85,0x45,0x01,0x00

Class specific VS frame descriptorの設定については、必要に応じて添付のVideo Device Examplesの"2.3.5.1.4 Class-specific VS Frame Descriptor"もご参照いただければと思います。本添付資料はUSB-IFよりダウンロード可能です。

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

Hirotaka Takayama

View solution in original post

0 Likes
4 Replies
HirotakaT_91
Moderator
Moderator

FX3でのインタフェース時、フレームレートはUVCディスクリプタで設定が可能です。

cyfxuvcdscr.c 内でConfiguration Descriptor がCyFxUSBSSConfigDscr (USB3.0の場合)として定義されており、 "Class specific Uncompressed VS frame descriptor" にて、AN75779のデフォルトですと30 fpsで設定されています。

line 849に書かれた

0x15, 0x16, 0x05, 0x00,        /* 30fps */

がDefaultのフレームレートを30fpsにする、という設定です。値はフレームのインターバルが書かれています。

例として、VGAで22fpsを表示する "Class specific Uncompressed VS frame descriptor" を以下に記載します。

/* Class specific Uncompressed VS Frame descriptor for VGA*/

         0x1E,                           /* Descriptor size */

         0x24,                           /* Descriptor type*/

         0x05,                           /* Subtype: uncompressed frame I/F */

         0x01,                           /* Frame Descriptor Index */

         0x01,                           /* Still image capture method 1 supported */

         0x80,0x02,                      /* Width in pixel: 640-VGA */

         0xE0,0x01,                      /* Height in pixel 480-VGA */

         0x00,0x00,0x65,0x04,            /* Min bit rate bits/s. 640x480x15x16 (bitrate = width x height x frame rate x 16bit/pixel) */

         0x00,0x00,0x94,0x11,            /* Max bit rate bits/s. 640x480x60x16 */

         0x00,0x60,0x09,0x00,            /* Maximum video or still frame size in bytes(Deprecated) 640x480x2 bytes */

         0x91,0xEF,0x06,0x00,            /* Default Frame Interval 22 fps*/

         0x01,                           /* Frame interval(Frame Rate) types: Only one frame interval supported */

         0x91,0xEF,0x06,0x00,            /* Minimum Frame Interval 22 fps */

フレームインターバルの早見表を以下に示します:

Frame interval setting reference table

15 fps = 666666 ns (frame interval) = 0x2A,0x2C,0x0A,0x00

22 fps = 454545 ns (frame interval) = 0x91,0xEF,0x06,0x00

30 fps = 333333 ns (frame interval) = 0x15,0x16,0x05,0x00

60 fps = 166666 ns (frame interval) = 0x0A,0x8B,0x02,0x00

120 fps = 83333 ns (frame interval) = 0x85,0x45,0x01,0x00

Class specific VS frame descriptorの設定については、必要に応じて添付のVideo Device Examplesの"2.3.5.1.4 Class-specific VS Frame Descriptor"もご参照いただければと思います。本添付資料はUSB-IFよりダウンロード可能です。

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

Hirotaka Takayama

View solution in original post

0 Likes
TeMa_2997106
Contributor II

迅速なご回答ありがとうございます。

フレームレートの設定ですが、DefaultとShortestと2つあり、例えば上記の60fpsの設定ですと15~60fpsの信号であれば受けられる、とも読み取れますが、実際はDefaultの値の固定値なのでしょうか。

30fpsの設定で22fpsが受けられない(つまり画像が出ないのはここのフレームレートの設定が間違っている)のか否かの確認をしたい次第です。

以上です。

0 Likes
HirotakaT_91
Moderator
Moderator

前述の回答に記述したVS Frame Descriptorの例を、22fpsで表示する用に変更しました。

ISP側も22fpsで、FX3のUVCディスクリプタでも22fpsであれば、フレームレートによる問題は発生しないと考えられます。

また、確認した限り、Minimum Frame Intervalの設定に依存するように見えます。そのため、Minimum Frame Intervalが22fpsならば22fpsで送られます。Minimum Frame IntervalとDefault Frame Intervalを同じ値に合わせてご利用いただくのが良いかと存じます。

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

Hirotaka Takayama

0 Likes
TeMa_2997106
Contributor II

コメントありがとうございます。

了解しました。

0 Likes