AN75779 How to Implement an Image Sensor Interface Using EZ-USB® FX3™ in a USB Video Class (UVC) Framework (Japanese).pdf

AN75779
USB ビデオ クラス(UVC)フレームワーク内で EZ-USB® FX3™を使用してイメージ センサ
ー インターフェースを実装する方法
作成者:Karnik Shah
関連プロジェクト:あり
ソフトウェア バージョン:FX3 SDK1.2.3
関連アプリケーション ノート:AN75705
USB 3.0 が提供した高帯域幅は、周辺装置を USB に接続する IC に高度な要求をします。本アプリケーション ノートでは、非圧縮
データを PC にストリーミングするカメラ(EZ-USB® FX3™と通信するイメージ センサー)というよく利用されている USB 3.0 の用
途を中心に説明します。本アプリケーション ノートは、インターフェースの柔軟性を犠牲にせずにデータ処理能力を最大限にするよ
う設計された FX3 特長を強調します。本アプリケーション ノートでは、USB ビデオ クラス(UVC)の実装情報についても詳しく説明
します。このクラスに準拠したカメラ デバイスは、PC 内蔵ドライバおよび AMCap や VLC Media Player などのホスト アプリケー
ションを使用して動作することができます。最後に、本アプリケーション ノートは、3 次元画像化および動き追跡アプリケーションを
実装するために、FX3 内でフレキシブルなイメージ センサー インターフェースを使用して 2 個のイメージ センサーを接続する方法
を提示します。
5.7 DMA バッファをビデオのストリーム中に処理 ........... 33
目次
1. はじめに ........................................................................ 2
2. USB ビデオ クラス(UVC) .............................................. 3
2.1 エニュメレーション データ .......................................... 3
2.2 動作コード ............................................................... 3
2.3 USB ビデオ クラスの要件......................................... 4
3. GPIF II イメージ センサー インターフェース .................... 10
3.1 イメージ センサー インターフェース ......................... 10
3.2 イメージ センサー インターフェースのピン マッピング11
3.3 ピンポン DMA バッファ ........................................... 11
3.4 設計方法 ............................................................... 13
3.5 GPIF II ステート マシン........................................... 14
5.8 フレーム送信の終了時のクリーンアップ .................. 33
5.9 ビデオのストリームを終了 ...................................... 33
5.10 「デバッグ」インターフェースを追加 ........................ 34
6. ハードウェアのセットアップ ............................................ 37
6.1 ハードウェアの調達 ................................................ 37
6.2 FX3 DVK 基板のセットアップ.................................. 38
7. UVC ベースのホスト アプリケーション ............................ 39
7.1 デモの実行 ............................................................ 39
8. トラブルシューティング................................................... 40
9. 2 個のイメージ センサー同士を接続 .............................. 40
9.1 UVC を介してインターリーブ画像を転送 ................. 41
9.2 ファームウェア変更のチェックリスト ......................... 42
3.6 GPIF II Designer を使用したイメージ センサー インタ
ーフェースの実装 ......................................................... 16
10. 要約 ........................................................................... 43
4. DMA システムのセットアップ.......................................... 26
11. 著者について ............................................................. 43
4.1 DMA バッファの概要 .............................................. 29
12. 変更履歴 .................................................................... 44
5. FX3 ファームウェア ....................................................... 30
ワールドワイドな販売と設計サポート ................................. 45
5.1 アプリケーション スレッド......................................... 32
製品 ................................................................................. 45
5.2 初期化................................................................... 32
PSoC®ソリューション ........................................................ 45
5.3 エニュメレーション .................................................. 32
5.4 I2C インターフェースを介してイメージ センサーを設定
................................................................................... 32
5.5 ビデオ ストリームを開始 ......................................... 32
5.6 DMA バッファのセットアップ .................................... 33
japan.cypress.com
文書番号 001-92696 Rev. **
1
®
USB ビデオ クラス(UVC)フレームワーク内で EZ-USB FX3™ を使用してイメージ センサー インターフェースを実装する方法
図 1 には、カメラ アプリケーションを示します。左側は、スー
パースピード USB 3.0 ポートを備えた PC です。右側は、以下
の特長を持っているイメージ センサーです。
1. はじめに
USB 3.0 が提供した高帯域幅は、周辺装置を USB に接続
する IC に高度な要求をします。典型的な例としては、非圧縮
データを PC にストリーミングするカメラを挙げられます。本ア
プリケーション ノートでは、片側がイメージ センサーに接続し、
反対側が USB 3.0 ホスト PC に接続したコンバータは、サイプ
レス EZ-USB® FX3™チップを使用して実装されます。FX3 は、
その第二世代の汎用プログラマブル インターフェース(GPIF
II)を使用してイメージ センサーとのインターフェースを提供し、
そのスーパースピード USB ユニットを使用して PC に接続しま
す。FX3 ファームウェアは、イメージ センサーからのデータを、
USB ビデオ クラス(UVC)に準拠した形式に変換します。この
クラスに準拠したカメラは、OS 内蔵ドライバを使用して動作す
ることができ、AMCap や VLC Media Player などのホスト ア
プリケーションと互換性があります。







Image Sensor
Host
PC
Converter
(FX3)
16 ビット/ピクセル(16bpp)
YUY2 色空間
1280x720 の解像度(720p)
30 フレーム/秒(30fps)
アクティブ ハイのフレーム/ライン有効信号
クロック エッジの正極性
本アプリケーション ノートでは特定のイメージ センサー イン
ターフェースについて説明しますが、これら特長は、データ
バス幅や信号極性などのわずかな違いがあるだけで、多くの
イメージ センサー インターフェースに共通しています。GPIF II
ブロックはプログラム可能であるため、これらの相違を容易に
調整することができます。また、FX3 はその I2C インターフェー
スを使用して、イメージ センサーのコンフィギュレーション用の
制御バスを実装します。
図 1. カメラ アプリケーション
USB
3.0
8 ビット同期パラレル データ インターフェース
Clock
Sync
Data[7:0]
Control (I2C)
図 2 は、詳細なシステム ブロック図です。ブロック図の主なサ
ブブロックは番号付けられており、それぞれが実行するタスク
は以下で説明されます。
図 2. システム ブロック図
USB Host
FX3
Video
Host
Application
(AMCap)
UVC
Driver
6
USB
Host
Controller
USB
Bulk
IN EP
Video
Data
2.
Data
3
GPIF
II
2
Line Valid
Data bus
USB3
5
Video
Control
GPIO
Firmware
USB
EP0
ホストが、UVC に準拠したデバイスとして周辺装置を認識
するために適切な USB ディスクリプタを提供します。詳細
については、節 2 を参照してください。
パラレルバス インターフェースをイメージ センサーに実装
します。これは、FX3 GPIF II インターフェースを介して行
われます。サイプレス GPIF II Designer というツールによ
り、カスタム波形をグラフィカルなステート マシン エディタ
japan.cypress.com
Image Sensor
Frame Valid
DMA
Channel
Data
1
1.
PCLK
UVC Class
Descriptor
3.
Reset#
4
I2C
Master
I2C control
で設計することができます。インターフェースがプログラム
可能であるため、少し変更して、それを異なるイメージ セ
ンサー(例えば、16 ビット データ バスを持つイメージ セン
サー)用にカスタマイズすることができます。詳細について
は、節 3 を参照してください。
イメージ センサー データを GPIF II ブロックから USB イ
ンターフェース ブロック(UIB)に転送する DMA チャネル
文書番号 001-92696 Rev. **
2
®
USB ビデオ クラス(UVC)フレームワーク内で EZ-USB FX3™ を使用してイメージ センサー インターフェースを実装する方法
4.
5.
6.
を構築します。このアプリケーションでは、ヘッダ データは、
UVC 仕様に準拠するためにイメージ センサーのビデオ
データに追加する必要があります。このために、DMA は、
CPU が必要なヘッダを DMA バッファに追加することがで
きるように設定されます。このチャネルは、ビデオをイメー
ジ センサーから PC にストリーミングするために最大帯域
幅を使用できるように設計する必要があります。詳細につ
いては、節 4 を参照してください。
FX3 I2C マ ス タ ー を 使 用 し て 、 制 御 バ ス を イ メ ー ジ
センサーに実装します。I2C と GPIO ユニットは、標準の
サイプレス ライブラリの呼び出しによりプログラムされ、節
5.4 で述べられています。
FX3ファームウェアは、FX3ハードウェア ブロックを初期化
し(節5.2)、UVCカメラとしてエニュメレートし(節2.3.1)、
UVC固有の要求を処理し(節2.3.2)、ビデオ制御設定(輝
度など)をI2Cインターフェースを介してイメージ センサー
に転送し(節5.4)、UVCヘッダをビデオ データ ストリーム
に追加し(節2.3.4)、ヘッダを含むビデオ データをUSBに
転送し(節5.7)、GPIF IIステート マシンを維持します(節
5.8)。
AMCapやVLC Media Playerなどのホスト アプリケーショ
ンは、UVCドライバにアクセスして、UVC制御インター
フェースを介してイメージ センサーを設定し、UVCスト
リーミング インターフェースを介してビデオ データを受信
します。UVCベースのホスト アプリケーションについては、
節7を参照してください。
カメラが USB 2.0 ポートに差し込まれたら、FX3 ファームウェ
アは、低い USB 帯域幅に適合するために、I2C 制御バスを使
用してフレーム レートを 30FPS から 15FPS に、フレーム サ
イズを 1280x720 ピクセルから 640x480 ピクセルに下げます。
PC ホストは、制御インターフェースを任意に使用して、輝度、
パン、チルト、ズームの調整をカメラに送信することができます。
パン、チルト、ズームは常に一緒に実装されており、PTZ と呼
ばれています。
2. USB ビデオ クラス(UVC)
UVCに準拠するには、2個のFX3コード モジュールが必要で
す。
1. エニュメレーション データ
2. 動作コード
2.1 エニュメレーション データ
本アプリケーション ノートに添付されたコードは、UVC エニュメ
レーション データを格納する cyfxuvcdscr.c ファイル(節
2.3.1 で説明される)を含んでいます。UVC ディスクリプタの形
式を定義する USB 仕様は、usb.org を参照してください。本節
では、ディスクリプタについて概説します。UVC デバイスには、
4 つの論理素子があります。
2. 出力端子(OT)
3. プロセッシング ユニット(PU)
4. エクステンション ユニット(EU)
これら素子は、ディスクリプタ内で図 3 のように接続しています。
要素間の接続は、ディスクリプタの端子番号を関連付けること
で行われます。例えば、入力(カメラ)端子ディスクリプタはその
ID を 1 と宣言し、プロセッシング ユニット ディスクリプタはその
入力接続の ID が 1 と指定します。従って、プロセッシング ユ
ニット ディスクリプタは論理的には入力端子に接続しています。
出力端子ディスクリプタは、どの USB エンドポイントを使用す
るかを示します。この場合は BULK-IN エンドポイント 3 です。
図 3. カメラのアーキテクチャの UVC 図
Custom
Requirements
IT
1
1
2
PU
2
EU
3
3
OT
4
EP3-IN
ディスクリプタは、ビデオ特性(幅、高さ、フレーム レート、
フレーム サイズ、ビット深度など)および制御特性(輝度、露光、
増幅率、コントラスト、PTZなど)も含んでいます。
2.2 動作コード
ホストがカメラをエニュメレートした後、UVC ドライバは一連の
要求をカメラに送信して動作の特性を判断します。これは、機
能要求段階と呼ばれています。この段階は、ホスト アプリケー
ションがビデオのストリームを開始するストリーム段階に先行
し ま す 。 FX3 フ ァ ー ム ウ ェ ア は 、 USB 制 御 エ ン ド ポ イ ン ト
(EP0)を介して送信された要求に応答します。
例えば、UVC デバイスはその USB ディスクリプタのいずれか
で輝度制御に対応していることを示します。機能要求段階中に、
UVC ドライバはデバイスに問い合わせて、関連する輝度パラ
メータを得ます。
ホスト アプリケーションが輝度値を変更するよう要求すると、
UVC ドライバは SET 制御要求(SET_CUR)を発行して輝度
を変更します。
同様に、ホスト アプリケーションが、サポートされたビデオ
フォーマット/フレーム レート/フレーム サイズをストリーミン
グすることにすると、UVC ドライバはストリーム要求を発行しま
す。要求は、PROBE および COMMIT という 2 種類あります。
PROBE 要求は、UVC デバイスがストリーム モードへの変更
を受け入れる準備ができたかを判断するために使用されます。
ストリーム モードは、イメージ フォーマット、フレーム サイズ、
およびフレーム レートの組み合わせです。
1. カメラ入力端子(IT)
japan.cypress.com
文書番号 001-92696 Rev. **
3
®
USB ビデオ クラス(UVC)フレームワーク内で EZ-USB FX3™ を使用してイメージ センサー インターフェースを実装する方法
2.3 USB ビデオ クラスの要件
本アプリケーション ノート同梱のファームウェア プロジェクトは、
USBVideoClass フォルダに配置されています。本節では、サ
ンプル プロジェクトがどのように UVC 要件を満たすかについ
て説明します。デバイスは、以下の UVC 要件を満たす必要が
あります。


UVC 固有の USB ディスクリプタによりエニュメレートする

UVC 準拠の色フォーマットでビデオ データをストリーミン
グする

各イメージ ペイロード毎に UVC 準拠のヘッダを追加する
USB ディスクリプタで報告された UVC 制御とストリーム
機能の SET/GET UVC 固有の要求を処理する
これら要件の詳細は、UVC 仕様に記載されています。
2.3.1 UVC の USB ディスクリプタ
cyfxuvcdscr.c ファイルは、USB ディスクリプタ表を含んでい
ます。バイト アレイ「CyFxUSBHSConfigDscr」(ハイスピード)
および「 CyFxUSBSSConfigDscr」(スーパースピード)は、
UVC 固有のディスクリプタを含んでいます。これらディスクリプ
タは、以下のツリー構造のサブディスクリプタを含んでいます。

コンフィギュレーション ディスクリプタ


インターフェース アソシエーション ディスクリプタ
ビデオ制御(VC)インターフェース ディスクリプタ
 VC インターフェース ディスクリプタ
o 入力(カメラ)端子ディスクリプタ
o プロセッシング ユニット ディスクリプタ
o エクステンション ユニット ディスクリプタ
o 出力端子ディスクリプタ
 VC ステータス割り込みエンドポイント
ディスクリプタ

ビデオ ストリーム(VS)インターフェース ディスクリ
プタ
 VS インターフェース入力ヘッダ ディスクリプタ
 VS フォーマット ディスクリプタ
o VS フレーム ディスクリプタ

BULK-IN ビデオ エンドポイント ディスクリプタ
コンフィギュレーション ディスクリプタは、そのサブディスクリプ
タで USB デバイスの機能を定義する標準 USB ディスクリプタ
です。インターフェース アソシエーション ディスクリプタは、デ
バイスが標準 USB クラスに準拠していることをホストに示しま
す。ここで、このディスクリプタは、ビデオ制御(VC)インター
フェースとビデオ ストリーム(VS)インターフェースを備えた
japan.cypress.com
UVC 準拠のデバイスを報告します。2 つの個別のインターフェ
ースを備えた UVC デバイスは、USB 複合デバイスとなります。
2.3.1.1 ビデオ制御インターフェース
VC インターフェース ディスクリプタおよびそのサブディスクリプ
タは、制御インターフェースに関連する全ての機能を報告しま
す。例としては、輝度、コントラスト、色相、露光、PTZ 制御など
があります。
VC インターフェース ヘッダ ディスクリプタは、この VC イン
ターフェースが属している VS インターフェースを指す UVC 固
有のインターフェースディスクリプタです。
入力(カメラ)端子ディスクリプタ、プロセッシング ユニット ディ
スクリプタ、エクステンション ユニット ディスクリプタ、出力端子
ディスクリプタは、それぞれの端子またはユニットがサポートし
ている機能を記述するビット フィールドを含んでいます。
カメラ端子は、ビデオ ストリームを送信するデバイスの露光や
PTZ などの機械的な機能(または相当するデジタル機能)を制
御します。
プロセッシング ユニットは、それを介してストリーミングされるビ
デオの輝度、コントラスト、色相などのイメージ特性を制御しま
す。
エクステンション ユニットは、標準の USB ベンダー要求のよう
に、ベンダー固有の機能を追加することを可能にします。この
設計では、エクステンション ユニットは空ですが、ディスクリプ
タはカスタム機能用のプレースホルダとして含まれています。
エクステンション ユニットを利用する場合、標準ホスト アプリ
ケーションは、変更されない限り、その機能を認識できません。
出力端子は、それらユニット(IT、PU、EU)とホスト間のイン
ターフェースを記述します。VC ステータス割り込みエンドポイ
ント ディスクリプタは、割り込みエンドポイント用の標準 USB
ディスクリプタです。このエンドポイントは、UVC 固有のステー
タス情報を通信するために使用することができます。このエン
ドポイントの機能は、本アプリケーション ノートの範囲外です。
UVC 仕様では、これら機能は、クラス固有の制御要求の実行
を容易に構成できるように分けられています。但し、これらの
実装はアプリケーションによって異なります。サポートされた制
御機能は、それぞれの端子/ユニット ディスクリプタの
「bmControls」ビット フィールド(cyfxuvcdscr.c)で、対応する
機能のビットを「1」にセットすることで報告されます。UVC デバ
イス ドライバは、エニュメレーション時に制御の情報をポーリン
グします。情報のポーリングは、EP0 要求により実行されます。
そのような全ての要求(ビデオ ストリーム要求を含む)は、
uvc.c ファイル内の UVCAppEP0Thread_Entry 関数により
処理されます。
2.3.1.2 ビデオ ストリーム インターフェース
ビデオ ストリーミング インターフェース ディスクリプタおよびそ
のサブディスクリプタは、様々なフレーム フォーマット(例えば、
非圧縮、MPEG、H.264 など)、フレーム解像度(幅、高さ、
ビット深度)、およびフレーム レートを報告します。報告された
文書番号 001-92696 Rev. **
4
®
USB ビデオ クラス(UVC)フレームワーク内で EZ-USB FX3™ を使用してイメージ センサー インターフェースを実装する方法
表 3. プローブ/コミット構造の値
値に基づいて、ホスト アプリケーションは、サポートされた
フレーム フォーマット、フレーム解像度、およびフレーム レート
の組み合わせを選択してストリーム モードを切り替えます。
プローブ/
コミット構造
のバイト
オフセット
VS インターフェース入力ヘッダ ディスクリプタは、それに続く
VS フォーマット ディスクリプタの数を示します。
特性
スーパースピ
ードの値
ハイスピー
ドの値
VS フォーマット ディスクリプタは、イメージのアスペクト比およ
び非圧縮や圧縮などの色フォーマットを含んでいます。
2
フォーマット
インデックス
1
1
VS フレーム ディスクリプタは、イメージ解像度およびそれのサ
ポートされた全てのフレーム レートを含んでいます。カメラが
異なる解像度をサポートする場合、複数の VS フレーム ディス
クリプタが VS フォーマット ディスクリプタに続きます。
3
フレーム
インデックス
1
1
4~7
100ns 単位での
フレーム間隔
0x51615
(30FPS)
0xA2C2A
(15FPS)
BULK-IN ビデオ エンドポイント ディスクリプタは、ビデオをスト
リーミングするのに使用するバルク エンドポイントの情報を含
んでいる標準 USB エンドポイント ディスクリプタです。
18~21
バイト単位での
最大イメージ サ
イズ
1280x720x2
(2 バイト/
ピクセル)
640x480x2
(2 バイト/
ピクセル)
この例では、単一の解像度とフレーム レートを使用します。そ
のイメージ特性は、以下の 3 つの表に示されるように 3 つの
ディスクリプタに含まれます(関連のあるバイト オフセットだけ
が示されます)。
この設計は、上記の表の項目を変更することで、1080p など
異なるイメージ解像度に対応できるように適用することができ
ます。
2.3.2 UVC 固有の要求
表 1. VS フォーマット ディスクリプタの値
VS
フォーマット
ディスクリプ
タのバイト
オフセット
特性
幅対高さ比
23~24
スーパースピ
ードの値
ハイスピー
ドの値
16:9
4:3
表 2. VS フレーム ディスクリプタの値
VS
フレーム デ
ィスクリプタ
のバイト オ
フセット
特性
スーパースピ
ードの値
ハイスピー
ドの値
5~8
解像度(W、H)
1280x720
640x480
17~20
バイト単位での
最大イメージ サ
イズ
1280x720x2
(2 バイト/
ピクセル)
640x480x2
(2 バイト/
ピクセル)
100ns 単位での
フレーム間隔
0x51615
(30FPS)
0xA2C2A
(15FPS)
21~24
および
26~29





最小値
最大値
最小値と最大値間の値の数
デフォルト値
現行値
SET および GET は、UVC 固有の要求の 2 種類です。SET
は特性の現行値を変更するのに使用され、GET は特性を読
み出すのに使用されます。
UVC 固有の要求のリストは以下の通りです。
複数のバイトの値が LSB ファースト(リトルエンディアン)でリス
トされていることに注意してください。従って、例えば、
0x00051615 のフレーム レートは 33.33 ミリ秒、即ち 30FPS
に相当します。
japan.cypress.com
UVC 仕様によると、USB 制御エンドポイント EP0 は、制御と
ストリーム要求を UVC デバイスに通信するために使用されま
す。これら要求は、ビデオ関連の制御特性を調べ、変更するの
に使用されます。UVC 仕様によると、これらビデオ関連の制
御は機能として定義されています。これら機能により、イメージ
特性を変更する、またはビデオをストリーミングすることができ
ます。機能(最初の特性)は、ビデオ制御特性(輝度、コントラ
スト、色相など)またはビデオ ストリーム モードの特性(色
フォーマット、フレーム サイズ、フレーム レートなど)です。機能
は、USB コンフィギュレーション ディスクリプタの UVC 特有の
セクションを介して報告されます。各機能は特性を持っていま
す。機能の特性は以下の通りです。




SET_CUR は、SET 要求の唯一の種類
GET_CUR は、現行値を読み出す
GET_MIN は、サポートされた最小値を読み出す
GET_MAX は、サポートされた最大値を読み出す
文書番号 001-92696 Rev. **
5
®
USB ビデオ クラス(UVC)フレームワーク内で EZ-USB FX3™ を使用してイメージ センサー インターフェースを実装する方法

GET_RES は、解像度(最小値と最大値間のサポートさ
れた値を示すステップ値)を読み出す



GET_DEF は、デフォルト値を読み出す
図 4. UVC エニュメレーションおよび検出フロー
HOST Enumerates UVC
Device, reads camera
properties from CONFIG
descriptor.
GET_LEN は、バイト単位で特性のサイズを読み出す
GET_INFO は、状態/特定の機能のサポートを問い合
わせる
HOST prepares a list of
N supported Video
Control properties.
UVC 仕様によると、これらは特定の機能の必須または任意の
要求として定義されています。例えば、SET_CUR が特定機
能の任意の要求と定義された場合、その存在は GET_INFO
要求により判断されます。カメラは機能の特定の要求をサポー
トしていない場合、これを示すために、要求がホストからカメラ
に発行される時、制御エンドポイントをストールします。
HOST retrieves details for
all N properties:
GET_MIN, GET_MAX,
GET_RES, GET_DEF,
GET_CUR, GET_INFO,
GET_LEN
これら要求には、対象となる機能を検証するバイト フィールド
があります。これらバイト フィールドは、節 2.3.1 で説明された
UVC 固有のディスクリプタと同じ構造に従う階層を持っていま
す。第 1 レベルは、インターフェースを識別します(ビデオ制御
かビデオ ストリーム)。
第 1 レベルがインターフェースをビデオ制御と識別した場合、
第 2 レベルは端子かユニットを識別し、第 3 レベルはその端
子かユニットの機能を識別します。例えば、対象となる機能が
輝度制御である場合:



第 1 レベル=ビデオ制御
第 2 レベル=プロセッシング ユニット
End of Discovery
UVC デバイスが USB に差し込まれると、ホストはそれを
エニュメレートし、カメラがサポートする特性の詳細情報を調べ
ます(図 4)。
映像操作中に、カメラマンは、ホスト アプリケーションによって
表示されたダイアログで、輝度などカメラの特性を変更するこ
とができます。図 5 には、この相互作用を示します。
第 3 レベル=輝度制御
第 1 レベルがインターフェースをビデオ ストリームと識別した
場合、第 2 レベルは PROBE か COMMIT となります。第 3 レ
ベルはありません。ホストは、UVC デバイスにストリームを開
始させる、またはストリーム モードを変更させるためには、ま
ずデバイスが新しいストリーム モードをサポートするかを判断
します。このために、ホストは、第 2 レベルを PROBE にセット
して、一連の SET と GET 要求を送信します。デバイスは、ス
トリーム モードへの変更を受け入れるか、または拒否します。
デバイスが変更要求を受け入れた場合、ホストはこれを確認
するために、第 2 レベルを COMMIT にセットして、SET_CUR
要求を送信します。ホストとデバイス間の相互作用は、図 6 に
示されます。以下の 3 つのフローチャートは、ホストがどのよう
に UVC デバイスと相互作用するかを示します。
japan.cypress.com
文書番号 001-92696 Rev. **
6
®
USB ビデオ クラス(UVC)フレームワーク内で EZ-USB FX3™ を使用してイメージ センサー インターフェースを実装する方法
図 5. ホスト アプリケーションがカメラ設定を変更する
図 6. ホスト カメラのストリーム前のダイアログ
App changes a Video Control
property from X to Y
HOST starts Discovery of
supported modes (PROBE:
GET_MIN, GET_MAX,
GET_DEF, GET_CUR)
HOST sends GET_CUR
request for the property
HOST sends PROBE:
SET_CUR request in a
probe/commit structure
containing desired values
for VS Format index, VS
Frame index, and Frame
Interval.
Device sends value X
HOST sends SET_CUR
request for the property with
value Y
UVC device checks the VS
Format index, VS Frame
index, and Frame interval
properties to verify if
possible, updates the
probe/commit structure if
feasible
Device updates property to Y
HOST sends GET_CUR
request for the property
Device sends value Y
HOST sends the
PROBE:GET_CUR request
to read the updated values
from UVC device
HOST verifies change was
successful
Device sends back the
updated probe/commit
structure
ストリームを開始する前に、ホスト アプリケーションは、一連の
プローブ要求を発行してあり得るストリーム モードを調べます。
デフォルトのストリーム モードが決められた後、UVC ドライバ
は COMMIT 要求を発行します。このプロセスは、図 6 に示し
ます。この時点では、UVC ドライバはビデオを UVC デバイス
からストリームする準備ができました。
HOST compares values
received for GET_CUR with
the values it tried to change
in SET_CUR
FAIL
PASS
HOST changes the
operation mode by sending
COMMIT: SET_CUR with
the updated probe/commit
structure
2.3.2.1 制御要求 – 輝度および PTZ 制御
輝度および PTZ 制御は、対応するプロジェクトで実行されます。
PTZ は、uvc.h ファイルで「UVC_PTZ_SUPPORT」を定義す
ることで有効にします。これら機能は、イメージ センサーがサ
ポートしない場合もあります。この場合、特定のハードウェアを
それら機能を実装するように設計する必要があります。いずれ
の場合でも、これら機能の制御の USB 側のファームウェア実
装は同じです。但し、イメージ センサー実装は異なります。こ
japan.cypress.com
文書番号 001-92696 Rev. **
7
®
USB ビデオ クラス(UVC)フレームワーク内で EZ-USB FX3™ を使用してイメージ センサー インターフェースを実装する方法
のため、USB 側の制御を実装するためにプレースホルダ関数
のみが提供されます。イメージ センサー固有の PTZ 実装用
にコードを書く必要があります。
注:特記されていない限り、本アプリケーション ノートの後半で
説明する全ての関数は uvc.c ファイルで実装します。このファ
イルは、本アプリケーション ノート同梱の zip 形式のソース
コード内の USBVideoClass フォルダ下に格納されているプ
ロジェクトの一部です。
ホスト ア プリ ケーシ ョンは、 輝度制御用にプロセッシ ング
ユニットにビデオ制御要求を(EP0 を介して)送信します。全て
のセットアップ要求は、CyFxUVCApplnUSBSetupCB 関数
により処理されます。この関数により、ホストが UVC 固有の要
求(制御かストリーム)を送信したかを検出して、イベント フラ
グをセットします。
そ れ ぞ れ に 対 し て は 、 「 CY_FX_UVC_VIDEO_CONTROL
_REQUEST_EVENT 」 か 「 CY_FX_UVC_VIDEO_STREAM
_REQUEST_EVENT 」 で す 。 す る と 、 フ ラ グ は
UVCAppEP0Thread_Entry 関数(EP0 アプリケーション ス
レッド)により処理されます。
輝度制御要求は、ビデオ制御要求イベント フラグをトリガしま
す。これらフラグのいずれかがトリガされるのを待っている
EP0 アプリケーション スレッドは、ビデオ制御要求をデコードし
て適切な関数を呼び出します。EP0 アプリケーション スレッド
は、UVCHandleProcessingUnitRqts 関数を呼び出して輝
度制御要求を処理します。
プロセッシング ユニット関連の制御(輝度、コントラスト、色相
など)を実装するために、UVCHandleProcessingUnitRqts
関数を修正します。カメラ端子制御を実装するために、
UVCHandleCameraTerminalRqts 関数を修正します。任意
の ベ ン ダ ー 固 有 の 要 求 を 実 装 す る た め に 、
UVCHandleExtensionUnitRqts 関数を修正します。これら
制御のいずれかをサポートするために、USB ディスクリプタで
対応するビットをセットする必要があります。UVC 仕様には、
カメラ端子、プロセッシング ユニット、およびエクステンション
ユニット USB ディスクリプタの詳細情報が含まれています。
2.3.2.2 ストリーム要求 – プローブおよびコミット制御
UVCHandleVideoStreamingRqts は、ストリーム関連の要
求を処理します。UVC ドライバが UVC デバイスからビデオを
ストリームする必要がある場合、第 1 ステップはネゴシエーシ
ョンです。この段階では、ドライバは GET_MIN、GET_MAX、
GET_RES、GET_DEF などの PROBE 要求を送信します。こ
れに応じて、FX3 ファームウェアは PROBE 構造を返します。
この構造は、ビデオ フォーマット、ビデオ フレーム、フレーム
レート、最大フレーム サイズ、ペイロード サイズ(UVC ドライバ
が 1 回の転送で取り出せるバイト数)の USB ディスクリプタ イ
ンデックスを含んでいます。
「CY_FX_UVC_PROBE_CTRL」の switch 文の case は、
USB 2.0 または USB 3.0 接続の場合にストリームのネゴシ
エーション段階を担当します(サポートされたビデオの特性は
japan.cypress.com
モードによって異なります)。USB 2.0 でも USB 3.0 でも同じス
トリーム モードがサポートされるため、GET_MIN、GET_MAX、
GET_DEF、GET_CUR の報告された値は同じであることに注
意してください。複数のストリーム モードをサポートする必要が
ある場合、これら値は異なります。
「CY_FX_UVC_COMMIT_CTRL」の switch 文の case は、
ストリ ーム 段 階の開始を 担 当しま す。 COMMIT 制御用の
SET_CUR 要求は、ホストが次にビデオのストリームを開始す
ることを示します。従って、COMMIT 制御用の SET_CUR は、
主なアプリケーション スレッド UVCAppThread_Entry が
GPIF II ステート マシンにビデオ ストリームを開始させるよう指
示する「CY_FX_UVC_STREAM_EVENT」イベントをセットま
す。
2.3.3 ビデオ データ フォーマット:YUY2
UVC 仕様によると、ビデオ データ用に色フォーマットの 1 サブ
セットだけがサポートされています。このため、UVC 仕様に準
拠した色フォーマットでイメージをストリーミングするイメージ セ
ンサーを選択するべきです。本アプリケーション ノートでは、ほ
とんど(全てではない)のイメージ センサーによってサポートさ
れた、YUY2 という非圧縮色フォーマットについて説明します。
YUY2 色フォーマットは YUV 色フォーマットをダウンサンプル
した 4:2:2 バージョンです。輝度値 Y はピクセル毎にサンプリ
ングされますが、色度 U と V は偶数ピクセル毎にのみサンプ
リングされます。これは「マクロ ピクセル」を形成します。各マク
ロ ピクセルは、合計 4 バイトを使う 2 イメージ ピクセルを表し
ます。他の全てのバイトは Y 値であり、U と V 値は偶数ピクセ
ルをのみ表します。
Y0、U0、Y1、V0
(最初の 2 ピクセル)
Y2、U2、Y3、V2
(次の 2 ピクセル)
Y4、U4、Y5、V4
(次の 2 ピクセル)
色フォーマットの詳細情報については、ウィキペディアを参照し
てください。
注: RGB フォーマットはサポートされません。UVC 仕様による
と、モノクロのイメージがサポートされませんが、モノクロの
イメージ データを Y 値として送信し、全ての U と V 値を 0x80
にセットすることで、8 ビットモノクロのイメージを YUY2 フォー
マットで表示することができます。
2.3.4 UVC ビデオ データ ヘッダ
UVC クラスは、非圧縮ビデオ ペイロード用に 12 バイト ヘッダ
を必要とします。ヘッダは、転送されるイメージ データの特性
を記述します。例えば、イメージ センサー コントローラ(FX3)
がフレーム毎にトグルする「new frame」ビットを含んでいます。
FX3 コードは、ヘッダ内でエラー ビットをセットして、現行フレー
ムのストリームに問題が発生したことを示すこともできます。こ
の UVC データ ヘッダは、全ての USB 転送に必要です。詳細
情報については、UVC 仕様を参照してください。
表 4 には、UVC ビデオ データ ヘッダのフォーマットを示します。
文書番号 001-92696 Rev. **
8
®
USB ビデオ クラス(UVC)フレームワーク内で EZ-USB FX3™ を使用してイメージ センサー インターフェースを実装する方法
表 4. UVC ビデオ データ ヘッダ フォーマット
ビット
オフセッ
ト
フィール
ド名
説明
バイト
オフセ
ット
フィー
ルド名
説明
0
HLF
ヘッダ長フィールドは、ヘッダの長さをバイト単
位で示す
1
EOF
1
BFH
ビット フィールド ヘッダは、イメージ データのタ
イプ、ビデオ ストリームの状態、および他のフ
ィールドの有無を示す
フレームの終了ビットは、ビデオの終了を
示し、イメージ フレームに属している最後
の USB 転送でのみセット
2
PTS
プレゼンテーション タイム スタンプは、ソース
クロック時間をネイティブなデバイス クロック単
位で示す
プレゼンテーション タイム スタンプビット
は、UVC ビデオ データ ヘッダ内の PTS
フィールドの有無を示す(1=存在している)
3
SCR
ソース クロック リファレンス ビットは、UVC
ビデオ データ ヘッダ内の SCR フィールド
の有無を示す(1=存在している)
4
RES
予約済み、0 にセット
5
STI
スティル イメージ ビットは、ビデオ サンプ
ルがスティル イメージに属しているかを示
す
6
ERR
エラー ビットは、デバイス ストリームの
エラーを示す
7
EOH
ヘッダの終了ビットは、セットされた時に
BFH フィールドの終了を示す
2~5
6~11
PTS
SCR
フレームの間変更なし
ソース クロック リファレンスは、システム時間
クロックおよび USB フレームの開始(SOF)ト
ークン カウンタ
HLF の値は常に 12 です。PTS と SCR フィールドは任意です。
ファームウェア例では、これらフィールドは 0 にセットされてい
ます。ビット フィールド ヘッダ(BFH)は、フレームが終了すると
値が変化します。表 5 には、UVC ビデオ データ ヘッダの一部
である BFH のフォーマットを示します。
表 5. ビット フィールド ヘッダ(BFH)のフォーマット
ビット
オフセッ
ト
フィール
ド名
0
FID
japan.cypress.com
説明
フレーム識別子ビットは、各イメージ フレ
ーム開始境界でトグルし、残りのイメージ
図 7 には、このアプリケーションでヘッダがどのようにビデオ
データに追加されるかを示します。12 バイト ヘッダは、各
USB バルク 転送に追加されます。ここでは、各 USB 転送は
合計 16 バルク パケットを持っています。USB 3.0 バルク
パケット サイズは 1024 バイトです。
文書番号 001-92696 Rev. **
9
®
USB ビデオ クラス(UVC)フレームワーク内で EZ-USB FX3™ を使用してイメージ センサー インターフェースを実装する方法
図 7. UVC ビデオ データ転送
1 USB 3.0 Bulk transfer of the image with burst of 16
1024-byte packet
Packet 1/16
Packet 2/16
Packet 16/16
1st USB transfer
Video Data
Video Data
- - -
Video Data
2nd USB transfer
Video Data
Video Data
- - -
Video Data
- - -
Nth USB transfer
Video Data
12-byte Header
with EOF set
Video Data
Last Partial Packet
3. GPIF II イメージ センサー インター
フェース
FX3のGPIF IIブロックは、フレキシブルなステート マシンであ
り、FX3ピンをイメージ センサーなどの外部ハードウェアと通
信するように駆動するためにカスタマイズすることができます。
ステート マシンを設計するには、インターフェースの要件およ
びFX3のDMA機能を理解する必要があります。
3.1 イメージ センサー インターフェース
標準的なイメージ センサー インターフェースは図 2 に示され
ます。通常、イメージ センサーは FX3 コントローラからの
リセット信号を必要とします。これは、FX3 汎用入出力(GPIO)
を使用して実施されます。
一般的には、イメージ センサーは I2C 接続を使用して、コント
ローラがイメージ センサー パラメータを読み出す/書き込む
ことを可能にします。イメージ センサーは同じ目的には、シリア
ル ペリフェラル インターフェース(SPI)または汎用非同期
レシーバ/トランスミッタ(UART)接続を使用することもできま
す。 FX3 の I2C、SPI、および UART ブロックはこの機能を提
供しています。このアプリケーションでは、イメージ センサーを
設定するために I2C を使用します。
イメージを転送するために、イメージ センサーは以下の信号を
提供します。
japan.cypress.com
1 Video Frame
12-byte Header
1.
FV: フレーム有効(フレームの開始と停止を示します)
2.
LV: ライン有効(ラインの開始と停止を示します)
3.
PCLK: ピクセル クロック(同期インターフェース用のクロッ
ク)
4.
DATA: イメージ データ用の 8 本のデータ ライン
図 8 には、FV、LV、PCLK、および DATA 信号のタイミング図
を示します。イメージ センサーは、FV 信号をアサートして
フレームの開始を示します。すると、イメージ データはライン毎
に転送されます。イメージ センサーが 2 ピクセル毎に 4 バイト
から成る 8 ビット ピクセル データを YUY2 フォーマットで転送
する時、LV 信号は各ライン転送中にアサートされます。バイト
データは、PCLK の各立ち上がりエッジで GPIF II ユニットにシ
リアル入力されます。
FX3 GPIF II バスは、8 ビット、16 ビット、または 32 ビット デー
タ バスに設定することができます。このアプリケーションでは、
イメージ センサーの 8 ビット バスを使用します。イメージ セン
サーが 12 ビット バスなどの非バイト整列バスを提供した場合、
8 バイトより 1 サイズ大きい値を使用し、未使用ビットをパッド
するか破棄します。
3.1.1 GPIF II インターフェースの要件
タイミング図(図 8)に基づいて、GPIF II ステート マシンは以
下の要件があります。

GPIF II ブロックは、LV と FV 信号がアサートされた時に
のみデータをデータ ピンから転送する必要があります。
文書番号 001-92696 Rev. **
10
®
USB ビデオ クラス(UVC)フレームワーク内で EZ-USB FX3™ を使用してイメージ センサー インターフェースを実装する方法

イメージ センサーはフロー制御を備えていません。このた
め、インターフェースは完全なビデオ ラインを継続的に転
送する必要があります。この設計では、ラインあたりに
1280 ピクセルがあり、各ピクセルが 2 バイトに対応する
ため、ライン毎に 2560 バイトが転送されます。

CPU は、各フレームの終了時にそれに応じてヘッダ ビッ
トを更新するために通知する必要があります。
図 8.イメージ センサー インターフェースのタイミング図
Active Frame
Vertical Blanking
FV
Line 1
Line 2
Line R-1
Line R
LV
Zoomed in
Active Line
Horizontal Blanking
LV
PCLK
DATA
D0 D1 D2
Dc
3.2 イメージ センサー インターフェースのピン マッ
ピング
GPIF II からイメージ センサー ピンへのマッピングは表 6 に示
されます。
表 7. イメージ サン用の追加のピン マッピング
EZ-USB FX3 のピン
イメージ センサー インターフェース
(追加のピン)
GPIO[8:15]
DQ[8:15]
GPIO[46]
GPIO/UART_RTS
GPIO[47]
GPIO/UART_CTS
8 ビット データ バスを使った同期パラレル イ
メージ センサー インターフェース
GPIO[48]
GPIO/UART_TX
GPIO[49]
GPIO/UART_RX
GPIO[28]
LV
GPIO[53]
GPIO/SPI_SCK /UART_RTS
GPIO[29]
FV
GPIO[54]
GPIO/SPI_SSN/UART_CTS
GPIO[0:7]
DQ[0:7]
GPIO[55]
GPIO/SPI_MISO/UART_TX
GPIO[16]
PCLK
GPIO[56]
GPIO/SPI_MOSI/UART_RX
表 6. パラレル イメージ センサー インターフェースの
ピン マッピング
EZ-USB FX3 のピン
2
I C SCL
2
I C SDA
I C_GPIO[58]
I C_GPIO[59]
2
2
UART または SPI をインターフェースとして使用する、16 ビッ
ト データ バスを使ったイメージ センサーには、表 7 に示される
ピン マッピングを使用します。
注 EZ-USB FX3 の完全なピン マッピングは、データシート「
EZ-USB FX3 SuperSpeed USB Controller」を参照してくださ
い。
3.3 ピンポン DMA バッファ
FX3 の入力と出力データ転送を理解するには、以下の用語を
理解するのが重要です。
a. ソケット
b. DMA ディスクリプタ
c. DMA バッファ
d. GPIF スレッド
japan.cypress.com
文書番号 001-92696 Rev. **
11
®
USB ビデオ クラス(UVC)フレームワーク内で EZ-USB FX3™ を使用してイメージ センサー インターフェースを実装する方法
ソケットとは、ペリフェラル ハードウェア ブロックと FX3 RAM
の接続点です。USB、GPIF、UART、SPI など FX3 上のペリ
フェラル ハードウェア ブロックには、それぞれに対応する一定
数のソケットがあります。各ペリフェラルを介した独立のデータ
フロー数は、それに対応するソケット数に等しいです。ソケット
の実装は、アクティブな DMA ディスクリプタを指すレジスタ
セット、およびソケットに対応するイネーブルまたはフラグ割り
込みを含んでいます。
DMA ディスクリプタとは、FX3 RAM に割り当てられたレジスタ
セットです。DMA バッファのアドレスとサイズの情報および次
の DMA ディスクリプタへのポインタを格納しています。これら
のポインタは DMA ディスクリプタ チェーンを作ります。
DMA バッファとは、RAM の一部であり、FX3 デバイスを介し
て転送されるデータの中間記憶領域として使用されます。
DMA バッファは、FX3 ファームウェアによって RAM から割り
当てられ、それらのアドレスが DMA ディスクリプタに格納され
ています。
GPIF スレッドとは、GPIF II ブロック内の専用データ経路であ
り、外部データ ピンをソケットに接続します。
ソケットは、イベントにより互いに直接通知するか、または、割
り込みにより FX3 CPU に通知します。この信号方式はファー
ムウェアにより設定されます。GPIF II ブロックから USB ブロッ
クまでのデータ ストリームの例に取ってみます。GPIF ソケット
は、データで DMA バッファが一杯になったことを USB ソケット
に通知でき、USB ソケットは、DMA バッファが空になったこと
を GPIF ソケットに通知できます。この実装は、自動 DMA チャ
ネルと呼ばれています。自動 DMA チャネルの実装は通常、
FX3 CPU がデータ ストリームでデータを修正する必要ない場
合に使用されています。
あるいは、GPIF ソケットは、FX3 CPU に割り込みを送信して、
DMA バッファが一杯になったことを通知することもできます。
FX3 CPU はこの情報を USB ソケットに中継します。USB ソケ
ットは、FX3 CPU に割り込みを送信して、USB ソケットが
DMA バッファを空にしたことを通知することができます。そして、
FX3 CPU はこの情報を GPIF ソケットに中継します。この実
装は、手動 DMA チャネルと呼ばれています。手動 DMA チャ
ネルの実装は通常、FX3 CPU がデータ ストリームでデータを
追加したり、除去したり、修正する必要がある場合に使用され
ています。本アプリケーション ノートのファームウェア例では、
ファームウェアが UVC ビデオ データ ヘッダを追加する必要が
あるため、手動 DMA チャネルの実装を使用します。
japan.cypress.com
DMA バッファにデータを書き込むソケットは、プロデューサ ソ
ケット(producer socket)と呼ばれています。DMA バッファか
らデータを読み出すソケットは、コンシューマ ソケット
(consumer socket)と呼ばれています。ソケットは、データ管
理のために、DMA ディスクリプタに格納された DMA バッファ
アドレス、DMA バッファ サイズ、および DMA ディスクリプタ
チェーンを使用します(節 4)。ソケットは、DMA バッファが一杯
か空になった後、ある DMA ディスクリプタから他の DMA ディ
スクリプタに切り替わるのに限られた時間(数マイクロ秒まで)
かかります。切り替え中、ソケットはデータを転送することはで
きません。この待ち時間は、フロー制御を備えていないイン
ターフェースにとって問題となります。一例としては、イメージ
センサー インターフェースを挙げられます。
この問題は GPIF II ブロック内で、複数の GPIF スレッドを使
用して対処できます。GPIF II ブロックは 4 個の GPIF スレッド
を実装しています。一度に 1 個の GPIF だけがデータを転送
できます。GPIF II ステート マシンは、データ転送のために、い
ずれかのアクティブな GPIF スレッドを選択する必要がありま
す。
GPIF スレッド選択のメカニズムはマルチプレクサに似ていま
す。GPIF II ステート マシンは、内部制御信号または外部入力
を使用して、アクティブな GPIF スレッドを選択します。この例
では、GPIF スレッド間の切り替えは内部制御信号によりい制
御されます。アクティブな GPIF スレッドを切り替えると、データ
転送用のアクティブなソケットが切り替わります。結果として、
データ転送用の DMA バッファが変更されます。GPIF スレッド
の切り替えに待ち時間はありません。GPIF II ステート マシン
は、この切り替えを DMA バッファの境界で実行し、GPIF
ソケットが新しい DMA ディスクリプタに切り替わるためのレイ
テンシをマスクすることができます。これにより、DMA バッファ
が一杯になる時、GPIF II ブロックはセンサーからデータを損
失せずに取り込むことができます。
図 9 には、本アプリケーションで使用するソケット、DMA ディス
クリプタ、DMA バッファ接続およびデータ フローを示します。2
個の GPIF スレッドは、代替 DMA バッファを充填するために
使用されます。これら GPIF スレッドは、個別の GPIF ソケット
(プロデューサ ソケットとして動作する)および DMA ディスクリ
プタ チェーン(ディスクリプタ チェーン 1 とディスクリプタ チェー
ン 2)を使用します。USB ソケット(コンシューマ ソケットとして
動作する)は、正しい順序でデータを読み出すために別の
DMA ディスクリプタ チェーン(ディスクリプタ チェーン 3)を使
用します。
文書番号 001-92696 Rev. **
12
®
USB ビデオ クラス(UVC)フレームワーク内で EZ-USB FX3™ を使用してイメージ センサー インターフェースを実装する方法
図 9. FX3 データ転送のアーキテクチャ
GPIF II state machine
controlled switching
GPIF Thread 1
Descriptor 0
Buffer 0
Descriptor 2
Buffer 2
Descriptor 1
Descriptor 4
Buffer 4
Descriptor 2
Descriptor 6
Buffer 6
Descriptor 3
Descriptor 4
Descriptor 1
Buffer 1
Descriptor 5
Descriptor 3
Buffer 3
Descriptor 6
Descriptor 5
Buffer 5
Descriptor 7
Buffer 7
Descriptor 7
図 11. ビデオ ライン終了時のデータ転送の選択
3.4 設計方法
詳細な GPIF II ステート マシンを構築する前に、基本的な転
送方法を検討する必要があります。
図 10. ビデオ ライン内のデータ転送
GPIF Thread 0
Active
Increment CT0
Load CT1
Descriptor 0
Descriptor Chain 2
GPIF Socket 1
Producer
Image
Sensor
GPIF Socket 0
Producer
GPIF Thread 0
USB
Interface
Block
(UIB)
Descriptor Chain 3
USB Endpoint 0x83
BULK-IN
DMA
Descriptor Chain 1
Consumer
USB Socket 3
GPIF II Block
Still in Line,
DMA Buffer 0 full.
Still in Line,
DMA Buffer 1 full.
GPIF Thread 1
Active
Increment CT1
Load CT0
図 10 には、アクティブな水平ライン中に DMA バッファが一杯
になる時の基本的な DMA バッファ ピンポン動作を示します。
GPIF II ステート マシンは、3 個の個別のカウンタがあります。
この例では、GPIF II ユニットは 2 個のカウンタ(CT0 と CT1)
を使用して DMA バッファに書き込まれるバイト数をカウントし
ます。カウントが DMA バッファ限界値に達すると、「DMA バッ
ファが一杯」分岐ができて、GPIF II は GPIF スレッドを切り替
えます。バイトが GPIF スレッド内で転送されるため、次の
GPIF スレッドが切り替えられた後にカウンタがバイトをカウン
トする準備ができるために、他の GPIF スレッド用のカウンタは
初期化されます。
イメージ センサーが LV をデアサートする時、ビデオ ラインの
終了に達しました。この時点では、図 11 のように、ステート
マシンは幾つかのオプションがあります(ここで、LV はライン
有効信号、FV はフレーム有効信号です)。選択は、DMA バッ
ファが一杯になったかどうか、およびフレームが完了したかど
うかに依存します。
1
GPIF Thread 0
Active
Increment CT0
Load CT1
GPIF Thread 1
Active
Increment CT1
Load CT0
Still in Line,
DMA Buffer 0 full.
Still in Line,
DMA Buffer 1 full.
End of a Line
2
DMA Buffer 0 YES
full?
NO
4
LV
3
Wait for LV
or !FV
!FV
LV Wait for LV5
or !FV
!FV
6
Partial last
DMA Buffer 0
7
Full last DMA
Buffer 0
注:「End of a Line」で始まるミラー イメージ決定ツリーも
ステート 4 から発します。これは、明確化のために図から省略
されています。
ラインの終了(LV=0)で、ステート マシンはステート 1 から
ステート 2 に遷移します。ステート 2 では、それはは DMA バッ
ファ バイト カウンタをチェックして DMA バッファが一杯になっ
たかを確認します。そうであったら、ステート マシンはステート
3 に遷移します。ステート 3 では、FV がロー レベルである場
合、完全なフレームを転送し、状態 7 に入りました。ステート 7
では、CPU は、DMA バッファが一杯になったことを示す割り込
み要求により通知されます。この情報を使用して、CPU は
GPIF II を次のフレーム用にセットアップすることができます。
ステート 3 で FV=1 の場合、イメージ センサーはまだフレーム
を転送しており、すぐに LV=1 に再アサートして次のビデオ ラ
インを示します。LV=1 になると、ステート マシンはステート 3
からステート 4 に遷移して、ステート 1 からステート 4 への遷
japan.cypress.com
文書番号 001-92696 Rev. **
13
®
USB ビデオ クラス(UVC)フレームワーク内で EZ-USB FX3™ を使用してイメージ センサー インターフェースを実装する方法
移と同じ GPIF スレッド切り替えを行います。従って、1-4 パス
と 1-2-3-4 パス両方では、GPIF スレッドが切り替えられます。
これらパス間の違いは、2 番目のパスが、ラインの終了の休止
があるため、追加のサイクルを取ることです。
DMA バッファに対応するために転送カウンタも初期化します。
ステート マシンはカウント値をテストし、カウンタ限界値に達す
ると GPIF スレッド(DMA バッファ)を切り替えます。DMA バッ
ファが一杯になると、カウンタ限界値に達します。
DMA バッファが一杯にならない場合、ステート マシンはステー
ト 2 からステート 5 に遷移します。ステート 5 では、ステート 3
と同じように、イメージ センサーはフレームの終了または LV
の再アサート(次のビデオ ラインの開始)を待ちます。LV=1 の
場合、ステート 1 で DMA バッファ 0 を充填し続けます。FV=0
の場合、イメージ センサーはビデオ フレームの送信を完了し、
DMA バッファ 0 は部分的に一杯になります。ステート 6 では、
ステート マシンは、別の割り込みを CPU に送信して、CPU が
短い DMA バッファの構成を USB を介して送信することを可
能にします。
ステート マシンは、GPIF II アドレス カウンタ ADDR とデータ
カウンタ DATA という 2 個の GPIF II 内部カウンタを使用して
DMA バッファのバイト数をカウントします。GPIF II ステート マ
シンは、GPIF スレッドを切り替えるたびに、次の GPIF スレッ
ド用に適切なカウンタを初期化します。カウンタ限界値をロード
するのに 1 クロック サイクルかかるため、ロードされた値は
ターミナル カウントより 1 小さいです。
3.5 GPIF II ステート マシン
FX3 GPIF II は、最大 256 ステートを持つプログラム可能なス
テートマシンです。各ステートは、以下を含む動作を実行でき
ます。



複数の制御ラインを駆動する
データおよび/またはアドレスを送受信する
割り込みを内部 CPU に送信する
ステートの遷移は、DMA Ready やイメージ センサーのフレー
ム/ライン有効信号などの内部または外部信号に依存します。
GPIF II ステート マシン設計を始めるには、イメージ センサー
波形でステート マシンの開始点を選びます。FV のポジティブ
エッジへの遷移により示されるフレームの開始は、論理的な開
始点です。GPIF II はこのエッジを検出するために、まず FV=0
(最初のステート)、それから FV=1(2 番目のステート)を待ち
ます。2 番目のステートは、ビデオ データで一杯になった
japan.cypress.com
転送カウンタは、クロック サイクル毎に 1 インクリメントします。
従って、インターフェースのデータ バス幅に応じて、カウンタ限
界値が変更されます。この例では、節 5.6 で説明されたように、
データ バス幅が 8 ビット、DMA バッファ サイズが 16,368 バイ
トであるため、プログラムされた限界値は 16,367 となります。
一般的には、DMA バッファ カウント限界値は:
 producer _ buffer _ size( L) 
count  
  1
data _ bus _ width


従った、16 ビット インターフェースでは、DMA バッファ サイズ
が 8184 の 16 ビット ワードであるため、プログラムされた限界
値は 8183 となります。32 ビット インターフェースでは、DMA
バッファ サイズが 4092 の 32 ビット ワードであるため、プログ
ラムされた限界値は 4091 となります。
詳細な GPIF II ステート マシンは、図 12 に示されます。2 個
の DMA バッファ バイト カウンタは、GPIF II DATA と ADDR
カウンタです。図 11 のように、これらカウンタは CT0 と CT1
に対応します。
文書番号 001-92696 Rev. **
14
®
USB ビデオ クラス(UVC)フレームワーク内で EZ-USB FX3™ を使用してイメージ センサー インターフェースを実装する方法
図 12.GPIF II ステート マシンの図
State 0
State 1
Start
Wait for
Frame Done
State 2
Wait for
Frame valid,
Load DATA
!FV
FV & LV
State 5
State 3
!LV & !DATA Limit
Wait for LV
with thread 0
active
LV
Transfer
thread 0 data
DATA++
ADDR=0
State 4
!LV& !ADDR Limit
Transfer
Wait for LV
thread 1 data,
with thread 1
ADDR++
LV
active
DATA=0
LV & DATA Limit
LV & ADDR Limit
!LV & DATA Limit
!LV &ADDR Limit
LV
LV
Wait for LV
State 7 with thread 0
full
!FV
Wait for LV
with thread 1
full
!FV
State 9
Frame end
partial buffer
in thread 0
Intr CPU
2.
State 8
!FV
State 11
State 12
Frame end
full buffer in
thread 0
Intr CPU
フレームの終了時に DMA バッファが一杯にならない場合、
最後の DMA バッファを USB 転送用にコミットします(ス
テート 9 と 10)。フレームの終了時に DMA バッファが一
杯になった場合、GPIF II はそれを USB 転送用に自動的
にコミットします(ステート 11 と 12)。
!FV
State 10
Frame end
full buffer in
thread 1
Intr CPU
各フレームの終了時に、CPU は 4 つのあり得る割り込み要求
の 1 つを受信して、DMA バッファ番号と一杯の状態(ステート
9-12)を示します。これら要求を使用すると、コールバック関数
を実装して、CPU が、以下を含む幾つかのタスクを処理するこ
とを可能にすることもできます。
1.
State 6
Frame end
partial buffer
in thread 1
Intr CPU
テート マシンをステート 0 にリセットして、それが次の
フレームの開始の準備をします。
3.
特殊なアプリケーション固有のタスクを処理して、次の
フレームに進むことを示します。UVC は、12 バイト ヘッダ
内のビットをトグルすることでフレームの変更イベントを示
すことを必要とします。
図 13 には、水平ラインの小さい部分でイメージ センサー波形
を GPIF II と関係付けます。節 4 の図 45 のように、「Step」ラ
インが DMA システムとやり取りをします。
コンシューマ ソケット(USB)が最後の DMA バッファ デー
タを送信するあいだ待機してから、チャネルと GPIF II ス
japan.cypress.com
文書番号 001-92696 Rev. **
15
®
USB ビデオ クラス(UVC)フレームワーク内で EZ-USB FX3™ を使用してイメージ センサー インターフェースを実装する方法
図 13.イメージ センサー インターフェース、データ パス実行、およびステート マシンの相互関係
Active Frame
Vertical Blanking
FV
LV
Step
State
1
0 1
2
2
3
3
5
3
4
6
4
4
8
3
5
5
3
4
6
6
4
8
1
12
0 1
2
CPU
Intervention
Reset FIFO
Reset GPIF II
3.6 GPIF II Designer を使用したイメージ セン
サー インターフェースの実装
図 14.GPIF II Designer を起動する
本節では、GPIF II Designer を使用したイメージ センサー イ
ンターフェースの設計を説明します。参考のために、完全なプ
ロ ジ ェ ク ト は 同 梱 ソ ー ス の zip フ ァ イ ル 内 の 「 GPIF II
Designer/ImageSensorInterface.cydsn」ディレクトリにあり
ます。
設計手順には、3 ステップがあります。
1.
GPIF II Designer を使用してプロジェクトを作成する
2.
インターフェースの定義を選択する
3.
キャンバスでステート マシンを描く
3.6.1 プロジェクトを作成する
GPIF II Designer を起動します。GUI は図 14 のように表示さ
れます。以下の図のように、段階を追った指示に従います。各
図には、サブステップがあります。いずれかのステップの詳細
な情報については、GPIF II Designer ユーザー ガイドを参照
してください。
japan.cypress.com
文書番号 001-92696 Rev. **
16
®
USB ビデオ クラス(UVC)フレームワーク内で EZ-USB FX3™ を使用してイメージ センサー インターフェースを実装する方法
図 15. ファイル メニューを開き、「New Project」を選択する
3.
「FX3 peripherals used」では、I2C を選択します。これは、
FX3 I2C マスターをアクティブにします。
4.
「Interface type」では、「Slave」を選択します。イメージ セ
ンサーがクロックを提供し、データ バスを駆動するため、
GPIF II はスレーブ デバイスとして動作します。
5.
「Communication type」、「Synchronous」を選択します。
これは、イメージ センサーからの同期クロックの存在を反
映します。
6.
「Clock settings」では、「External」を選択します。イメージ
センサーはその PCLK 信号を GPIF II に送信します。
7.
「Active clock edge」では、「Positive」を選択します。イメ
ージ センサーはそのポジティブ エッジでデータ遷移をトリ
ガします。
8.
「Endianness」では、「Little endian」を選択します。エンデ
ィアンは、幅が 1 バイトより広いデータ バスでのバイト
オーダーを示します。ここの 8 ビット インターフェースでは、
これは問題になりません。
9.
「Address/data bus usage」では、「8 bit」を選択します。
イメージ センサーは 8 ビット データ バスを提供します。
図 16.プロジェクト名と保存先を入力する
プロジェクトの作成が完了すると、GPIF II Designer では「
Interface Definition」と「State Machine」タブへアクセスするこ
とができます。「Interface Definition」タブで、FX3 は左側にあ
り、イメージ センサー(「Application Processor」ラベル付き)
は右側にあります。次のステップは、これら間のインターフェー
スをセットアップすることです。
3.6.2 インターフェースを定義する
このプロジェクトでは、FX3 デバイスに接続したイメージ セン
サーは 8 ビット データ バスを持っています。これは、LV 信号
用に GPIO 28、FV 信号用に GPIO 29、センサー リセット用に
ロー アクティブ入力になる GPIO 22 を使用します(表 6)。こ
のイメージ センサーは、FX3 への I2C 接続も使用して、例え
ばセンサーを 720p モードに設定するためにイメージ センサー
レジスタにアクセスします。「Interface Settings」列は、必要な
選択肢を提供します。
また、示された入力信号は遷移方程式を作成するために次の
段階で使用可能になります。図 17 には、選択するインター
フェースの設定を示します。
1.
「Signals」では、LV と FV 用に 2 つの入力を選択します。
2.
「Signals」では、nSensor_Reset 用に 1 つの出力を選択
します。
japan.cypress.com
文書番号 001-92696 Rev. **
17
®
USB ビデオ クラス(UVC)フレームワーク内で EZ-USB FX3™ を使用してイメージ センサー インターフェースを実装する方法
図 18. 現時点のブロック図
図 17. インターフェース設定の選択
アプリケーション プロセッサのエリアで INPUT0 ラベルをダブ
ルクリックして、図 19 のようにその入力信号のプロパティを開
きます。
図 19. INPUT0 のデフォルト プロパティ
ここで、「I/O Matrix configuration」は図 18 のようになります。
次のステップは、入力と出力信号のプロパティを変更します。
プロパティは、信号名、ピン マッピング(即ち、どの GPIO が入
力か出力として動作するか)、信号の極性、出力信号の初期
値を含んでいます。
japan.cypress.com
信号名を「LV」に変更し、「GPIO to use:」を GPIO_28 に変更
します(表 6)。極性を「Active High」のままにします。この時点
では、プロパティは図 20 のようになります。「OK」をクリックし
ます。
文書番号 001-92696 Rev. **
18
®
USB ビデオ クラス(UVC)フレームワーク内で EZ-USB FX3™ を使用してイメージ センサー インターフェースを実装する方法
図 20. 編集された INPUT0 プロパティ
図 22. 編集された OUTPUT0 プロパティ
次に、INPUT1 ラベルをダブルクリックして、信号名を「FV」に
変更し、GPIO の割り当てを「GPIO_29」に変更し、極性を
「Active High」のままにします(図 21)。
図 21. 編集された INPUT1 プロパティ
ここで、インターフェースの設定を完了しました。信号名などの
プロパティを設定すると、GPIF II Designer の他の全ての部分
は変更を反映するために更新されます。例えば、ブロック図に
は、一般的な入力と出力名の代わりに、信号名があります。ま
た、ステート マシン デザイナーを使用する際、LV と FV 信号
などの使用可能な信号オプションは自動的にドロップダウン リ
ストで選択肢として表示されます。
3.6.3 ステート マシンを描く
「State Machine」タブをクリックして、ステート マシンのキャン
バスを開きます。ステート マシンの設計は、次の 3 つの基本
的な動作を含みます。
OUTPUT0 ラベルをダブルクリックして、図 22 のように設定を
変更します。
1. ステートを作成する
2. ステート内にアクションを追加する
3. 遷移用の条件を使用してステート間の遷移を作成する
GPIF II ステート マシンを描く
「State Machine」タブをクリックして、キャンバスを開きます。
未編集のキャンバスは、START と STATE0 という 2 つの
ステートがあります。無条件の遷移(LOGIC_ONE)でステート
を接続させます(図 23)。
japan.cypress.com
文書番号 001-92696 Rev. **
19
®
USB ビデオ クラス(UVC)フレームワーク内で EZ-USB FX3™ を使用してイメージ センサー インターフェースを実装する方法
図 23. 初期のステート マシンキャンバス
図 24. ステップ 1~3 の結果
4.
1.
STATE0 ボックス内をダブルクリックして、名前のテキスト
ボ ッ ク ス で STATE0 を IDLE に 編 集 ま す 。 「 Repeat
actions until next transition」は、ステートに入ってからア
クションが一度発生するか、またはステート中にアクション
がクロック毎に発生するかを決定します。このようなアクシ
ョンなしのステートでは、チェックボックスの状態は該当な
しです。
2.
キャ ンバス内の空いてい る場所を右クリ ッ ク し、「 Add
State」を選択して、新しいステートを追加します。この新し
いステート内をダブルクリックして、その名前を
WAIT_FOR_FRAME_START に変更します。
3.
IDLE ステートから WAIT_FOR_FRAME_START ステー
トへの遷移を作成します。カーソルを IDLE ステート ボッ
クスの中心へ位置付けます。カーソルは「+」記号に変化し
て 、 遷 移 の エ ン ト リ を 示 し ま す 。 マ ウ ス を
WAIT_FOR_FRAME_START ステート ボックスの中心
へドラッグします。小さい四角がステート ボックス内に表
示されて、その中心を位置づける手助けをします。マウス
がステート ボックスの中心内にどこでも外されたら、遷移
は作成されません。もう一度試してください。ステート遷移
には何の条件もないことに注意してください。
japan.cypress.com
IDLE から WAIT_FOR_FRAME_START への遷移の方
程式を編集するために、遷移ラインをダブルクリックします
(図 25)。LV と FV が、ブロック図の名前変更された信号
に対応する方程式の項になります。FV をロー レベルに選
択するために、ボタンと信号の選択肢を使用して方程式を
作成します。「Not」ボタンをクリックすると、「 !」記号が
「Equation Entry」ウィンドウに表示されます。そして、FV
信号を選択し、「Add」ボタンをクリックして(または FV エ
ントリをダブルクリックする)、最終の「!FV」方程式を作成
します。「Equation Entry」ウィンドウで「!FV」を入力して、
方程式を直接入力することもできます。この時点では、遷
移は図 26 のようになります。
文書番号 001-92696 Rev. **
20
®
USB ビデオ クラス(UVC)フレームワーク内で EZ-USB FX3™ を使用してイメージ センサー インターフェースを実装する方法
図 25. 遷移ラインをダブルクリックしてこのウィンドウを開く
図 27. LD_DATA/ADDR_COUNT アクションの設定
図 26. 編集された遷移
7.
PUSH_DATA_SCK0 という新しいステートを追加します
(イメージ センサー データをソケット 0 に入れます)。この
ステートはクロック毎に 1 バイトのイメージ センサーを
GPIF II インターフェースに転送して、ソケット 0 に送信し
ます。
8.
WAIT_FOR_FRAME_START ス テ ー ト か ら PUSH_
DATA_SCK0 ステートへの遷移を作成します。
9.
FV および LV の両方が FV&LV を作成することによりア
サートされた時、この遷移方程式のエントリを発生させる
ように変更します。結果の状態遷移は図 28 に示されます。
図 28. PUSH_DATA_SCK0 状態および
その遷移条件 FV&LV
5.
WAIT_FOR_FRAME_START ステートでは、カウンタは
それをインクリメントするステートに先行するステートで初
期化する必要があるため、このプロジェクトの 2 バイト
カウンタを初期化します。この設計が DATA カウンタをソ
ケット 0 バッファに、ADDR カウンタをソケット 1 バッファに
使用することに注意してください。GPIF II Designer の上
右のウィンドウ内の「Action List」ウィンドウは、アクション
のオプションを表示します。ステートにアクションを追加す
るために、その Action List 内の名前をステート ボックス
にドラ ッグし ま す。 LD_DATA_COUNT と LD_ADDR_
COUNT ア ク シ ョ ン を WAIT_FOR_FRAME_START
ステート ボックスにドラッグします。
6.
アクションのプロパティを編集するために、ステート ボック
ス内のアクションの名前をダブルクリックします。両方のア
ク シ ョ ン の プ ロ パ テ ィ を 図 27 の よ う に 編 集 し ま す 。
「Counter mask event」チェックボックスは、カウンタがそ
の限界値に達すると割り込み要求を無効にします。
japan.cypress.com
10. COUNT_DATA アクションを PUSH_DATA_SCK0 状態
に追加します。これは、すべての PCLK の立ち上がりエッ
ジでデータ(ソケット 0)カウンタ値をインクリメントします。
11. IN_DATA アクションを PUSH_DATA_SCK0 状態に追加
します。このアクションは、データバスからデータを読み出
して DMA バッファに書き込みます。
文書番号 001-92696 Rev. **
21
®
USB ビデオ クラス(UVC)フレームワーク内で EZ-USB FX3™ を使用してイメージ センサー インターフェースを実装する方法
12. ADDR カ ウ ン タ を リ ロ ー ド す る た め に LD_ADDR_
COUNT アクションを PUSH_DATA_SCK0 状態に追加し
ます。前述のように、カウンタ ロードは、実際にカウンタを
インクリメントさせる状態で実行されます。ADDR カウンタ
は SCK1 に転送されたバイトをカウントします。
これら遷移は、回線が有効になっている間 DMA バッファ境界
で GPIF スレッド間で切り替える状態遷移を定義します。図 31
にステートマシンのこの動作を示します。
図 31.図 10 からのピンポン アクション
13. 図 29 に示しているように PUSH_DATA_SCK0 状態で
IN_DATA アクションのプロパティを編集します。
図 29. PUSH_DATA_SCK00 アクションの設定
18. LINE_END_SCK0 という新しい状態を PUSH_DATA_
SCK0 状態の左側に追加します。
14. PUSH_DATA_SCK1 と名付けられた状態を追加します。
COUNT_ADDR、IN_DATA および LD_DATA_COUNT
アクションをこの状態に追加します。
15. 図 30 に示しているように、PUSH_DATA_SCK1 状態で
IN_DATA アクションのプロパティを編集します。
図 30. PUSH_DATA_SCK1 IN_DATA アクション
19. LINE_END_SCK1 という新しい状態を PUSH_DATA_
SCK1 状態の右側に追加します。
イメージ センサーは、次のビデオ ラインに切り替えている間
LV 信号がデアサートされた時にこれらの 2 つの状態が入力さ
れます。同様の操作は交互に異なる GPIF スレッドを使用して
実行されるため、状態は socket0 と socket1 の両側に必要と
される。
PUSH_DATA 状態は、次の 3 つの終了可能な遷移を必要と
しますが、GPIF II ハードウェアは、状態ごとに最大 2 つの遷
移を実装します。3 遷移の要件は、2 つの状態の間 3 終了条
件を供給する以外、何もしないダミー状態を作成することによ
り処理されます。これをデモする目的として図 32 に条件 1、2、
または 3 に基づいた状態 A から状態 B、C、又は D への遷移
を示している。
図 32. 状態 A は終了条件 1、2、および 3 を必要とする
A
1
16. PUSH_DATA_SCK0 状態から PUSH_DATA_SCK1 状
態への遷移を作成します。「LV および DATA_CNT_HIT」
式を使用して、この移行の方程式エントリを編集します。
17. PUSH_DATA_SCK1 状態から PUSH_DATA_SCK0 状
態 へ の 遷 移 を 作 成 し ま す 。 逆 方 向 「 LV and
ADDR_CNT_HIT」式を使用して、この移行の方程式エン
トリを編集します。
japan.cypress.com
2
B
3
D
C
図 33 に示しているように、GPIF II の互換性を確保するため
にダミー状態 A2 を追加します。
文書番号 001-92696 Rev. **
22
®
USB ビデオ クラス(UVC)フレームワーク内で EZ-USB FX3™ を使用してイメージ センサー インターフェースを実装する方法
図 33.GPIF II の互換性を確保するために
ダミー状態 A2 を追加
A
B
2
C
28. WAIT_FULL_SCK0_NEXT_SCK1 という新しい状態を
PUSH_DATA_SCK0 状態の下に追加します。
A2
!1
1
27. 遷移方程式「LV」を使って WAIT_TO_FILL_SCK1 状態
から PUSH_DATA_SCK1 状態への逆行遷移を作成しま
す。
29. WAIT_FULL_SCK1_NEXT_SCK0 という新しい状態を
PUSH_DATA_SCK1 状態の下に追加します。
3
30. これら 2 つの状態(WAIT_FULL_)の間、イメージ セン
サーは、DMA バッファの境界線で切り替わります。その
ため、次のバイト転送は現時点で無効な GPIF スレッドを
使用しなければなりません。
D
ダミー状態として機能している LINE_END 状態を作成します。
20. 遷移方程式「(not LV)」を使って PUSH_DATA_SCK0 状態
から LINE_END_SCK0 状態への遷移を作成します。
21. 遷移方程式「(not LV)」を使って PUSH_DATA_SCK1 状態
から LINE_END_SCK1 状態への遷移を作成します。
31. 「DATA_CNT_HIT」式を使って LINE_END_SCK0 状態
から WAIT_FULL_SCK0_NEXT_SCK1 状態への遷移
を作成します。ステートマシンのこのアクションは図 35 に
示されています。
図 35. WAIT_FULL 状態を追加
22. WAIT_TO_FILL_SCK0 という新しい状態を LINE_END_
SCK0 状態の下に追加します。
23. WAIT_TO_FILL_SCK1 という新しい状態を LINE_END_
SCK1 状態の下に追加します。
DMA バッファが一杯ではありませんが、有効な回線がデア
サートされた時にこれら 2 つの状態が入力されます。
24. 図 34 に 示 し て い る よ う に 遷 移 方 程 式 「 ( not
DATA_CNT_HIT)」を使って LINE_END_SCK0 状態か
ら WAIT_TO_FILL_SCK0 状態への遷移を作成します。
図 34.DATA_CNT_HIT は、カウンタが
そのプログラムされた限界値に達したことを示す
32. 「ADDR_CNT_HIT」式を使って LINE_END_SCK1 状態
から WAIT_FULL_SCK1_NEXT_SCK0 状態への遷移
を作成します。
33. 「 LV 」 式 を 使 っ て WAIT_FULL_SCK0_NEXT_SCK1
状態から PUSH_DATA_SCK1 状態への遷移を作成しま
す。そうすると図に交差リンクが作成されることに注意して
ください。
34. 「 LV 」 式 を 使 っ て WAIT_FULL_SCK1_NEXT_SCK0
状態から PUSH_DATA_SCK0 状態への遷移を作成しま
す。ステートマシンのアクションは図 36 に示しています。
図 36.DMA バッファが一杯になると待つ
25. 遷移方程式「LV」を使って WAIT_TO_FILL_SCK0 状態
から PUSH_DATA_SCK0 状態への逆行遷移を作成しま
す。データ転送は、回線が有効になるとすぐに同じソケット
に再開されます。
26. 遷 移 方 程 式 「 ( not ADDR_CNT_HIT ) 」 を 使 っ て
LINE_END_SCK1 状態から WAIT_TO_FILL_SCK1 状
態への遷移を作成します。
japan.cypress.com
35. PARTIAL_BUF_IN_SCK0 と い う 新 し い 状 態 を
WAIT_TO_FILL_SCK0 状態の下に追加します。
文書番号 001-92696 Rev. **
23
®
USB ビデオ クラス(UVC)フレームワーク内で EZ-USB FX3™ を使用してイメージ センサー インターフェースを実装する方法
36. PARTIAL_BUF_IN_SCK1 という新しい状態を WAIT_
TO_FILL_SCK1 状態の下に追加します。
各状態 PARTIAL_BUF_は、最後の DMA バッファが完全に
満たされていないフレームの端部を示すものである。CPU は、
GPIF II が生成する割り込み要求に応答する時に手動でこの
部分的な DMA バッファを転送する必要があります。
37. FULL_BUF_IN_SCK0 と い う 新 し い 状 態 を WAIT_
FULL_SCK0_NEXT_SCK1 状態の下に追加します。
38. FULL_BUF_IN_SCK1 と い う 新 し い 状 態 を WAIT_
FULL_SCK1_NEXT_SCK0 状態の下に追加します。
最終のステートマシンは図 38 の通りです。これを図 12 に示し
たステートマシンの一部と比較すると唯一の違いは、状態ごと
に最大 2 つの遷移を提供するための PUSH_DATA 状態の追
加です。
44. 「File-Save Project As」を選択してプロジェクトを保存しま
す。
45. 図 37 に強調表示されるビルド アイコンを使用してプロ
ジェクトをビルドします。プロジェクトの出力ウィンドウはビ
ルドの状態を示すところです。
図 37.ビルド ボタン
各状態 FULL_BUF_は、フレームデータの終了部分が対応す
る GPIF スレッドに関連付けられている DMA バッファの最後
のバイトであることを示しています。GPIF II ハードウェアは、こ
のフル DMA バッファをコミットの世話をしているので、ここでこ
れ以上のアクションはアプリケーション固有になります。
39. 「not FV」式を使って WAIT_TO_FILL_SCK0 状態から
PARTIAL_BUF_IN_SCK0 状態への逆行遷移を作成し
ます。
40. 「not FV」式を使って WAIT_TO_FILL_SCK1 状態から
PARTIAL_BUF_IN_SCK1 状態への逆行遷移を作成し
ます。
41. 「not FV」式を使って WAIT_FULL_SCK0_NEXT_SCK1
状態から FULL_BUF_IN_SCK0 状態への逆行遷移を作
成します。
42. 「not FV」式を使って WAIT_FULL_SCK1_NEXT_SCK0
状態から FULL_BUF_IN_SCK1 状態への逆行遷移を作
成します。
46. プロジェクトの出力をチェックします。プロジェクトの出力は、
プロジェクト ディレクトリ内のヘッダファイル
cyfxgpif2config.h として表示されます。このヘッダファイ
ルを調べると、GPIF Designer II は、様々な GPIF II の内
部設定を作成したことがわかります。FX3 ファームウェア
はこれら設定を使用して GPIF II を設定し、そのステート
マシンを定義するために使用します。このファイルの編集
は直接やらないで、GPIF II Designer に任せてください。
43. Intr_CPU ア ク シ ョ ン を PARTIAL_BUF_IN_SCK0 、
PARTIAL_BUF_IN_SCK1 、 FULL_BUF_IN_SCK0 、 お
よび FULL_BUF_IN_SCK1 状態に追加します。
japan.cypress.com
文書番号 001-92696 Rev. **
24
®
USB ビデオ クラス(UVC)フレームワーク内で EZ-USB FX3™ を使用してイメージ センサー インターフェースを実装する方法
図 38.完成したステートマシンの図
3.6.4 GPIF II インターフェースの詳細を変更
8.
本節では、必要に応じてインターフェースの設定を変更する方
法について説明します。例えば、イメージ センサー/ASIC が
16 ビット幅のデータバスを有する場合、データ バスを提供す
るために GPIF II インターフェースを変更する必要があります。
これを実施するには、次の手順に従います。
ステートマシンのキャンバスでは、WAIT_FOR_FRAME_
START 状態内の LD_DATA_COUNT アクションをダブ
ルクリックします。カウンタ限界値を 8183 に変更します。
9.
LD_ADDR_COUNT アクションに対して同様に行います。
1.
GPIF II Designer 内の ImageSensorInterface.cyfx プ
ロジェクトを開きます。(このプロジェクトは直接にコンパイ
ルされないことがあります)。
2.
File->Save Project As を選択します。
3.
表示されるダイアログ ボックスにおいてプロジェクトに適
切な名前を付け、プロジェクトを便利な場所に保存します。
4.
現 在 開 い て い る プ ロ ジ ェ ク ト を 閉 じ ま す ( File->Close
Project を選択)
5.
ステップ 3 で保存したプロジェクトを開きます。
6.
Interface Definition タブへ移動して、 Address/Data
Bus Usage の設定を 16 Bit オプションにします。
7.
State Machine タブへ移動します。
japan.cypress.com
10. プロジェクトを保存します。
11. プロジェクトをビルドします。
12. ス テ ッ プ 3 で 選 択 し た 場 所 に 保 存 し た
cyfxgpif2config.h ヘッダファイルをファームウェアのプ
ロジェクト ディレクトリにコピーします。既存の
cyfxgpif2config.h のファイルが 1 あると、上書きされま
す。添付のソースの zip ファイルの中にファームウェアの
プロジェクト ディレクトリ USBVideoClass を検索します。
注: GPIF II バス幅を 32 ビットに変更している場合は、ファー
ム ウ ェ ア 内 iomatrix 構 成 に は CyTrue に 設 定 さ れ た
isDQ32Bit パラメータがあることを確認してください。
次の節では、データをストリーミングする DMA チャネル、およ
び UVC をサポートするファームウェアの詳細を説明します。
文書番号 001-92696 Rev. **
25
®
USB ビデオ クラス(UVC)フレームワーク内で EZ-USB FX3™ を使用してイメージ センサー インターフェースを実装する方法
4. DMA システムのセットアップ
プロセッサ インターフェース ブロック(PIB)の一部としての
GPIF II ブロッ ク は、 32 ビッ トの データ で 100 MHz (400
Mbps)まで実行することができます。内部 DMA バッファに
データを転送するには、GPIF II は、DMA プロデューサ ソケッ
トに接続された複数の GPIF スレッドを使用しています(3.3 節
で説明しました)。4 つの GPIF スレッドの内 2 つは、本アプリ
ケーションに使用されています。ソケットと GPIF スレッドのデフ
ォルトのマッピング(図 39)はこのアプリケーションに使用され
ます。ここでは、ソケット 0 が GPIF スレッド 0 に、ソケット 1 は、
GPIF スレッド 1 に接続されています。 GPIF のスレッドの切り
替えは、前のセクションで設計された GPIF II ステートマシンで
実行されます。
ディスクリプタへのポインタを指定します。ソケットは動作する
時、DMA ディスクリプタを 1 つずつ読み出し、ディスクリプタの
アドレスと長さで指定された DMA バッファにデータを送信しま
す。L バイトが転送された時、ソケットは次のディスクリプタを読
み出して、バイトを別の DMA バッファに引き続き転送します。
この構造により、DMA バッファをメモリ内でどこでも何個でも作
って、自動的に一緒に連結することができるため、ソケットには
極めて幅広い用途があります。例えば、図 40 のソケットは、繰
り返しループで DMA ディスクリプタを読み出します。
図 41. ソケットが DMA ディスクリプタ 1 と共に動作する
Socket Linked List
図 39. デフォルトの GPIF II ソケット/スレッドのマッピング
FX3 RAM
A1
Processor Interface Block
(PIB)
L
Socket
DMA Buffer 1
DMA Descriptor 2
Address A2 Length L,
Next Descriptor 3
DMA Buffer 2
GPIF II
Thread 0
Socket 1
Thread 1
Socket 2
Thread 2
Socket 3
Thread 3
DMA Buffer 3
Switching
Socket 0
External
Data
図 41 では、ソケットは DMA ディスクリプタ 1 をロードしました。
この DMA ディスクリプタ 1 の指示の下でソケットは L バイトが
転送された時まで A1 から始まるバイトを転送します。ソケット
は、L バイトの転送を完了すると、DMA ディスクリプタ 2 を読
み出して、アドレス A2 と長さ L で前と同様の処理を引き続き
ます(図 42)。
図 42. ソケットが DMA ディスクリプタ 2 と共に動作する
Socket Linked List
図 40. ソケットが DMA ディスクリプタのリストに従って
データを送信する
Socket Linked List
FX3 RAM
Socket
Socket
DMA Descriptor 1
Address A1, Length L,
Next Descriptor 2
A2
L
DMA Descriptor 2
Address A2 Length L,
Next Descriptor 3
DMA Buffer 2
DMA Buffer 3
DMA Descriptor 2
Address A2 Length L,
Next Descriptor 3
DMA Buffer 3
Data
Data
DMA Descriptor 3
Address A3, Length L,
Next Descriptor 1
DMA Descriptor 1
Address A3, Length L,
Next Descriptor 1
ソケット リンク リストは、メイン メモリ内のデータ構造セットであ
り、DMA ディスクリプタと呼ばれています。それぞれのディスク
リプタは、DMA バッファのアドレスと長さ、および次の DMA
japan.cypress.com
DMA Descriptor 1
Address A1, Length L,
Next Descriptor 2
DMA Buffer 1
DMA Buffer 1
DMA Buffer 2
DMA Descriptor 3
Address A3, Length L,
Next Descriptor 1
Data Bus
DMA 転送を理解するために、ソケットの概念を次の 4 図に示
します。図 40 にソケットの 2 つの主な属性であるリンクされた
リストとデータ ルータを示します。
FX3 RAM
DMA Descriptor 1
Address A1, Length L,
Next Descriptor 2
図 43 では、ソケットは 3 番目の DMA ディスクリプタを読み出
して、A3 から始まるデータを転送します。 L バイトを転送した
後、シーケンスは DMA ディスクリプタ 1 で繰り返します。
文書番号 001-92696 Rev. **
26
®
USB ビデオ クラス(UVC)フレームワーク内で EZ-USB FX3™ を使用してイメージ センサー インターフェースを実装する方法
図 43. ソケットが DMA ディスクリプタ 3 と共に動作する
Socket Linked List
FX3 RAM
Socket
DMA Descriptor 1
Address A1, Length L,
Next Descriptor 2
ステップ 4:A2 から始まる DMA バッファ位置にデータを転送し
ます。DMA バッファ サイズである L のデータ量を転送した後、
ステップ 5 に進みます。
DMA Buffer 1
DMA Descriptor 2
Address A2 Length L,
Next Descriptor 3
DMA Buffer 2
DMA Buffer 3
ステップ 5:現時点の DMA ディスクリプタ 2 が指している
DMA ディスクリプタ 3 をロードします。DMA バッファ位置(A3)、
DMA バッファ サイズ(L)、および次のディスクリプタ(DMA
ディスクリプタ 1)の情報を取得します。ステップ 6 に進みます。
A3
Data
DMA Descriptor 3
Address A3, Length L,
Next Descriptor 1
図 44 には、詳細な DMA データ転送を示します。 この例は円
形ループで連結した長さ L の DMA バッファを使用しています。
FX3 メモリ アドレスは左側にあります。青い矢印は、ソケット リ
ンク リスト ディスクリプタをメモリからロードしていることを示し
ます。赤い矢印は、結果となるデータ経路を示します。以下の
手順は、データが内部 DMA バッファに転送される時のソケッ
ト シーケンスを示します。
ステップ 1:DMA ディスクリプタ 1 をメモリからソケットにロード
します。DMA バッファ位置(A1)、DMA バッファ サイズ(L)、お
よび次のディスクリプタ(DMA ディスクリプタ 2)の情報を取得
します。ステップ 2 に進みます。
ステップ 2:A1 から始まる DMA バッファ位置にデータを転送し
ます。DMA バッファ サイズである L のデータ量を転送した後、
ステップ 3 に進みます。
図 44. DMA 転送例
0
DMA Descriptor 3
Buffer Address: A3 – Size L
Next DMA Descriptor: 1
Ste
p
1
DMA Descriptor 2
Buffer Address: A2 – Size L
Next DMA Descriptor: 3
ep
St
DMA Descriptor 1
Buffer Address: A1 – Size L
Next DMA Descriptor: 2
3
Step
5
Socket
A1
p2
S te
St
ep
4
DMA Buffer 1
A1+L
ステップ 6:A3 から始まる DMA バッファ位置にデータを転送し
ます。DMA バッファ サイズである L のデータ量を転送した後、
ステップ 1 に進みます。
この単純な方式は、カメラ アプリケーションの問題があります。
ソケットはメモリ、次の DMA ディスクリプタを読み出すには通
常 1 マイクロ秒がかかります。この転送は、ビデオ ラインの途
中で一時停止すれば、映像データは失われます。この損失を
防ぐために、DMA バッファ サイズは、ビデオラインの長さの倍
数として設定することができます。これにより、DMA バッファの
切り替えはビデオ ラインが非アクティブ(LV=0)になった時と
同時に発生します。しかし、、この方法は例えば、ビデオの解
像度が変更された場合に対応する柔軟性を持っていません。
BULK 転送にとって USB3.0 の最大バースト速度が利点をも
たらしないため、DMA バッファ サイズをライン サイズに正確
に等しく設定することは良い解決策ではありません。USB3.0
は、バルク エンドポイント上にの 16 バースト(1 バーストが
1024 バイト)を可能にします。これは、DMA バッファ サイズが
16KB に設定されている理由です。
より良い解決策は、ソケットが 1 クロック サイクル以内に待ち
時間なしに切り替わるという利点を利用することです。従って、
4 個のインターリーブ DMA バッファにデータを格納するために、
2 つのソケットを使用する意味があります。デュアル ソケットを
使用したデータ転送は、図 45 で説明されており、実行ステップ
が番号付けられています。ソケット 0 とソケット 1 の DMA バッ
ファへのアクセスは、それぞれ赤い矢印と緑の矢印(個別のソ
ケットのデータ経路)で区別されています。各ステップの「a」と
「b」部分は同時に行われます。このハードウェアの並行な動作
により、DMA ディスクリプタの読み出しデッド タイムが無くなり、
GPIF II がデータを内部メモリに連続してストリーミングするこ
とができます。これらの手順は図 13 に示している Step ライン
に対応します。
St
ep
DMA Buffer 2
6
A2
ステップ 3:現時点の DMA ディスクリプタ 1 が指している
DMA ディスクリプタ 2 をロードします。DMA バッファ位置(A2)、
DMA バッファ サイズ(L)、および次のディスクリプタ(DMA
ディスクリプタ 3)の情報を取得します。ステップ 4 に進みます。
A2+L
A3
DMA Buffer 3
A3+L
japan.cypress.com
文書番号 001-92696 Rev. **
27
®
USB ビデオ クラス(UVC)フレームワーク内で EZ-USB FX3™ を使用してイメージ センサー インターフェースを実装する方法
図 45. デュアル ソケットにより継ぎ目のない転送を実現する
0
ep
St
1a
DMA Descriptor 1
Buffer Address: A1 – Size L
Next DMA Descriptor: 3
DMA Descriptor 2
Buffer Address: A2 – Size L
Next DMA Descriptor: 4
3a
1b
ep
St
Step 4a
6a
a
DMA Descriptor 4
Buffer Address: A4 – Size L
Next DMA Descriptor: 2
Ste
p
5
Step
DMA Descriptor 3
Buffer Address: A3 – Size L
Next DMA Descriptor: 1
St
ep
Socket 0
Socket 1
A1
DMA Buffer 1
e
St
p2
ep
St
6b
ep
St
A1+L
A2
3b
DMA Buffer 3
5b
St
ep
A2+L
A3
ステップ 6:GPIF II は再びソケットを切り替えて、ソケット 0 は、
DMA バッファ 1 への長さ L のデータの転送を開始します。
DMA バッファが UIB コンシューマー ソケットによって使い果た
されてから、この時点では空の状態であることを想定していま
す。それと同時に、ソケット 1 は DMA ディスクリプタ 2 をロード
して、DMA バッファ 2 へのデータ転送の準備ができました。こ
こで、サイクルは実行経路のステップ 3 に進みます。
コンシューマー側(USB)が GPIF II から次の映像データの塊
を受信するために間に合って DMA バッファを空にして解放し
た場合にのみ、GPIF II ソケットは映像データを転送することが
できます。コンシューマーの速度が十分に速くなかった場合、
ソケットの DMA バッファへの書き込みが無視されたため、ソケ
ットはデータを落とします。その結果、バイト カウンタは、実際
の転送との同期を失います。こような同期喪失は次のフレーム
に伝播することがあります。したがって、クリーンアップ メカニ
ズムは、すべてのフレームの終わりに必要とされます。このメ
カニズムはクリーンアップ節で説明します。
図 12 のフローチャートによると、フレーム転送は、4 つの可能
な状態で終了します。
St
ep
4b
DMA Buffer 2
に転送すること以外は、ステップ 1a に似ていることに注意して
ください。
A3+L
A4
DMA Buffer 4
A4+L
ステップ 1:ソケットの初期化時に、ソケット 0 とソケット 1 は、
それぞれ DMA ディスクリプタ 1 と DMA ディスクリプタ 2 を
ロードします。
ステップ 2:転送データの準備ができると、ソケット 0 はすぐに
データを DMA バッファ 1 に転送します。転送の長さは L です。
この転送が終わったら、ステップ 3 に進みます。
ステップ 3: GPIF II は GPIF スレッドを切り替えて、従って、
データ転送用のソケットも切り替えます。ソケット 1 が DMA
バッファ 2 へのデータ転送を開始すると同時に、ソケット 0 は
DMA ディスクリプタ 3 をロードします。ソケット 1 が L のデータ
量の転送を完了した時には、ソケット 0 は DMA バッファ 3 へ
のデータ転送の準備ができました。
ステップ 4:この時点で、GPIF II は元の GPIF スレッドに切り
戻します。ソケット 0 は長さ L のデータを DMA バッファ 3 に転
送します。それと同時に、ソケット 1 は DMA ディスクリプタ 4
をロードして、DMA バッファ 4 へのデータ転送の準備ができま
した。ソケット 0 が長さ L のデータの転送を終わったら、ステッ
プ 5 に進みます。




ソケット 0 が一杯の DMA バッファを転送した
ソケット 1 が一杯の DMA バッファを転送した
ソケット 0 が部分的な DMA バッファを転送した
ソケット 1 が部分的な DMA バッファを転送した
部分的な DMA バッファの例では、CPU は、USB コンシューマ
ーに部分的な DMA バッファを転送する必要があります。
DMA チャネルは uvc.c ファイル内の CyFxUVCApplnInit と
いう関数を使って初期化されます。DMA チャネル構成の詳細
は、CyFxUVCApplnInit 関数内の「dmaMultiConfig」構造で
は カ ス タ マ イ ズ さ れ て い ま す 。 DMA チ ャ ネ ル タ イ プ は
MANUAL_MANY_TO_ONE に設定されます。
また、USB 3.0 ホストへデータをストリームする USB エンド
ポイントは、1024 バイトのバルク エンドポイントを使って 16 の
バーストを可能にするように構成されます。これはエンドポイン
ト が 固 定 し て CY_FX_EP_BULK_VIDEO に 設 定 さ れ た
「CyU3PSetEpConfig」機能に渡された「endPointConfig」構
造を使用して設定されます。
ステップ 5:GPIF II はソケット 1 のデータを DMA バッファ 4 に
送信します。それと同時に、ソケット 0 は DMA ディスクリプタ 1
をロードして、DMA バッファ 1 へのデータ転送の準備ができま
した。ステップ 5a は、Socket 1 を初期化せずにデータを同時
japan.cypress.com
文書番号 001-92696 Rev. **
28
®
USB ビデオ クラス(UVC)フレームワーク内で EZ-USB FX3™ を使用してイメージ センサー インターフェースを実装する方法
4.1 DMA バッファの概要

コンシューマー ソケットは DMA バッファから全てのデータ
を読み出した後、コンシューマー ソケットが DMA バッファ
にアクセスできるように、ロックを解除します。コンシュー
マー ソケットは、DMA バッファを消費するように指示され
ます。

同じ DMA ディスクリプタがプロデューサー ソケットとコン
シューマー ソケットで同時に使用されている場合、DMA
バッファの一杯/空の状態は、DMA ディスクリプタとソケッ
ト間でのイベントを介してプロデューサー ソケットとコン
シューマー ソケット間で自動的に通信されます。

CPU が 12 バイトの UVC ヘッダを追加する必要があるた
め、このアプリケーションでは、プロデューサー ソケットと
コンシューマー ソケットは DMA ディスクリプタの異なる
セットをロードする必要があります。プロデューサー ソケッ
トによりロードされた DMA ディスクリプタは、コンシュー
マー ソケットによりロードされた DMA ディスクリプタがポ
イントする対応 DMA バッファから 12 バイト オフセットの
DMA バッファをポイントします。

プロデューサー ソケットとコンシューマー ソケットの異なっ
た DMA ディスクリプタにより、CPU は、プロデューサー ソ
ケットとコンシューマー ソケット間の DMA バッファの状態
の通信を管理する必要があります。これは、DMA チャネ
ルの実装が「手動 DMA」チャネルと呼ばれている理由で
す。

DMA バッファが GPIF II ブロックにより生成された後、
CPU は、割り込みを介して通知されます。CPU はその後、
ヘッダ情報を追加し、コンシューマー(USB インターフェー
ス ブロック)に DMA バッファを転送します。

GPIF II 側では、DMA バッファ内の映像データは自動的
にラップアップされ、フレーム内の最後の DMA バッファ以
外、FX3 RAM に全てのバッファ内のデータを転送します。
CPU の介入は不要です。

フレームの終わりに、最終の DMA バッファは、完全に一
杯にならない場合があります。この場合、CPU が介入し
て、手動で DMA バッファをラップアップし、FX3 RAM に
それを転送します。これは、「強制的なラップアップ」と呼
ばれています。
本節では、FX3 DMA バッファの作成方法とその本アプリケー
ションでの使用方法を概要として説明します。

説明された DMA チャネルの不可欠な部分を 3.3 の節に
説明します。

本アプリケーションでは、GPIF II ユニットがプロデュー
サーであり、FX3 USB ユニットがコンシューマーです。

このアプリケーションでは、データ損失を避けるために、
GPIF II ブロックで GPIF スレッド切り替え機能を使用して
います。

プロデューサー ソケットは、DMA ディスクリプタをロードす
ると、対応する DMA バッファが書き込み動作の準備がで
きたか確認するために DMA バッファをチェックします。プ
ロデューサー ソケットは、DMA バッファが空であることを
発見した場合、FX3 RAM にデータを書き込むためにアク
ティブ状態に移行します。プロデューサー ソケットは、デー
タを書き込むために DMA バッファをロックします。

プロデューサー ソケットは DMA バッファへの書き込みを
終了すると、コンシューマー ソケットが DMA バッファにア
クセスできるように、ロックを解除します。アクションは
「バッファ ラップアップ」または単に「ラップアップ」と呼ばれ
ています。DMA ユニットは、その後、FX3 RAM に DMA
バッファを転送するように指示されます。プロデューサー
ソケットは、DMA バッファを生成するように指示されます。
プロデューサーが積極的に DMA バッファを一杯にしない
時にのみ、DMA バッファをラップアップする必要がありま
す。これは状態図における FV=0 のテストの理由です。


DMA バッファが完全に一杯になる(フレーム中に DMA
バッファの充填が繰り返し行われているから)と、ラップ
アップ動作は自動的に行われます。プロデューサー ソケ
ットは、DMA バッファのロックを解除し FX3 RAM に DMA
バッファを転送し、空の DMA バッファへ切り替え、映像
データ ストリームの書き込みを継続します。
コンシューマー ソケットは、DMA ディスクリプタをロードす
ると、対応する DMA バッファが読み出し動作の準備がで
きたか確認するために DMA バッファをチェックします。コ
ンシューマー ソケットは、DMA バッファが転送されたこと
を発見した場合、FX3 RAM からデータを読み出すために
アクティブ状態に移行します。コンシューマー ソケットは、
データを読み出すために DMA バッファをロックします。
japan.cypress.com
文書番号 001-92696 Rev. **
29
®
USB ビデオ クラス(UVC)フレームワーク内で EZ-USB FX3™ を使用してイメージ センサー インターフェースを実装する方法
のファイルは、コードを実装してイメージ センサーを設定する
必要があるプレースホルダとしてプロジェクト事例で提供され
ています。
5. FX3 ファームウェア
このアプリケーション ノートと共に提供されたファームウェアの
例は、ソースの zip ファイルの USBVideoClass フォルダの中
に保存されます。Eclipse ワークスペースにファームウェア プ
ロジェクトを入力するには、「AN75705, “Getting Started with
EZ-USB FX3”」を参照してください。このファームウェアの例は
コンパイルし、エニュメレーションしますが、特定のイメージ セ
ンサーがイメージ センサーからビデオをストリームすることが
可能になるために、ユーザーは sensor.c と sensor.h ファイ
ルを使ってファームウェアを調整しなければなりません。これら
このアプリケーション ノート内の 6 節で説明したようにアプティ
ナ センサー基板を使用し、アプティナの NDA が署名されてい
る場合、サイプレスはこの特定のセンサーに対応する
sensor.c と sensor.h ファイルを提供します。プリコンパイル
されたロード イメージは NDA なしで FX3-アプティナの構成を
試しすためにプロジェクト内に提供されています(節 7 を参照)。
表 8 は、各モジュールに実装するコード モジュールと関数をま
とめたものです。
表 8. プロジェクト事例用のファイル
説明
File(ファイル)>
sensor.c
sensor.h
camera_
ptzcontrol.c
camera_
ptzcontrol.h
cyfxtx.c
cyfxgpif2config.
h
uvc.c
japan.cypress.com
 I C を 介 し て イ メ ー ジ セ ン サ ー の 構 成 を 読 み 書 き す る た め の SensorWrite2B 、 SensorWrite 、
SensorRead2B、および SensorRead 関数を定義する。これら機能は、イメージ センサーの I2C バス上のレ
ジスタ アドレスが 16 ビット幅であることを前提にする
 イ メ ー ジ セ ン サ ー の リ セ ッ ト ラ イ ン を 制 御 す る た め の SensorReset 関 数 、 I2C の 接 続 を 確 認 し 、
(SensorScaling_HD720p_30fps 関数を使って)デフォルトのストリーム モードでイメージ センサーを設定す
るための SensorInit 関数を定義
 所望のストリーム モードでイメージ センサーを設定するための SensorScaling_VGA と SensorScaling_
HD720p_30fps 関数を設定する。これら関数はプレースホルダの関数です。これらの関数をイメージ センサー
固有の設定コマンドと共に使用する必要がある
 セ ン サ ー 輝 度 調 整 レ ジ ス タ の 輝 度 値 を 読 み 書 き す る た め の SensorGetBrightness と
SensorSetBrightness 関数を定義する。これら関数はプレースホルダの関数である。これらの関数をイメー
ジ センサー固有の設定コマンドと共に使用する必要がある
 イメージ センサー用の定数(I2C スレーブ アドレスおよびリセット用の GPIO 番号)を含む。このファイルでイメ
ージ センサーの I2C スレーブ アドレスを定義
 sensor.c で定義されたすべての関数の宣言を含む
 カメラの PTZ 値を読み書きするための関数を定義する。これら関数はプレースホルダの関数である。これらの
関数をイメージ センサー固有の設定コマンドと共に使用する必要がある
 Uncomment the line “#define UVC_PTZ_SUPPORT” in uvc.h 内の「#define UVC_PTZ_SUPPORT」行
のコメントを解除して PTZ 制御コード プレースホルダを有効にする
 PTZ 制御の実装に使用される定数を含む
 camera_ptzcontrol.c で定義されたすべての関数の宣言を含む
 変更は不要です。このアプリケーション ノートに関連するプロジェクトに提供されるファイルを使用
 これは、RTOS と FX3 API ライブラリがメモリ マッピングに使用する定数、および FX3 API ライブラリがメモリ
管理に使用する関数を含む
 GPIF II Designer ツールで生成されるヘッダファイル変更は不要である。インターフェースを変更する必要があ
る場合、新しいヘッダファイルは GPIF II Designer ツールから生成されなければならない。このファイルを新し
いファイルで置き換える必要がある
 uvc.c ファイル内の API 呼び出しに渡された、GPIF II ステート マシンを開始、実行するための構造と定数を
含む
 UVC アプリケーションの主なソース ファイル。輝度と PTZ 制御以外の制御をサポートする、または異なったビ
デオ ストリーム モードのサポートを追加するためにコードを修正する際にこのファイルを変更する必要がある
 以下の関数を含む
 Main:FX3 デバイスを初期化、キャッシュをセットアップ、FX3 I/O を設定、RTOS カーネルを起動
 CyFxApplicationDefine:RTOS が実行する 2 つのアプリケーション スレッドを定義
 UVCAppThread_Entry:最初のアプリケーション スレッド関数は FX3の内部ブロック用の初期化関数を
呼び出し、デバイスをエニュメレーションし、映像データの転送を処理
2
文書番号 001-92696 Rev. **
30
®
USB ビデオ クラス(UVC)フレームワーク内で EZ-USB FX3™ を使用してイメージ センサー インターフェースを実装する方法
説明
File(ファイル)>
cyfxuvcdscr.c
uvc.h
cyfx_gcc_startu
p.s
 UVCAppEP0Thread_Entry:2 番目のアプリケーション スレッド関数は UVC 固有の要求が受け取られ
たことを示すイベントを待機し、これら要求を処理するために対応関数を呼び出す
 UVCHandleProcessingUnitRqts:処理ユニットの機能を対象とした VC の要求を処理
 UVCHandleCameraTerminalRqts:入力終端の機能を対象とした VC の要求を処理
 UVCHandleExtensionUnitRqts:拡張ユニットの機能を対象とした VC の要求を処理
 UVCHandleInterfaceCtrlRqts:終端とユニットを対象外とした一般的な VC の要求を処理
 UVCHandleVideoStreamingRqts:ストリーム モードを変更する VS 要求を処理
 CyFxUVCApplnDebugInit:デバッグ メッセージのプリント用の FX3 の UART ブロックを初期化
 CyFxUVCApplnI2CInit:イメージ センサー設定用の FX3 の I2C ブロックを初期化
 CyFxUVCApplnInit:エニュメレーション用の FX3 の GPIO ブロック、プロセッサ ブロック(GPIF II がプ
ロセッサ ブロックの一部)、(コンフィギュレーションが 720p 30fps にセットされる)センサー、USB ブロッ
ク、と USB 転送用のエンドポイント コンフィギュレーション メモリおよび GPIF II から USB へのデータ
転送用の DMA チャネル コンフィギュレーションを初期化
 CyFxUvcAppGpifInit:GPIF II ステートマシンを初期化し、起動する
 CyFxGpifCB:GPIF II ステートマシンから生成される CPU 割り込みを処理
 CyFxUvcAppCommitEOF:GPIF II ステートマシンが生成する部分的な DMA バッファを FX3 RAM に
転送
 CyFxUvcApplnDmaCallback:FX3 からホストへの出力映像データを追随
 CyFxUVCApplnUSBSetupCB:ホストが送信する全ての制御要求を処理、UVC 固有の要求がホスト
から受け取られたことを示すイベントを設定し、ストリームが停止する時点を検出
 CyFxUVCApplnUSBEventCB:一時停止、ケーブル切断、リセット、および再開などの USB イベントを
処理
 CyFxUVCApplnAbortHandler:エラーの時、またはストリーム停止要求が検出された時にストリーム映
像データを中止する
 CyFxAppErrorHandler:エラー処理関数。これは、必要に応じてエラー処理を実施するために使用され
るプレースホルダ関数である
 CyFxUVCAddHeader:ストリームが有効になっている間に UVC ヘッダを映像データに追加
 UVC アプリケーションの USB エニュメレーション ディスクリプタを含む。フレームレート、画像解像度、ビット深
度、またはサポートされているビデオ制御を変更する必要がある場合にこのファイルを変更しなければならな
い。UVC の仕様に必要な詳細情報が含む
 PTZ サポートをオン/オフにし、インターフェースとフレーム カウントのプリントをデバッグするアプリケーション
動作を修正するための switch 文を含む
 uvc.c、cyfxuvcdscr.c、camera_ptzcontrol.c、および sensor.c ファイルで共通に使用される定数を含む
 このアセンブリ ソースファイルには、FX3 CPU の起動コードが含まれています。これは、スタックと割り込みベ
クタをセットアップする関数を含む
 変更は不要
ファームウェアは最初、FX3 の CPU を起動して、その I/O を設定します。その後、ThreadX リアルタイム オペレーティング システム
(RTOS)を開始するために CyU3PKernelEntry 関数を呼び出します。uvcAppThread と uvcAppEP0Thread の 2 つのアプリケー
シ ョ ン ス レ ッ ド が 作 成 さ れ ま す 。 RTOS は 、 こ れ ら の ア プ リ ケ ー シ ョ ン ス レ ッ ド を 実 行 し 、 ア プ リ ケ ー シ ョ ン ス レ ッ ド 関 数
( UVCAppThread_Entry 、 UVCAppEP0Thread_Entry ) の 実 行 を ス ケ ジ ュ ー ル す る た め に リ ソ ー ス を 割 り 当 て ま す 。
図 46 に基本プログラム構造を示しています。
japan.cypress.com
文書番号 001-92696 Rev. **
31
®
USB ビデオ クラス(UVC)フレームワーク内で EZ-USB FX3™ を使用してイメージ センサー インターフェースを実装する方法
ジ センサー用に定義されます。これら設定を変更する必要が
ある場合は節 2.3.1 を参照してください。
図 46. カメラ プロジェクトの構造
USB Request arrives over EP0
In a SETUP packet
5.4 I2C インターフェースを介してイメージ センサー
を設定
USBSetupCB() callback
(in FX3 library)
Raises Control and
Stream Events
イメージ センサーは FX3 の I2C マスター ブロックを使って設
定 さ れ ま す 。 SensorWrite2B 、 SensorWrite 、
SensorRead2B、および SensorRead 関数(sensor.c ファ
イルで定義される)は、I2C を介してイメージ センサー コンフィ
ギュレーションを読み書きするために使用されます。データをイ
メージ センサーへ書き込むために関数 SensorWrite2B と
SensorWrite は標準 API CyU3PI2cTransmitBytes を呼び
出します。データをイメージ センサーから呼び出すために関数
SensorRead2B と SensorRead は 標 準 API
CyU3PI2cReceiveBytes を呼び出します。これら API の詳
細は、FX3 SDK API ガイドを参照してください。
uvc.c
USBSetupCB()
UVCAppEP0Thread_Entry()
Handles Control & Stream events
UVCAppThread_Entry()
Handles DMA transfers and GPIFII
state machine.
5.5 ビデオ ストリームを開始
5.1 アプリケーション スレッド
2 つのアプリケーション スレッドは、同時機能を有効にします。
UVCAppThread(アプリケーション)スレッドは映像データのス
トリーミングを管理します。これは、ストリーミングを開始する前
に、ストリームイベントを待ちストリーミング開始後に DMA バッ
ファをコミットし、各フレームまたはストリーミング停止後 FIFO
をクリーンアップします。
ファームウェアは、EP0 を介して輝度、PTZ、および PROBE/
COMMIT 制御などの UVC 固有の制御要求(SET_CUR、
GET_CUR、GET_MIN、GET_MAX)を処理します。クラス固
有の制御要求はアプリケーション スレッド内の
CyFxUVCApplnUSBSetupCB(CB=コールバック)関数を使
って処理されます。これらの制御要求のいずれかが FX3 によ
り受信される度に、この関数は、対応するイベントを発生させ、
その他の同時タスクを実行するために、すぐにメイン アプリ
ケーション スレッドを解放します。EP0Thread は、その後、ク
ラス固有の要求を処理するために、これらイベントでトリガしま
す。
5.2 初期化
UVCAppThread_Entry は、UART デバッグ処理機能を初期
化する用の CyFxUVCApplnDebugInit、FX3 の I2C ブロック
を初期化する用の CyFxUVCApplnI2CInit、残りの必要なブ
ロック、DMA チャネル、USB エンドポイントを初期化する用の
CyFxUVCApplnInit を呼び出します。
5.3 エニュメレーション
CyFxUVCApplnInit 関数では、CyU3PUsbSetDesc 関数
は FX3 が UVC デバイスとしてエニュメレーションすることを確
保 す る た め に 呼 び 出 さ れ ま す 。 UVC デ ィ ス ク リ プ タ は
cyfxuvcdscr.c ファイルで定義されます。これらディスクリプタ
は、非圧縮 YUY2 形式を使用して、ピクセルあたり 16 ビットを
送信する、30 FPS での 1280×720 ピクセルの解像度のイメー
japan.cypress.com
VLC Player、AMCAP、VirtualDub などの USB ホスト アプリ
ケーションは、ビデオを表示し、USB インターフェースと USB
代替設定組み合わせをビデオのストリーム専用のもの(通常、
インターフ ェース 0 代替設定 1 と呼ばれる)にセットし、
PROBE/COMMIT 制御要求を送信する目的で UVC ドライバ
の最上部に配置されます。この配置は、すぐに映像データをス
トリームするホストにより指示されます。ストリーム イベントに、
USB ホスト アプリケーションは、FX3 から画像データの要求を
開始します。FX3 がイメージ センサーから USB 3.0 ホストへ
のイメージ センサーからの画像データの送信を開始すること
を 前 提 に し ま す 。 フ ァ ー ム ウ ェ ア で は 、 UVCAppThread_
Entry 関数は無限ループです。ストリームがない時、メイン ア
プリケーション スレッドは、ストリーム エベントが発生するまで
このループを待ちます。
注:ストリーム イベントはない場合、FX3 はデータ転送を必要
としません。したがって、GPIF II ステートマシンはデータを転
送するために初期化される必要はありません。そうでない場合
は、ホスト アプリケーションが DMA バッファからデータを引き
出す前に DMA バッファのすべてが一杯になり、FX3 は不良フ
レームを送信してしまいます。したがって、GPIF II ステートマ
シンは、ストリーム イベントがある場合に限り、初期化する必
要があります。
FX3 がストリーム イベントを受け取った場合、GPIF II ステート
マシンを起動するためにメイン アプリケーション スレッドは
CyFxUvcAppGpifInit 関数を開始します。この関数では、
ファームウェアは CyU3PGpifLoad 関数を使って GPIF II パ
ラメータ(レジスタ設定および波形データ)を FX3 メモリにロー
ドします。その後、ファームウェアは CyU3PGpifSMStart 関
数 を 使 っ て GPIF II ス テ ー ト マ シ ン を 起 動 し ま す 。
cyfxgpif2config.h ファイルで定義される CyFxGpifConfig
構造をパラメータとして CyU3PGpifLoad 関数に渡します。開
始状態名と開始条件を引数として CyU3PGpifSMStart 関数
に 渡 し ま す 。 開 始 状 態 ( START ) お よ び 開 始 条 件
文書番号 001-92696 Rev. **
32
®
USB ビデオ クラス(UVC)フレームワーク内で EZ-USB FX3™ を使用してイメージ センサー インターフェースを実装する方法
(ALPHA_START)は cyfxgpif2config.h ファイルで定義さ
れます。節 3.6 に示しているように cyfxgpif2config.h ファイ
ルは GPIF II Designer ツールから生成されます。
注 : FX3 SDK API ガ イ ド は 、 CyU3PGpifLoad や
CyU3PGpifSMStart などの GPIF II 関連関数についての詳
細情報を含みます。
5.6 DMA バッファのセットアップ
UVC の仕様では、各 USB 転送(即ち、各 16KB の DMA バッ
ファ)に 12 バイトのヘッダを追加する必要があります。しかし、
FX3 アーキテクチャは、DMA ディスクリプタに関連付けられて
いる DMA バッファを 16 バイトの倍数のサイズを持っているこ
とを必要とします。
FX3 CPU が埋める目的として DMA バッファ内の 12 バイトを
予約すると DMA バッファ境界を 16 バイトの非倍数で配置し
ます。このため、DMA バッファ サイズが 16,384 から 12 では
なく 16 を引いた値です。よって、FX3 ファームウェアが追加す
る 12 バイトのヘッダを含まない DMA バッファ サイズは
16,384-16=16,368 バイトです。DMA バッファは、最初は 12
バイトのヘッダ、次は 16368 ビデオ バイト、そして最後は 4 個
の未使用バイトの順で構成されます。これにより、16×1024
バイトのパケット、または 16,384 バイトの最大の USB BULK
バースト サイズを使用できる DMA バッファが作成されます。
5.7 DMA バッファをビデオのストリーム中に処理
CyFxUVCApplnInit 機能は、コンシューマー イベントのコー
ルバック通知を備えた手動 DMA チャネルを作成します。この
通知はホストが読み出したデータ量を追随するために使用さ
れます。ビデオ フレームの送信の終了時に、DMA チャネルが
クリーンアップ プロセスの一部としてリセットされる。DMA チャ
ネルのリセットは、すべてのデータが DMA バッファから排出さ
れた後にのみ安全です。DMA チャネルがパイプ内に有効画
像フレーム データが存在している間リセットされた場合、デー
タは失われます。したがって、この通知は、ファームウェアの使
用可能性を維持する上で重要な役割を果たしています。
データをストリームしている時、ファームウェアは、DMA バッ
ファを処理します。メイン アプリケーション スレッドでは、FX3
は CyU3PDmaMultiChannelGetBuffer を使って DMA バッ
ファが生成されたかを確認します。GPIF II プロデューサー
DMA バッファが転送される、または強制的に FX3 CPU に
よってラップアップされた場合、DMA バッファは、FX3 CPU に
使用可能になります。アクティブ フレーム期間中に、イメージ
センサーは、データをストリームし、GPIF II は、一杯の DMA
バッファを生成します。この時、FX3 CPU は USB に 16,380
バイトのデータを転送します。
フレーム送信の終わりに、通常、最後の DMA バッファが部分
的に一杯にされます。この場合、生成イベントをトリガするため
に フ ァ ー ム ウ ェ ア は 強 制 的 に プ ロ デ ュ ー サ ー 側 の DMA
バッファをラップアップする必要がありますし、その後
適切なバイト数を DMA バッファから USB に転送します。
japan.cypress.com
GPIF II が生成する DMA バッファの強制ラップアップは、
GPIF II コ ー ル バ ッ ク 関 数 CyU3PdmaMultiChannel
SetWrapUp で実行されます。CyFxGpifCB のコールバック
関数は、GPIF II が CPU 割り込みを設定した時にトリガされま
す。GPIF II の状態図に示すように、この割り込みはフレーム
有効信号がデアサートされた時に生じます。hitFV 変数は、イ
メージ センサーからの取り込まれたフレームが終了したことを
示すために、この時点で設定されます。
UVC ヘッダは、フレーム識別子に関する情報及びフレーム終
了マーカーを持っています。フレーム送信の終わりには、FX3
フ ァ ー ム ウ ェ ア は 2 番 目 の UVC ヘ ッ ダ バ イ ト
(「CyFxUVCAddHeader」を参照)のビット 1 をセットし、ビット
0 をトグルします。
変数 prodCount と consCount はそれぞれ、すべての DMA
バッファの生成と消費のイベントを追随します。これら変数は、
すべてのデータが FX3 FIFO から取り出されることを確保する
ために DMA バッファを追随することに役立ちます。ファームウ
ェアは USB 経由でのフレーム送信の終了時にチャネルをリセ
ットするためにこれらの変数を使用しています。
5.8 フレーム送信の終了時のクリーンアップ
フレーム送信の終了時に、GPIF II ステートマシンは、前述し
た一連のイベントを開始する CPU 割り込みを生成します。
ファームウェアは、UVCAppThread_Entry 関数内のループ
を使用して USB 側が DMA バッファのデータを取り出すことを
待ちます。(GPIF コールバック関数により設定される)hitFV が
設 定 さ れ 、 最 後 の DMA バ ッ フ ァ は USB に 転 送 さ れ 、
prodCount が consCount に等しくなるとすぐに、ファームウェ
アは次の操作を実行します。




(その FIFO をリセットする)DMA チャネルをリセット
UVC ヘッダ FID ビットをトグルする
START 状態で GPIF II ステートマシンを開始するために
CyU3PGpifSMSwitch 関数を呼び出す
FV が再度ハイ レベルになることを待機
5.9 ビデオのストリームを終了
次の 3 つのイベントで画像ストリームは終了することがありま
す:カメラがホストから切断されたり、USB ホストプログラムが
閉じたり、USB ホストが FX3 にリセット要求または一時停止要
求を発行したりすることです。これらのアクションはすべて、
CY_FX_UVC_STREAM_ABORT_EVENT イベントをトリガし
ます( CyFxUVCApplnAbortHdlr 関数を参照)。FX3 FIFO
にデータが存在しない場合、このアクションは常に発生しませ
ん。これは、適切なクリーンアップが必要であることを意味しま
す。ファームウェアはストリーム関連変数と UVCAppThread_
Entry ループ内の DMA チャネルをリセットします。ストリーム
を不要としないため、CyU3PGpifSMSwitch 関数を呼び出し
ません。ファームウェアはその後、次のストリーム イベントが発
生することをを待ちます。
文書番号 001-92696 Rev. **
33
®
USB ビデオ クラス(UVC)フレームワーク内で EZ-USB FX3™ を使用してイメージ センサー インターフェースを実装する方法
アプリケーションが終了時、ファームウェアは Windows プラッ
トフォーム上で関数のクリア要求を発行したり、Mac プラット
フォーム上で代替設定=0 のインターフェースの設定要求を発
行します。この要求が受け取られるとストリームが停止します。
こ の 要 求 は 、 CyFxUVCApplnUSBSetupCB 関 数 で 、
switch-case 文 の CY_U3P_USB_TARGET_ENDPT と
CY_U3P_ USB_SC_CLEAR_FEATURE 要求によって処理
されます。
2.
次の画面で「Browse my computer for driver software」
を選択します。
3.
以下の画面で「Let me pick from a list of device drivers
on my computer」を選択します。
4.
次に「Next」をクリックします。
5.10 「デバッグ」インターフェースを追加
本節では、デバッグや他のカスタムの目的で使用するカメラ ア
プリケーションに 3 番目の USB インターフェースを追加する方
法を示します。
uvc.h ファイル内の#define USB_DEBUG_INTERFACE の
switch 文は cyfxuvcdscr.c、uvc.h および uvc.c ファイル内
のコードを有効にします。提供される例は、I2C を介してイメー
ジ センサー レジスタを読み書きします。
5.10.1 デバッグ インターフェースの情報
2 つのバルク エンドポイントは、このインターフェース用に定義
されます。EP 4 OUT がデバッグ コマンド BULK エンドポイン
トとして構成され、EP 4 IN がデバッグ応答 BULK エンドポイ
ントとして構成されます。デバッグインターフェースが有効にな
るファームウェアが実行すると、FX3 はエニュメレーション中に
3 つのインターフェースを報告します。最初の 2 つは、UVC 制
御インターフェースおよびストリーム インターフェースであり、3
つ目は、デバッグ インターフェースです。3 番目のインター
フェースは、FX3 SDK の一部として提供される CyUSB3.sys
ドライバに結合される必要があります。次の指示に従って、ドラ
イ バ を イ ン ス ト ー ル す る こ と が で き ま す 。 ( 64 ビ ッ ト 版 の
Windows7 の シ ス テ ム は 、 例 と し て 使 用 さ れ ま す 。 XP
ユーザーは、VID/ PID を含めるように.inf ファイルを変更しな
ければなりません。その後、修正された.inf ファイルを使ってこ
のインターフェースに cyusb3.sys ドライバをバインドします。
1.
デバイス マネージャを開いて「Other devices」の下の
FX3(または同等のもの)を右クリックし、「Update Driver
Software…」を選択します。
japan.cypress.com
文書番号 001-92696 Rev. **
34
®
USB ビデオ クラス(UVC)フレームワーク内で EZ-USB FX3™ を使用してイメージ センサー インターフェースを実装する方法
5.
ドライバを選択するステップへ進むために「Have Disk…」
をクリックします。
6.
<SDK installation>\<version>\driver\bin\<OS>\x86
または\x64 フォルダ内の cyusb3.inf ファイルをブラウズ
して「OK」をクリックします。
7.
OS バージョンを選択して「Next」をクリックしてインストー
ルのステップへ進みます。
ドライバが 3 番目のインターフェースにバインドされた後、デバ
イスはサイプレスの USB コントロール センタ アプリケーション
に表示されます。ユーザーはここからベンダ固有のデバイスと
しての FX3 ファームウェアにアクセスすることができます。デ
バッグインターフェースの現在の実装は EP4-OUT コマンドお
よび EP4-IN 応答エンドポイントを使用してイメージ センサー
レジスタの読み書きを可能にします。これらエンドポイントは、
下図に示しているように、<FX3 デバイス名>の下のコントロー
ル セ ン タ で  Configuration 1 Interface 2  Alternate
Setting 0 を選択してアクセスされます。コマンドを送信した後、
「Data Transfer」タブで、コマンドを送信したり応答を取得した
りします。
5.10.2 デバッグ インターフェースの使用
4 つのコマンドは、デバッグ インターフェースで実装されます:
単独読み出し、順次読み出し、単独書き込み、順次書き込み。
ここではエラー チェックがないので、コマンドを慎重に入力して
ください。ユーザーは適切な機能を確保するために、エラー
チェックを実装することができます。I2C レジスタは 16 ビット幅
で 16 ビットを使ってアドレス指定されます。
単独読み出し:
1.
8.
警告ダイアログ ボックスが表示されると、その「Yes」ボタ
ンをクリックしてください。
japan.cypress.com
コマンド エンドポイントを選択し、Data Transfers タブの
下に 16 進数でコマンドを入力します。単独読み出しの
フォーマットは 0x00 <レジスタ アドレス上位バイト> <レジ
スタ アドレス下位バイト>です。下図にレジスタ アドレス
0x3002 用の読み出しコマンドを示しています。16 進数
データ ボックスに入力中にスペースを使用しないでくださ
い 。 例 え ば 、 16 進 数 デ ー タ フ ィ ー ル ド を ク リ ッ ク し 、
「003002」と入力します。
文書番号 001-92696 Rev. **
35
®
USB ビデオ クラス(UVC)フレームワーク内で EZ-USB FX3™ を使用してイメージ センサー インターフェースを実装する方法
5.
2.
応答の第 1 バイトは状態を示します。状態=0 は、コマンド
が渡されたことを意味し、その他のの値は、コマンドが失
敗したことを意味します。次のバイトは、リードバックされ
たレジスタ値が 0x0004 であることを示します。この例で
は、状態非ゼロであり、バイトの残りの部分は前回の転送
からの古い値である、失敗した転送を示しています。
「Transfer Data-Out」をクリックしてコマンドを送信します。
順次読み出し:
3.
1.
コマンド エンドポイントを選択し、Data Transfers タ
ブの下に 16 進数でコマンドを入力します。順次読み
出しのフォーマットは 0x00 <レジスタ アドレス上位バ
イト> <レジスタ アドレス下位バイト> <N>です。下図
にレジスタ アドレス 0x3002 から始まる 4 つ(N=4)の
レジスタ用の読み出しコマンドを示しています。
2.
この場合、応答のための「Bytes to Transfer」(転送
するバイト)は(N*2+1)=9、です。下図では、FX3 が
読み出した値を示しています。
単独読み出しのコマンドの応答を読み出すために応答エ
ンドポイントを選択し、「Bytes to Transfer」を「3」にセット
します。
4. 「Transfer Data-IN」をクリックして応答を受け取ります。
japan.cypress.com
文書番号 001-92696 Rev. **
36
®
USB ビデオ クラス(UVC)フレームワーク内で EZ-USB FX3™ を使用してイメージ センサー インターフェースを実装する方法
単独書き込み:
順次書き込み:
1.
コマンド エンドポイントを選択し、Data Transfers タ
ブの下に 16 進数でコマンドを入力します。単独書き
込みのフォーマットは 0x01 <レジスタ アドレス上位
バイト> <レジスタ アドレス下位バイト> <レジスタ値
上位バイト> <レジスタ値下位バイト>です。下図にレ
ジスタ アドレス 0x3002 での 0×0006 の値を書き込
むための書き込みコマンドを示しています。
1.
コマンド エンドポイントを選択し、Data Transfers タ
ブの下に 16 進数でコマンドを入力します。N 数のレ
ジスタを書き込むための順次書き込みのフォーマット
は 0x01 <レジスタ アドレス上位バイト> <レジスタ ア
ドレス下位バイト> ((<レジスタ値上位バイト> <レジ
スタ値下位バイト>)* N 回)です。下図に、レジスタ
0x3002、0x3004、0x3006(N= 3)への書き込み値
0×0006、×0008、0x03C0 を示しています。
2.
単独書き込みの応答は 3 個のバイトを含みます:<
状態> <レジスタ値上位バイト> <レジスタ値下位バ
イト>。これらレジスタ値が書き込まれた後に読み戻
されるため、ユーザーは同様な値がコマンドで送信さ
れたことを観察できます。
2.
応答が<状態>(<レジスタ値上位バイト> <レジスタ
値下位バイト>)* N 値。この例では、転送する総バイ
ト数は(2*N+1)=7 です。
6. ハードウェアのセットアップ
現時点のプロジェクトは、FX3 DVK、アプティナのイメージ セ
ンサーMT9M114、および相互接続基板を含むセットアップで
テストされました。これらのコンポーネントの入手方法の詳細
は、 サイ プレスのウェブサイ ト上の EZ-USB® FX3™ HD
720p Camera Kit に掲載されており、以下でまとめられていま
す。
6.1 ハードウェアの調達
1.
japan.cypress.com
アプティナに関する NDA を締結します(迅速応答のため
に [email protected] メールをお送りください)NDA をお
持ちになる場合、[email protected] にお送りください。サ
イプレスは NDA 確認後にプロジェクト用のアプティナ固
文書番号 001-92696 Rev. **
37
®
USB ビデオ クラス(UVC)フレームワーク内で EZ-USB FX3™ を使用してイメージ センサー インターフェースを実装する方法
2.
3.
4.
5.
図 48. 3 基板結合の 720P カメラ アセンブリ
有の sensor.c および sensor.h ソースファイルを提供し
ます。
アプティナ MT9M114 イメージ センサー ヘッドボードを
アプティナ社販売代理店から購入します。
EZ-USB FX3 開発キット(CYUSB3KIT-001)を購入しま
す。
相互接続基板を入手したい場合、[email protected] で
サイプレスまでご連絡ください。
SuperSpeed 性能を評価するために、USB 3.0 ホスト対
応のコンピュータを使用します。
6.2 FX3 DVK 基板のセットアップ
以下の手順を使用してビデオ アプリケーションをテストするた
めの基板を準備します。
1.
図 47 に示しているように FX3 DVK 基板上にジャンパを
搭載します。この図で強調表示されていないジャンパを
搭載しないでください。
図 47. FX3 DVK ジャンパ
4. DVK 同根の USB3.0 ケーブルを使って FX3 DVK 基板
を USB コンピュータに差し込みます。
5. FX3 SDK の一部として提供された USB コントロール セ
ンタ アプリケーションを使用して基板にファームウェアを
ロ ー ド し ま す 。 詳 細 手 順 は 、 「 AN75705, “Getting
Started with EZ-USB FX3”」を参照してください以下は
簡単な手順です。
a.
USB コ ン ト ロ ー ル セ ン タ を 開 始 し ま す 。 FX3
EV 基板を差し込むと FX3 EV 基板は USB ブート
ローダ(図 49 を参照)として認識されます。
図 49. FX3 がブートローダとしてエニュメレーションする
b.
2. 相互接続基板を FX3 DVK J77 に差し込みます。相互接
続基板上のコネクタは独特のもので、ソケットが正しい向
きにのみ合わせるように調整されます。
3. 相互接続基板にイメージ センサー モジュールを接続しま
す。図 48 に 3 基板結合のアセンブリを示します。
japan.cypress.com
文書番号 001-92696 Rev. **
Program>FX3>RAM を選択し、このアプリケーシ
ョン ノートに添付される cyfxuvc.img ファイルへ
移動します(図 50 を参照してください)。
図 50. コードを FX3 RAM にロード
38
®
USB ビデオ クラス(UVC)フレームワーク内で EZ-USB FX3™ を使用してイメージ センサー インターフェースを実装する方法
7. UVC ベースのホスト アプリケーション
様々なホスト アプリケーションにより、UVC デバイスからビデ
オを表示して取り込むことができます。通常、VLC メディア プ
レーヤーを選択します。他の広く使用されている Windows ア
プリケーションは AMCAP です。AMCap バージョン 8.0 以降
が ス ト リ ー ム レ ン ダ リ ング を減 速 す るこ と が あ り ま す が、
AMCap バージョン 8.0 はストリーム中にデモされた安定性を
持っているため、AMCAP バージョン 8.0 をお勧めします。2つ
の追加の Windows アプリケーションは VirtualDub(オープン
ソース アプリケーション)と Debut Video Capture ソフトウェア
です。Linux システムは、ビデオをストリームするために V4L2
ドライバと VLC メディア プレーヤーを使用することができます。
VLC メディア プレーヤーは、Web からダウンロードすることが
できます。MAC プラットフォームは、ビデオをストリームするた
めに、UVC デバイスとのインターフェースの作成に FaceTime、
iChat、Photo Booth、および Debut Video Capture ソフトウェ
アを使用できます。
5. デバイスを選択します FX3 (Direct Show)。画像の
ストリームが開始されます。
6. 右下の値は、実際のフレームレートを示します。
7.1 デモの実行
図 48 に示している 720p キットのプリコンパイルされたコード
イメージ ファイルは http://www.cypress.com/?docID=41913
に掲載されています。
以下の手順に従ってこのコードを実行します。
1. セクション 6.1.2 で説明したように FX3 UVC セット
アップにプリコンパイルされたファームウェア イメー
ジをロードします。
2. この時点で、セットアップは、UVC デバイスとして再エ
ニュメレーションします。オペレーティング システムは
UVC ドライバをインストールし、追加のドライバを必
要としません。
3. ホスト アプリケーション(VirtualDub など)を開きます。
4. ファイルを選択します Capture AVI
7. VideoCapture Pin は、異なったサポートされている
解像度の内から対象解像度を選択し、現時点ではど
の解像度がアクティブであるかを確認するために使
用することができます。
8.
japan.cypress.com
文書番号 001-92696 Rev. **
位置)VideoLevels は、(スライダ位置を変更して
値を変更することにより)明るさ、または他のサポート
されている制御コマンドを変更するために使用できま
す。 Video->Capture Filter の下に追加の制御コマ
ンドを検索します。
39
®
USB ビデオ クラス(UVC)フレームワーク内で EZ-USB FX3™ を使用してイメージ センサー インターフェースを実装する方法
9. 2 個のイメージ センサー同士を接続
3 次画像処理又は運動追随などのホスト アプリケーションは、
2 個のイメージ センサーから映像データを同時にストリームす
る FX3 を必要とします。センサーが異なった場合、フォーマット
を調整し、単一の映像データ チャネルを合成するために、
イメージ センサー モジュールと FX3 間に FPGA を挿入しなけ
ればなりません。2 個の異なったイメージ センサーのそのよう
なセットアップは、このアプリケーション ノートの限界を超えま
す。
8. トラブルシューティング
より実用的なアプローチは、同一のイメージセンサーを使用し
ています。このアプローチは、このセクションで説明します。
画面が黒くなった場合は、これらのデバッグ手順を試してくださ
い。
1.
2.
3.
4.
5.
6.
uvc.h フ ァ イ ル に は 「 DEBUG_PRINT_FRAME_
COUNT」switch 文があります。FX3 がイメージをストリー
ムしているか否かを調べるために、それを有効にします。
この switch 文は、UART がフレームをある数量でプリント
することを可能にします。FX3 の DVK 上に搭載されたジ
ャンパ J101、J102、J103、および J104 上のピン 1 とピ
ン 2 を接続します。これは FX3 DVK 上の RS232 ポート
へ UART ピンを接続します。UART ケーブルまたは USB
と UART 間ブリッジを介して FX3 DVK 上の UART ポー
トを PC に接続します。ハイパーターミナル Tera Term、
または PC 上の COM ポートにアクセスする別のユーティ
リティを開きます。転送する前に UART コンフィギュレー
ションを 115,200 ボー、パリティなし、1 ストップビット、フ
ロー制御なし、8 ビット データに設定します。これら設定は
デバッグ プリントを取り込むのに十分です。PC ターミナ
ル プログラムで、増分のフレーム カウンタが表示されな
い場合は、FX3 とイメージ センサー(GPIF またはセン
サー制御/初期化)間のインターフェースに問題がある可
能性があります。
増分のフレーム カウンタのプリントが表示された場合、出
力中のイメージ データを検証する必要があります。USB
配線は、フレームごとに転送されるデータ量を表示するこ
とができます。
フレームごとに送信されるデータの総量を確認するために、
ヘ ッ ダ に 設 定 さ れ た フ レ ーム 終 了 ビ ッ ト を 持 つ デ ー タ
パケットを検索します。(ヘッダの 2 番目のバイトはフレー
ム終了の転送用の 0x8e または 0x8f です)。(UVC ヘッ
ダを含まない)フレームで転送された合計の画像データは
次の式で計算されます:幅*高さ*2。
これは、USB 配線からの量でない場合、イメージ セン
サーの設定、または GPIF のインターフェースに問題が
発生します。
画像データの総量が正しく、ホスト アプリケーションがまだ
何の画像を表示しない場合は、ホスト コンピュータを変更
してください。
問題がまだ解決されない場合は、サイプレステカニカル
サポート ケースを作成してください。
japan.cypress.com
図 51 に接続の詳細を示しています。緑色のブロックは、
GPIF{SP} II 内部にあり、赤のブロックが FX3、低帯域幅の周
辺(I2C/GPIO)の一部です。同一のフレーム タイミングを達成
するために 2 つのセンサーが同期され、16 ビットのデータ バ
ス上で 8 ビットのビデオ ストリームが GPIF II に同時に入力さ
れることは理想的な場合です。
図 51. 2 個のイメージ センサーを FX3 に接続
CTL 12
CTL 11
D0 - D7
GPIO 16
I2C
FX3
GPIO
GPIO
CTL 10
CTL 9
D8 - D15
CTL 8
Frame Valid 1
Line Valid 1
Data bus
PCLK 1
Image Sensor 1
I2C control
Reset/Standby
Clock
I2C Address selector
Frame Valid 2
Line Valid 2
Image Sensor 2
Data bus
PCLK 2
図 51 は、2 個のイメージ センサーの以下の状態を前提にしま
す。
1.
2.
各イメージ センサーのバス幅は 8 ビットです。よって、
GPIF II バス幅が 16 ビットになります。
2 個のイメージ センサーが同期されます。これは、両方の
イメージ センサーが同じクロック、LV 及び FV 遷移、ピク
セル タイミングを使用していることを意味します。言い換
えれば、両方のイメージ センサーからのフレームを正確
に重ね合わせることができます。いくつかのイメージ セン
サーは、2 つのビデオ ストリームを同期させるために使用
できる外部トリガ入力を備えています。他のイメージ セン
文書番号 001-92696 Rev. **
40
®
USB ビデオ クラス(UVC)フレームワーク内で EZ-USB FX3™ を使用してイメージ センサー インターフェースを実装する方法
9.1 UVC を介してインターリーブ画像を転送
640
B
A
ディスクリプタはまだ 640×480 のイメージ サイズを報告してい
ます。倍増されたデータ サイズが A イメージを Y データに、B
イメージを U および V データに置き換えることにより収容され
ます。
フレーム当たりのバイト数は以下のように計算することができ
ます。
フレーム当たりのバイト数=ピクセル当たりのバイト数 x イメー
ジ センサー数×解像度
ここで:
解像度 = 幅(ピクセル単位)x 高さ(ピクセル単位)
例:
フレーム当たりのバイト数=1x2x640x480=614,400 バイト
9.1.2 例 2:2 個の 640x480 カラー センサー
2 つのカラー センサーが 640×480 の解像度で YUY2 データ
を送信することを前提にします。FX3 は、フレームごとに2枚の
完全なカラー画像を受信します(図 53 を参照)。
図 53. FX3 は、2 枚のカラー画像を受信
640
480
UVC 仕様は、1 つの画像を送信するのに使用されるイメージ
センサーの数を識別できません。それは、フレームの幅と高さ、
フレーム当たりのバイト数の合計の画像パラメータ セットにの
み対応します。複数の画像センサーに対応するために、UVC
ドライバはドライバが内部整合性の試験を実行してそれに合
格することができるように修正されたディスクリプタを読み出さ
なければなりません。これらの整合性の試験に不合格の場合、
UVC ドライバは、ホストアプリケーションに画像データを渡すこ
とができません。よって、アプリケーションは失敗になります。
UVC ドライバが追加フレームをシングル イメージ センサーと
して認識するようにディスクリプタを修正する必要があります。
図 52. FX3 が両方のイメージ センサーから受信するもの
480
サーは、別の同期方法を使用することがあります。詳細
は、適用可能なセンサーのデータシートを参照してくださ
い。
2
3. 両方のイメージ センサーは、I C を設定に使用します。こ
のアプリケーション ノートで使用されるイメージ センサー
は、イメージ センサー モジュール間の同期を達成するこ
とを目的として、正確に同時に書き込まれるために I2C 制
御レジスタを必要とします。これは、FX3 GPIO ピンを使
用して、2 個のセンサーの内のいずれかの I2C アドレスを
制御することにより達成されます。FX3 は、I2C の書き込
みを介して同時に 2 個のイメージ センサーを構成します。
FX3 は、設定可能なアドレスピンを使ってイメージ セン
サー上の異なる I2C アドレスに切り替えることにより、
個々のセンサーから読み出します。
4. 各センサーのリセット信号は、同じ FX3 GPIO 出力ピンに
より駆動する必要があります。同様に、各センサーのスタ
ンバイ端子が存在するなら、別の FX3 GPIO 出力ピンを
共有する必要があります。
5. 自動設定は、イメージ センサーにおいて無効にされます。
例えば、自動露光、オートゲイン、オートホワイト バランス
などの機能は、両方のセンサーにおいてオフにされます。
センサーをオフにすると、イメージ センサー上の統合と任
意の画像処理は同じ時間を要することが保証されます。
そ の 結 果 、 両方 の セ ン サ ー か ら の フ レ ーム は 同 時 に
イメージ センサーから出力されます。
接続図に示しているように、フレーム有効 2 と、ライン有効 2、
及び PCLK の信号は、FX3 に接続されていますが、イメージ
センサーが同期化されることを前提にするため、GPIF II ブロッ
クにより使用されません。これら信号が FX3 に接続されている
ため、FX3 は信号を監視してデバッグおよび開発時にイメージ
センサー同士間の同期の精度をチェックすることができます。
詳細方法は以下の 2 つの例に示しています。
9.1.1 例 1:2 個の 640×80 モノクロ センサー
両 方 の イ メ ー ジ セ ン サ ー は 、 640×480 モ ノ ク ロ
(ピクセル当たり 1 バイト)のデータを提供します。FX3 は、図
52 に示しているように、フレーム毎に2つの完全な画像を同時
に受信します。
japan.cypress.com
例 1 との唯一の違いは、YUY2 形式の各ピクセルが現時点で
は 1 バイトではなく 2 バイトを使用していることです。ピクセル
の倍増に対応するために、報告された画像サイズも倍になり
ます(図 54 を参照)。
文書番号 001-92696 Rev. **
41
®
USB ビデオ クラス(UVC)フレームワーク内で EZ-USB FX3™ を使用してイメージ センサー インターフェースを実装する方法
図 54. 報告された画像サイズ
1280


480

各ピクセルは、現時点では 2 バイトを占めているため、フレー
ム当たりのデータ量は、次の式で計算されます。

フレーム当たりのバイト数=2x2x640x480=1,228,800 バイト
任意のフレーム幅とフレーム高さは、ピクセルの倍増を反映す
るなら報告されることがあります。1 次元のみを倍にすると、ダ
ウンストリームの計算が簡素化されます。高さを変更せずに、
幅を倍にすることは、アプリケーション画像処理を簡素化する、
垂直線を重ね合わせる利点をもたらします。
レジスタを読み出す時、排他的アクセスを必要としま
す。
GPIO を制御する追加コードはイメージ センサーのス
タンバイ又は低消費電力モードを制御します。
PROBE/COMMIT 制御構造を変更して修正されたフ
レームレート及びフレーム解像度を反映します。
UVC 固有の高速 USB コンフィギュレーション ディス
クリプタと SuperSpeed USB コンフィギュレーション
ディスクリプタのフレームとフォーマットを変更します。
この変更の目的は、修正されたフレームの解像度、
フレームレート、幅対高さ比を報告することです。
GPIF II ディスクリプタを変更して、バス幅を増加させ、
バス幅に応じてカウンタの制限を更新します。これら
変更は、ヘッダファイルを生成するために、GPIF II
Designer で行われます。変更が発効することを確保
するために、プロジェクトにこの新規作成のファイル
をコピーするのを忘れないでください。
これらのディスクリプタ変更は、二重画像が任意の 2 つの連続
バイトが異なる画像センサーから送信されるインターリーブ方
式でイメージ センサーからホスト アプリケーションに搬送する
ことを可能にします。
上記の変更は、UVC ドライバの整合性試験に合格してドライ
バがホスト アプリケーションに映像データを渡すことを可能に
します。この方式でストリームされた映像データは直接に表示
された時よく観察して理解できるものではありません。実装の
賢個性チェックを実行するために、標準 UVC ホスト アプリ
ケーションを使用することができます。ただし、イメージは非標
準の方式でストリームされるため、アプリケーションはそれらイ
メージを正しく表示しません。カスタム アプリケーションは、こ
れらのイメージを分離し、インターリーブされたビデオから有用
な情報を表示し、計算するためにビルドされる必要があります。
9.2 ファームウェア変更のチェックリスト
つまり、所与のファームウェア例を変更している間、必要な変
更が全て実施されたことを確認するために、次の手順を行って
ください。


イメージセンサー制御:例は、制御インターフェースと
しての参照用の I2C コードを持っています。これを修
正する必要がある場合もあるし、別種のインターフェ
ースを必要とする場合もあります。
GPIO を制御する追加コードは制御インターフェース
のためのイメージ センサーセレクタとして機能してい
ます。FX3 がこのアプリケーション ノートで使用され
るセンサーに書き込む場合、書き込まれたメッセージ
は両方のイメージ センサーへのマルチキャストメッ
2
セージであるが、FX3 はイメージ センサーから I C
japan.cypress.com
文書番号 001-92696 Rev. **
42
®
USB ビデオ クラス(UVC)フレームワーク内で EZ-USB FX3™ を使用してイメージ センサー インターフェースを実装する方法
10. 要約
このアプリケーションノートでは、USB ビデオ クラスに準拠した
イメージ センサーは、どのようにサイプレスの EZ-USB FX3
を使用して実装できるか説明します。特に、以下のことを示し
ます:

ホスト アプリケーションとドライバが UVC デバイスと対話
する方法


UVC デバイスが UVC 固有の要求を管理する方法

ホストアプリケーションでビデオのストリームを表示し、カメ
ラのプロパティを変更する方法
標準イメージ センサーからデータを受信するために GPIF
II Designer を使用して FX3 インターフェースをプログラム
する方法
japan.cypress.com

デバッグの目的で、UVC デバイスに USB インターフェー
スを追加する方法

オープンソースのホスト アプリケーション プロジェクトを含
む様々なプラットフォーム上で使用可能なホスト アプリ
ケーションを検索する方法

UVC を使って複数イメージ センサーを接続したり、外部
で同期化させたり、それらセンサーから同期にストリーム
したりする方法

必要に応じて、FX3 ファームウェアのトラブルシューティン
グとデバッグする方法
11. 著者について
レジスタ名:
Karnik Shah
役職:
アプリケーション エンジニア
文書番号 001-92696 Rev. **
43
®
USB ビデオ クラス(UVC)フレームワーク内で EZ-USB FX3™ を使用してイメージ センサー インターフェースを実装する方法
12. 変更履歴
ドキュメント名: USB ビデオ クラス (UVC) フレームワーク内で EZ-USB® FX3™ を使用してイメージ センサー インターフェースを実装する方法 AN75779
ドキュメント番号: 001-92696
版
ECN
改版者
発行日
**
4393308
HZEN
29/05/2014
japan.cypress.com
変更内容
これは英語版 001-75779. Rev *D を翻訳した日本語版 Rev. **です。
文書番号 001-92696 Rev. **
44
®
USB ビデオ クラス(UVC)フレームワーク内で EZ-USB FX3™ を使用してイメージ センサー インターフェースを実装する方法
ワールドワイドな販売と設計サポート
サイプレスは、事業所、ソリューションセンター、メーカー代理店、および販売代理店の世界的なネットワークを保持しています。お客様
の最寄りのオフィスについては、サイプレスのロケーション ページをご覧ください。
PSoC®ソリューション
製品
車載用
cypress.com/go/automotive
psoc.cypress.com/solutions
クロック&バッファ
cypress.com/go/clocks
PSoC 1 | PSoC 3 | PSoC 4 |PSoC 5LP
インターフェース
cypress.com/go/interface
サイプレス開発者コミュニティ
照明&電源管理
cypress.com/go/powerpsoc
cypress.com/go/plc
メモリ
cypress.com/go/memory
光学式ナビゲーションセンサ
ー
cypress.com/go/ons
PSoC
cypress.com/go/psoc
タッチ センシング
cypress.com/go/touch
USB コントローラ
cypress.com/go/usb
ワイヤレス/RF
cypress.com/go/wireless
コミュニティ | フォーラム | ブログ | ビデオ | トレーニング
テクニカル サポート
cypress.com/go/support
EZ-USB® and FX3™ は、サイプレスセミコンダクタ社の登録商標です。 本書で言及するその他すべての商標または登録商標は、各社の所有物です。
Cypress Semiconductor
198 Champion Court
San Jose, CA 95134-1709
Phone : 408-943-2600
Fax : 408-943-4730
Website : www.cypress.com
© Cypress Semiconductor Corporation, 2012–2014. 本文書に記載される情報は、予告なく変更される場合があります。Cypress Semiconductor Corporation
(サイプレス セミコンダクタ社)は、サイプレス製品に組み込まれた回路以外のいかなる回路を使用することに対して一切の責任を負いません。サイプレス セミコ
ンダクタ社は、特許またはその他の権利に基づくライセンスを譲渡することも、または含意することもありません。サイプレス製品は、サイプレスとの書面による合
意に基づくものでない限り、医療、生命維持、救命、重要な管理、または安全の用途のために使用することを保証するものではなく、また使用することを意図したも
のでもありません。さらにサイプレスは、誤動作や故障によって使用者に重大な傷害をもたらすことが合理的に予想される生命維持システムの重要なコンポーネ
ントとしてサイプレス製品を使用することを許可していません。生命維持システムの用途にサイプレス製品を供することは、製造者がそのような使用におけるあら
ゆるリスクを負うことを意味し、その結果サイプレスはあらゆる責任を免除されることを意味します。
このソースコード(ソフトウェアおよび/またはファームウェア)はサイプレス セミコンダクタ社(以下「サイプレス」)が所有し、全世界の特許権保護(米国およびその
他の国)、米国の著作権法ならびに国際協定の条項により保護され、かつそれらに従います。サイプレスが本書面によりライセンシーに付与するライセンスは、個
人的、非独占的かつ譲渡不能のライセンスであり、適用される契約で指定されたサイプレスの集積回路と併用されるライセンシーの製品のみをサポートするカス
タム ソフトウェアおよび/またはカスタム ファームウェアを作成する目的に限って、サイプレスのソースコードの派生著作物をコピー、使用、変更そして作成するた
めのライセンス、ならびにサイプレスのソースコードおよび派生著作物をコンパイルするためのライセンスです。上記で指定された場合を除き、サイプレスの書面に
よる明示的な許可なくして本ソースコードを複製、変更、変換、コンパイル、または表示することは全て禁止します。
免責条項:サイプレスは、明示的または黙示的を問わず、本資料に関するいかなる種類の保証も行いません。これには、商品性または特定目的への適合性の黙
示的な保証が含まれますが、これに限定されません。サイプレスは、本文書に記載される資料に対して今後予告なく変更を加える権利を留保します。サイプレス
は、本文書に記載されるいかなる製品または回路を適用または使用したことによって生ずるいかなる責任も負いません。サイプレスは、誤動作や故障によって使
用者に重大な傷害をもたらすことが合理的に予想される生命維持システムの重要なコンポーネントとしてサイプレス製品を使用することを許可していません。生命
維持システムの用途にサイプレス製品を供することは、製造者がそのような使用におけるあらゆるリスクを負うことを意味し、その結果サイプレスはあらゆる責任
を免除されることを意味します。
ソフトウェアの使用は、適用されるサイプレス ソフトウェア ライセンス契約によって制限され、かつ制約される場合があります。
japan.cypress.com
文書番号 001-92696 Rev. **
45