2014年01月17日

FX3プログラミング Hello Worldを出してみよう

プログラミングを習うときに必ず出される最初の例題は“Hello World”と出力させるというものです。いったいなぜ“Hello World”なのか?検索すると諸説あるようですが・・・。

そんなことはさておき、いままでの開発者ブログでは高速化などのどちらかというと、活用的な記事を掲載してきましたが、今回は初級編として“Hello World”を出力します。

さて、“Hello World”を出力するといっても相手はハードウェアです。Windows上で動作するアプリケーションのように画面上に文字列を単純に出力することはできません。しかし、FX3のAPIのなかにデバック用UARTに文字列を出力する「CyU3PDebugPrint」関数があります。
今回は、この関数を使用してPCのコンソール上に文字列を出力したいと思います。
また、この過程を通してmain関数内で必須となる決まり事がありますのでその流れも掲載したいと思います。
(main関数内での必須の決まりごとは、アプリケーションノートAN75705(日本語訳版)のP9からの 「FX3 ソリューション概要」に記載があります。そちらも合わせてご確認ください。)

「CyU3PDebugPrint」関数はUART通信を通して、任意の文字列を出力する関数です。詳細はFX3 SDK Firmware API Guideをご確認ください。また、UARTについては多くのWebサイトに解説がありますのでここでの説明は省略します。

まずは、今回のテストで使用したシステム構成です。


テスト構成図.png



テスト用のボードと、文字列出力確認用PCを使用しています。FX3ファームウェアの更新などを行うのに、USB3.0にてテスト用ボードとPCを接続します。併せて、文字列出力確認のためにUARTとPCを接続しています。
また実際のテスト用のボードはこちらです。


SVM.jpg


ADV7511FPGAも搭載されておりますが、今回はFX3だけを使用しています。
システム構成は以上となります。

では早速FX3のファームウェアのプログラミングを開始していきます。
今回、参考にするのはFX3 SDKフォルダ内にある下記サンプルプログラムをベースに作成を行います。
\firmware\serialif_examples\cyfxusbi2cregmode

このサンプルプログラムのメインのソースコードは「cyfxuartlpregmode.c」になります。cyfxuartlpregmode.cには主に4つの関数しかありません。

1. main
2. CyFxApplicationDefine
3. UartLpAppThread_Entry
4. CyFxUartLpApplnInit


概ね、上記の順番で実行されていきます。また、アプリケーションノートAN75705(日本語訳版)の情報も加味して詳細なフローを記載すると下記のようになります。


FX3実行処理フロー.png



main()関数への遷移はフレームワーク内で定義されており、FX3ファームウェア開発者はなにもしなくても、自動的にmain()関数が呼出されます。

main()関数内では、デバイスの初期化(CyU3PDeviceInit関数の呼び出し)、IOマトリックスの設定(CyU3PDeviceConfigureIOMatrix関数の呼び出し)、OS呼出し(CyU3PKernelEntry関数の呼び出し)を実施します。

その後、OSからCyFxApplicationDefine関数が呼出されスレッドが作成されます。作成されたスレッド内でUARTの処理を行います。

他のSDKのサンプルでもだいたいこの流れを踏襲しており、どこにも記載はありませんがFX3を使用するときのお作法といえるのではないでしょうか。

さて、FX3を使用するためのお作法がわかりましたので、この記事の目的であります、“Hello World”を表示させるコードを追加しましょう。

“Hello World”を表示させるためには、当然のことながら、UARTデバイスの初期化を実施した後でなければなりません。具体的には、「UartLpAppThread_Entry」関数内の「CyFxUartLpApplnInit」を実行した後となります。

void
UartLpAppThread_Entry (
uint32_t input)
{
CyU3PReturnStatus_t apiRetStatus = CY_U3P_SUCCESS;
uint8_t rxTxByte = 0, actualCount = 0;

/* Initialize the UART example application */
CyFxUartLpApplnInit();

CyU3PDebugPrint (4, " Hello World ");    ←ここに挿入!

for (;;)
{
・・・以下プログラムは続く。・・・


このようにして、デバックビルドにてビルドを行い、FX3に書き込みを行い実行するとPCのコンソール画面上に「Hello World」と表示されます。(なお、UARTを接続するピンの位置についてはハードウェアによりますのでボードに合わせてご確認ください。)

なお、初期化実行前に「CyU3PDebugPrint」を記載してもコンソールには何も表示されませんのでご注意ください。(2回ほど同じことをやってしまいました。)


※なかなか情報が少ないため、弊社の調査による内容を掲載しておりますが、掲載内容に誤りがあるかもしれません。その場合はご指摘いただければ幸いです。またこのブログの内容を利用等により生じた損害など一切責任を負いませんので各自ご確認のうえご使用ください。


だれかFX3 SDKの解説書籍を出してくれないだろうかと願う今日この頃でした。

posted by デベマネ at 11:57| Comment(0) | EZ-USB/FX3

2013年11月14日

FX3の高速化検証7 〜データをPCに保存する〜

さて、今回がFX3高速化シリーズの最終回になります。
今回はUSB3.0で受信したデータをPCに保存する方法について説明します。

実際に340MB/sのデータを保存するためには市販のHDDを用いていては間に合いません。
試しに弊社にあった最新のPCのHDDのベンチマークを取得してみました。


HDDベンチ1.jpg


Writeの速度が115MB/sとなっており、USB3.0の速度に全く追いつけていないことがわかります。
弊社でもUSB3.0のスピードでデータ保存をするにはRAIDにしないといけないのかとか、Windowsの仕組みでダイナミックディスクを組まないといけないのかとも検討しました。

しかし、いまはSSDを使用するとUSB3.0の伝送速度と同等程度の書き込みができるものがあることがわかりました。

たとえば、サムソン電子の「SAMSUNG SSD 840 Pro series SATA 6Gb/s」です。このSSDのベンチマークの結果は次のようになりました。


SAMSUNGSSD840Proベンチマーク.jpg


USB3.0の転送レートがSSDへの書き込み速度を上回っており、問題なく保存できそうです。
これで、あとはUSB3.0の受信とデータを保存するソフトウェアを開発すればよいことになります。
このソフトウェアについては、受信とデータ保存を別スレッドで動作させるソフトウェアを組むことで実現できます。

・・・・・・・・・・

ということでソフトウェアができましたので、実際に保存までの時間と転送レートを計測してみました。

<ベンチマーク結果>

データ保存のベンチマーク.jpg

※3回計測平均の時間は16GBのデータを受信しデータ保存するためにかかった時間です。

SAMSUNG SSD 840 Pro を使用した場合では、保存まで含めた速度が334MB/sとなりました。

EZ-USB FX3の高速化検証5 〜PC側での対応USB3.0〜の報告では単純なUSB転送で340MB/sでしたので、それから見ても、ほとんど速度低下することなく保存ができています。


ただし、SSDならば何でもよいかというとそうでもありません。
高速な書き込みが行えるSSDが必要です。
ということで、HDDでの保存は論外なのですが、SSDでも高速に保存するためにはそれなりに高速なものを選択する必要があります。
もし高速なデータ保存をお考えであればお気を付けください。


RAID以外の高速保存のための選択肢が増えて、小難しいシステムを作らなくても済むようになってきていることを改めて実感できる調査でした。



最後に。
この仕組みを是非活用してみたいと思ったあなた!今すぐお電話またはメールを。

また画像キャプチャーボードSVI-06シリーズ詳細はこちらをクリック。
posted by デベマネ at 14:29| Comment(0) | EZ-USB/FX3

2013年11月12日

FX3の高速化検証6 〜StreamサンプルAPの内部構造簡易解剖〜

前回までは、SVI-06のボードとアプリケーションを使用して、アプリケーションノートAN86947の転送速度が実現できるのかを検討してきました。
その過程でサイプレスがSDKの一部として提供している送受信アプリケーションStreamについて内部を見る機会がありましたので、その経験をもとに少しStreamの内部構造を軽く解剖してみたいと思います。


まず、サンプルアプリは下記のフォルダに格納されています。
(SDKインストールフォルダ)\EZ-USB FX3 SDK\1.2\application\

applicationフォルダ内に、C#とC++のサンプルがあります。
今回は速度検証という観点からC++版のアプリを使用していました。
そこで、ここではC++版の方で解説を行います。

StreamアプリケーションはGUI上にいくつか設定項目を持ちますが、内部動作としては、USBエンドポイントからデータを受信し、受信したデータは読み捨てるということを続けるアプリケーションになっています。

データ受信については、「XferLoop」というスレッドをフォームロード時(Form1_Load)に作成し、そのスレッドで受信し続けます。
またデータ受信については非同期関数により下記のフローで行われています。


Stream内部動作.jpg



上記のようにデータ受信に関して非同期で動作しているため、受信依頼をはじめに複数個行うことにより、効率的にデータ受信が行えるようになっています。
この個数の指定はGUIの「Xfer to Queue」にて変更できるようになっています。

気になる方はぜひこの数値を変更して速度の変化を確認してみてください。
弊社で確認したところでは、数値にもよりますが、20MB/sほどの高速化に寄与していました。

なお、SVI-06は非同期処理では動作していません。フレーム抜け無く受信するためなど理由はいくつかありますが、同期処理にてボードからPCへデータを受信しています。

今回は以上で終了です。Streamの内部構造を解析しようとしたのはたぶんこのブログだけではないでしょうか!!画期的ですね!!!!

さて、次回はPCでの保存についてベンチマークの結果を含めて検証結果を説明します。
posted by デベマネ at 11:19| Comment(0) | EZ-USB/FX3

2013年11月08日

EZ-USB FX3の高速化検証5 〜PC側での対応USB3.0〜

前回まではFX3側の対応を中心に紹介してきましたが、今回からホストとなるPC側の改善ポイントについて、説明していきます。
ホスト側まで来るとUSB3.0の対応になります。

前回説明したFX3での対応を終えたあと、ホスト側での受信の速度検証を行ってみました。
実験対象は下記の2つです。

1.SVI-06用ユーザーモードドライバ + SVI-06用API
2.サイプレスドライバ(カーネルモード) + サイプレス提供API

1の方でデバイスからホストへのデータ転送の速度を求めてみたのが下記の画面の枠内の数字です。
デバイス側で高速化対応したにもかかわらず全然速度がでていません。
転送レートは262.172MB/sとなっています。うーんなぜだろう???


改善前転送レート.jpg


一方、前々回の記事でも紹介した2の構成であるStreamerというサイプレスが提供しているサンプルアプリケーションで測定した結果を再度掲載します。
その結果には1の構成では全然届きません。
サイプレスはやはり高度なチューニングをしているのか。恐るべしサイプレスドライバー!!!


SVIの結果.jpg


と恐れをなしていても速度は変わらないので、見られるところから詳細に見ていきましょう。

まずは、1、2の構成時のPC側で取得したそれぞれのUSBパケットキャプチャをご覧ください。
(今回使用しているUSB3.0パケットキャプチャーは、Adviser T3です。)


パケットキャプチャー結果1.jpg


赤丸のところを見ていただきたいのですが、パケットサイズが同じなのに、取得に要した時間が違っています。
サイプレスドライバ(2の構成)のほうは、43μSなのに対して、弊社のほう(1の構成)は72μSと取得に1.4倍の時間がかかっていることがわかります。
この違いはなんだろうか?でも、遅い原因はこの違いにありそうだ。

そこでもう少し深堀してみましょう。
パケットキャプチャツールでバスのスループットを表示することができるので、それを見てみます。


USB30_バススループット.jpg


赤丸で示したところを見ていただけるとわかるのですが、データ受信していない間隙が存在することがわかります。
一方サイプレスドライバはそのような間隙がほとんど存在していません。
つまり、間隙の発生により1の構成ではその分データ取得に時間がかかっているということがわかりました。
つまりこの間隙がなくなれば早くなるということになりますね。

この間隙に対処するためには、次にこの間隙がどこから来るのか調べましょう。
まず手始めに上位のモジュールであるSVI-06用APIのソースコードを見ていきました。

その結果、USBバスからのデータ取得に際してSVI-06用のAPIが、ドライバーから少しずつしかデータを取得できていないことが原因と判明しました。
具体的には、SVI-06用デバイスドライバから1回に取得できる最大のサイズ(MaxPacketSize)をSVI-06用のAPIの中で取得するのですが、このサイズがサイプレスドライバに比べると少ないことが原因でした。

SVI-06用のAPIはデバイスドライバから1回に取得できる最大のデータサイズをMaxPacketSizeの値により決定しているため、大きい値が設定されていれば1回のデータ取得動作で済むところを、この値が小さいために何回も繰り返して行う必要がありました。
そのため、取得の繰り返し動作の待機期間などに間隙が開いてしまったのではないかと推測できました。

そこで、このMaxPacketSizeを大きな値にするために、SVI-06の32bit版として使用していたカーネルモードドライバを使用することにしました。(すでにあるものを使用しています。ユーザーモードドライバを修正してもよいと思います。)

この構成のときのパケットキャプチャの結果は次のようになりました。


パケットキャプチャー結果2.jpg


データ取得時間がサイプレスドライバとほぼ同等の時間(44μs)になるとともに、データスループット表示画面では、間隙がほとんどなくなっていることがわかります。
これは、先ほど原因として挙げてたSVI-06用のAPI内でのデータ取得の繰り返し回数が減少したことによるものと思われます。
つまりこの対処によりデータ取得速度がサイプレスドライバ並に向上しました。
また、結果として第1回で説明した通りコンソールアプリまでの転送レートは平均340MB/sになりました。


改善後転送レート.jpg
※この画面の取得結果は下記のPCにより検証を行いました。
構成が変わってしまいましたが、原因はもともとの検証対象PCでの画像の取り忘れです。
わかりにくくなり申し訳ございません。

<検証PCスペック>
PC:Mouse desktop MDV-GZ7000B
OS:Windows7 64bit
チップセット:インテル Z87 Express
CPU:Corei7 3.4GHz 4770
メモリー:32.00GB
ドライブ(SSD):サムスン840 PRO Series MZ-7PD256B/IT


なお、本事例の場合には、掲載した対処法でうまくいきました。
しかし、ホスト側(PC側)の対処には、ドライバーやAPI、アプリケーションといろいろな要因が絡み合っていますのでパケットキャプチャやドライバーの使用方法などを総合的に検討して速度向上を図る必要があると思います。

ここまでは、PC側でUSB3.0のデータを高速に受信するための原因調査から対処までの一例をご紹介しました。この高速に受信したデータをPCに保存するためにはどうすればいいのか。それも可能です!次回以降その方法はご紹介します。
posted by デベマネ at 11:23| Comment(0) | EZ-USB/FX3

2013年11月05日

FX3の高速化検証4〜FX3ファームウェアでの対応〜

前回の論理的な速度の考察を踏まえて、実際にFX3のファームウェアの改造にとりかかります。
とはいえ、現在弊社のSVI-06ボードで使用しているファームウェアは「slfifosync」サンプルをベースとしており改造ポイントは多くありません。
(アプリケーションノートAN86947でも速度上のポイントとして挙げられています。)

改造のポイントをご紹介します。


<エンドポイントの作成>

エンドポイントの作成時にバースト長を適切なサイズに設定します。
slfifosyncサンプルでは1になっていますがこの数字を大きくします。最大値は16になります。
アプリケーションノートに記載されている通り速度に影響があります。

epCfg.burstLen=16

併せて、「cyfxslfifousbdscr.c」ファイルの「Super speed endpoint companion descriptor」のバースト長設定値に(epCfg.burstLenで設定した値−1)を設定します。(epCfg.burstLen=16であれば、15を設定)


<DMAバッファの作成>

DMAバッファの作成で速度に影響があるのは、DMAのサイズとバッファ数になります。1点注意としては、SUPER SPEEDの時だけ有効な設定になります。USB2.0モードに書き設定を行うと不具合が発生する可能性がありますのでご注意ください。

slfifosyncでは1024(SUPER SPEEDの時)となっていますが、この値を大きくします。
この値を大きくしすぎるとFX3が起動しなくなりますので、転送レートを見ながら最適な値に調整します。

dmaCfg.size = 4096〜16,384;

次にDMAのバッファ数を設定します。
slfifosyncでは2が設定してありますが、この値を大きくします。

dmaCfg.count = 4;

併せてDMAのタイプをMANUALからAUTOに変更します。

apiRetStatus = CyU3PDmaChannelCreate (&glChHandleSlFifoUtoP,
CY_U3P_DMA_TYPE_AUTO, &dmaCfg);


このような修正を行うことにより、FX3を高速に駆動させることができるようになります。

<参考ソースコード>
参考となるソースコードですが、GitHub上にnoritanさんが公開をしているソースコード(SlaveFifoSyncNtan011)があります。

こちらがとても参考になると思います。(この記事を作成するときにも参考にさせていただきました。noritanさんありがとうございます。)


<パラメータによる転送レートの違い>

次に転送レートの違いについて結果のみ簡単にお知らせいたします。
上記のパラメータを変更した場合の転送レートの計測結果が下記となります。
(SVI-06ボードを使用して、PCの構成などは1回目に報告した最速の構成を使用して計測しています。)

FX3速度計測結果.jpg


※この結果を見ていただくとわかるのですが、バースト長を変更しても速度に影響をさほど受けていない結果となっています。
弊社としてもバースト長の設定が誤っているのではないかなどの検証の疑義があり、別途USBパケットキャプチャーを行い通信の様子を確認しました。
確かにバースト長を長くするとバーストはしているのですが、ホストPCの性能が良いのかわかりませんが、バーストしなくても高速に取り込めていることがわかりました。
そのため、バースト長1でほぼバーストしなくてもよい状態となっておりました。
そのため今回はこのような結果となっていおり、今回はこのまま公開することといたしました。
この点は今後継続して調査を進める必要があると考えています。
当然ホストPCが変わればこのバースト長がより機能して転送レートに対するインパクトがあると思います。


FX3ファームウェアでの対応は今回で終了です。
それほどやれることは多くありませんね。

次回からはPC側での検証にうつっていきます。
posted by デベマネ at 19:01| Comment(0) | EZ-USB/FX3

2013年10月31日

FX3の高速化検証3 〜論理的な速度の考察と結果〜

前回のブログでは、全体の仕組みや検証結果、サイプレス社との検証の違いについて説明をしました。

簡単に前回のブログの内容をまとめると、FPGA〜FX3のGPIFUインターフェイスまでは380MB/s、FX3〜PCまでは340MB/sの転送レートとなりました。

今回は、後者のFX3〜PCまでの転送レートについて少し考察をしてみたいと思います。
(前者のFPGA〜FX3については、弊社独自の技術のため説明は割愛します。ただし、高速転送を支えているのがFPGAの内部処理技術になります!!!!)

まず初めに論理的にはFX3〜PCまでどのくらいの転送レートが出るのか検討してみます。

この論理的な転送レートの検討については、FPGAマガジンNo.2のP31の特集記事および、アプリケーションノートAN86947が参考になります。(というか記事の内容そのものです。)

USB3.0バスの転送性能(スループット)は5Gbps(625Mバイト/s)といわれています。しかし、FPGAマガジン「【転送レート400Mバイト/sをたたき出す!】システムのボトルネックをアナライザでじっくり調べる」の記事では、2つの要因でUSB実行転送速度が低下すると説明されています。

1.8b/10b符号変換によるもの
2.リンク層での制御やプロトコル層でのパケットの付加によるもの

どちらもUSB3.0の規格上の仕様になりますがどのような影響があるのか検討します。

1の8b/10b符号変換とは、8bitのデータを10bitへ符号化する変換です。そのため、USBバスを通るデータは10bitに符号化されたデータとなります。
つまり、実際のデータ伝送効率=8/10=0.8倍となります。そのため、1秒間に625Mバイトのスループットだとしても、その中を通る実データは625MB/s×0.8=500MB/sとなります。つまり、8b/10b符号変換を採用したことにより、論理的に125MB/sの転送性能ダウンが発生するのです。

2のパケット付加も1.と同様の理由によりUSBバスの転送レートを低下させる要因となりますが1.のように論理的に計算することは難しいと思います。それは、1パケットで見るとわかりやすいのですが、全データの伝送ということで考えると、各部の処理速度や相互のタイミングなど複数のことが複雑にからむためです。

そこで、この2の影響による性能をみるために今回は実際に転送速度を計測してみることにしました。この時に参考になるのが、サイプレス社から出されているアプリケーションノートAN86947です。
前回も記載をしましたが、このアプリケーションノートによると、バルク転送のサンプルアプリを用いることにより、454,300KB/s(=443MB/s)のスループットを実現できると書かれています。念のため、SVI-06改ボードのFX3をアプリケーションノートにあるファームウェアに書き換えて実際に実験をした結果、アプリケーションノートと同様の速度となりました。(注:全く同じ速度になっていますがSVI-06改ボードでの実測値になります。)


SVIの結果.jpg


当然、アプリケーションノートに記載のバルク転送でも、1および2の影響を受けていることになります。
そのうえで、結果として454,300KB/s(=443MB/s)のスループットが確認されたということは、1と2両方の影響を受けたとしても、FX3〜PCへのデータ伝送の実測した転送レートとして443MBは出すことができるということになります。

2だけの単独の結果ではないのですが、1の論理的な転送レート(500MB/s)を踏まえてみても、443MB/sはUSBバスの転送レートの上限に近いのではないかと考えられます。
2を単独で論理的に求められているわけではありませんが、USBバスの論理的な転送レートの上限として443MB/sと考えてもよいと思います。

今回の検証システムでは、FPGA〜FX3まで380MB/sであるため、USBバスの転送レートによる制限を受けることはありません。そのため、380MB/sがFX3〜PCの転送における転送レートの目標値として目指したいと思います。

次回以降はこの目標値を達成させるために行った各部分での方策について説明していきます。
posted by デベマネ at 15:32| Comment(0) | EZ-USB/FX3

2013年10月29日

FX3の高速化検証2 〜サイプレス社独自検証と弊社検証の違いについて〜

前回は検証の全体像と結果について説明をしました。
一方サイプレスからも転送レートの検証を行ったレポートである、アプリケーションノートAN86947 - Optimizing USB 3.0 Throughput with EZ-USB FX3 が発表されています。

今回は、サイプレスと弊社の検証の違いについて説明を行います。

<サイプレス社独自の検証結果>
サイプレスからもFX3の速度検証結果の公式なレポートが最近になって出ています。
サイプレスのアプリケーションノートAN86947 - Optimizing USB 3.0 Throughput with EZ-USB FX3 がそのレポートです。

このレポートには、下記の4つの転送速度の結果が記載されています。
1.アイソクロナス転送
2.バルク転送
3.インタラプト転送
4.GPIFUを用いたバルク転送

このうち今回の検証と関係するのは4番のGPIFUを用いたバルク転送で、レポートのP7〜8に結果が記載されています。
その結果をみると、394,000KB/s(=384MB/s)の転送レートが出るとレポートをしています。
そこで、SVI-06改ボードのFX3を使用してアプリケーションノートと同様の環境を再現し検証を行ったところ、レポートに近い転送レートまで出ることを確認しています。

<サイプレス社独自検証と弊社検証でのFX3ファームウェアの違い>
今回の弊社で使用したslfifosyncファームウェアと、サイプレス社独自検証用ファームウェアの大きな違いはGPIFUデザイナーを見るとわかります。


GPIF2比較.jpg

サイプレス社検証ファームウェアはFX3からApplication Processorに対してクロックを送出しているのに対して、slfifosyncはApplication ProcessorからFX3にクロックを送出しています。
アプリケーションノートのサンプルはFX3が理想的に動作できる状態での検証といえます。
つまり、アプリケーションノートの検証のほうがより高速転送がしやすいと思います。


次に、ボード全体のデータのフローについて違いを説明します。
弊社検証でのボードのデータの流れを下図に示します。


SVI-06簡易ブロック図.jpg


今回の弊社の検証では、ピンヘッダからイメージセンサと同等のデータを受けてFPGAに取り込みます。
取り込んだデータは先程説明した通りヘッダ付加等の処理を行いDDR2 SDRAMに格納されます。
格納されたデータはFPGAがフロー制御を行いながらFX3へと渡されます。

一方、アプリケーションノートでのデータの流れは下図となります。


AN86947簡易ブロック図.jpg


このアプリケーションノートの検証の場合は、弊社検証ではFPGAが行っていたフロー制御を行なっていません
そのため、FX3はターゲットからのデータの取りこぼしが無いものと想定して動作しています(取りこぼしたかどうか誰もわからないし、知る由もない状態ともいえます)。
このような処理がないため、FX3動作は転送レートを求める上では都合のよい仕組みで動作していると考えることができます。
ゆえに、GPIFUを通して取り込んだ時のFX3の最大転送レートを求めることが可能となっていると考えられます。

しかし、アプリケーションノートの仕組みを現実的なシステムに活用できるかというと、このアプリケーションノートの仕組みでは現実的なシステムを作る際には問題が発生します。
それは、まったくフロー制御が行われていないため、ボード上でデータの管理が行えないという問題です。
そのため、現実のシステムとしては活用しにくいと考えられます。
つまり、弊社検証では実用的なシステム構成での転送レート検証であり、アプリケーションノートはFX3にとっての理想的な動作環境での転送レート検証といえます。
そのため、弊社が行った今回の検証のほうがより現実的なシステムであり、かつフロー制御も行われているため、速度検証としてはハードルが高くなっているといえます

次回以降では、この違いを前提として転送レートの検証の結果等を紹介します。
posted by デベマネ at 10:59| Comment(0) | EZ-USB/FX3

2013年10月24日

FX3の高速化検証1 〜FX3の最高峰に挑む〜

ネットビジョンでは、2011年11月からEZ-USBレジスタードマーク FX3(以降、「FX3」といいます。)を使用したイメージキャプチャーボードSVI-06の製造・販売をしております。その後、UVC版であるSVI-05の開発により、FX3を高速に駆動させるノウハウが着実に蓄積されてきました。

一方FX3チップはリープモーションに採用されるなど、国内、国外問わず活用が進んできているUSB3.0用のチップになります。

しかし、高性能なチップではあると思いますが、最高に近いスペックを引き出すためのノウハウが共有されていないため、国内での爆発的な普及には至っていないのではと考えています。

そこで、弊社にて行ったハードウェアからPCアプリケーションまでの高速化の道のりについて紹介してみたいと思います。

<検証システム全体像>

はじめに今回検証をおこなったシステムの全体像を説明します。


システム全体像.jpg



ハードウェアとしてCypress社(以下、「サイプレス」といいます。)から発売されているEZ-USB FX3を搭載した弊社開発ボードSVI-06をベースとして高速化のための改造を行ったもの(以下「SVI-06改ボード」といいます。)を使用しています(上段のボード)。

SVI-06改ボードにはFPGA(Spartan6)が搭載されておりピンヘッダからの信号やPCからの制御に対する処理などを行います。SVI-06改ボードとイメージセンサなどのデバイスとの接続はピンヘッダにより行います。

なお、この検証システムでは、SVI-06改ボードのピンヘッダへのデータ信号を供給するには下段にあるエミュレーションボードから行っています。このエミュレーションボードは弊社製品であるSVO-02を用いており、データ信号はイメージセンサーと同様にエミュレーションを行っています。SVI-06改ボードへは16GBのインクリメントデータを供給しています。

SVI-06改ボードは、USB3.0ペリフェラル・コントローラとしてFX3を使用することで、PCと接続されています。
PC側には、USBからの情報を取得するためのカスタムドライバーおよびアプリケーションが動作しています。
PCのOSはwindows8 64bit版となっています。
ブロック図にすると下記になります。(赤点線はデータの流れを表します。)


全体ブロック図.jpg
※xHC:ホストコントローラ



<FPGAについて>

今回検証に用いたSVI-06改ボードのFPGAの機能としては大きく分けて3つあります。
1.フレーム化(FullHDサイズにフレーム分けを行う)
2.情報ヘッダの付加
3.ボード全体のフロー制御

フレーム化とは、ピンヘッダからFPGAに入ってくるデータを解析し、FullHDサイズのフレームに分割してDDR2 SDRAMに保存を行います。
具体的には、下段のエミュレーションボード(SVO-02)からイメージセンサ出力と同等のデータを送出しているため、FPGA内部において、ブランキングエリアの信号を解析して画像サイズを自動判別し、画像エリアのデータのみをフレーム単位に分割してDDR2 SDRAMに保存を行っています。

分割した各フレームには、フレームのサイズなどのフレーム情報等をホストへ通知するためのヘッダを付加します。なお、DDR2はダブルバッファとして使用しており、その制御もFPGAが行っています。
また、高速にかつ安定して駆動させるためFPGAがFX3チップを含むSVI-06ボード全体のフロー制御を行っています。このアーキテクチャーの採用により現在弊社で発売しているSVI-06よりもさらに高速に駆動することができます。

なお、今回の検証で高速化処理を支えているのがFPGAであり、弊社独自の技術によるものです。この内容については公開したいところではあるのですが、独自技術でありブログで詳細を説明することはできないみたいです。すいません。自社のFPGAに活用したいなどの話があれば個別にお問い合わせください。


SVI-06改説明.jpg



<FX3について>

FX3のファームウェアはEZ-USB FX3 SDKに同梱されている「slfifosync」を修正して使用しています。(格納先:EZ-USB FX3 SDK\1.2\firmware\slavefifo_examples\slfifosync)
ただし、修正といってもエンドポイントの設定やDMAのバッファサイズ等コンフィグレーションの変数を変更しているだけになります。ほぼSDKサンプルそのままと考えてもよいと思います。

<PC環境について>

Windows PC側については、OSはWindows8 64bitを使用しドライバーおよびAPIは下記の組み合わせにより実験を行いました。
1.ユーザーモードドライバ + SVI-06用API
2.カーネルモードドライバ + SVI-06用API
3.サイプレスドライバ(カーネルモード) + サイプレス提供API

今回の検証で使用した、1,2のドライバーについてはマイクロソフトから提供されているリファレンスをそのまま利用したものと考えてください。

PC側の送受信アプリケーションはUSB3.0のデータを取得するためだけの機能を持ったコンソールアプリケーションを用いました。FX3との転送レート計測の検証のため、送受信コスト以外にはほぼコストがかからないアプリケーションとなっています。

下図が今回の検証環境の全体概要になります。


各部の役割.jpg



<各部での転送レート計測結果>

最高速が出るようにチューニングを行った結果、各部分での転送レートは下図のようになりました。


計測結果.jpg



USBのバルクイン転送にて、ボードからPCへ16GBのデータを転送し、送信開始から受信終了までの時間から転送レートを求めています。結果として、FX3〜PC上のコンソールアプリまでの転送レートは平均340MB/sになりました。
なお、今回の検証では詳細をふれませんが、FPGA〜FX3のGPIFUインターフェイスへは平均380MB/sにてデータ転送を行っています。

<検証PCスペック>

今回、転送レート検証に使用しているPCのスペックは下記となります。

PC:NEC LaVie Z LZ750/LS
OS:Windows8 64bit
チップセット:モバイル インテル UM77 Express
CPU:Core i7-3537U@2.00GHz メモリー:4.00GB
ドライブ(SSD):TOSHIBA THNSNF256GMCS

長かったですが、システム全体像から検証結果までを説明しました。次回以降部分に絞ってチューニングで行ったことなどを説明していきます。
posted by デベマネ at 18:05| Comment(0) | EZ-USB/FX3

2013年10月22日

EZ-USB FX3の高速化検証 〜予告編〜

2011年末から開発者ブログでは機会があるごとにEZ-USB FX3(以下「FX3」といいます。)の話題を取り上げてきました。最近は1年ほど前の記事の更新を最後に沈黙し続けてきました。

その間、国内でのFX3の普及率はどれほどかわかりませんが、今年に入ってからLeap Motion ControllerにFX3が使用されたりとUSB3.0用のチップとして使用されてくるようになりました。さらには、HPからLeap Motion内臓のノートPCまで発表されました。

また、Cypress社からも転送レートの最適化を検証したアプリケーションノートAN86947 - Optimizing USB 3.0 Throughput with EZ-USB FX3 が発表されるなどFX3の普及が進んできているのではないかと感じております。

そこで、アプリケーションノートAN86947やFPGAマガジンNo.2等をリファレンスしつつ弊社で独自に検証した転送レートに関するレポートを数回に分けてブログで発表します。

なお、弊社の検証のポイントは、FX3〜PCへのデータ保存までをトータルに検証し転送レートを算出しているところにあります。

次回以降の内容は次のようなものを予定しています。

1.FX3高速検証の全体像の紹介と、FX3〜PC保存を含めた転送レート(334.4MB/sを達成!)紹介
2.プリケーションノートAN86947と弊社検証の違い
3.FX3〜PC転送までの論理的な速度考察
4.高速転送を実現するFX3ファームウェアでの対応実例
5.高速転送を実現するPC側での対応実例
6.Streamアプリケーションの内部構造簡易解剖
7.データをPCに保存する

週2回のペースで更新をと考えております。
記事に対する質問や励ましのコメントなどはコメント欄に記載いただければ筆者の励みになります。なお、いただいた質問についてはご回答できる範囲で誠実に対応できればと思います。
posted by デベマネ at 11:12| Comment(1) | EZ-USB/FX3

2012年09月13日

FX3 SDK V1.2

最近、FX3のSDKが1.2にアップされました。
先週サイプレスの方が来られてうかがった内容だと、今まで相性の
悪かったホストコントローラーとも接続できるようになったそうです。
弊社のSVI-05/06もASmediaや新しいIntelのチップセットでは
相性が悪いので早速V1.2に対応して確認してみようと思いましたが
デバイスから見て、受信は正常にできているようなのですが、送信が
うまくいきません。SVI-06はFX3とFPGAの間をスレーブFIFOで
接続していますが、このタイミングが何かしら変更があったようです。
確かにGPIF-Uのレジスタテーブルで結構変更がみられます。
こういう場合FPGAでChipScopeというツールを使ってタイミングの
確認を行い、調整を行います。FX3とFPGAの間にはなにもテストポイント
がないので面倒ですね。これから作られる方はTPを検討したほうが
いいですよ。ということで、まだV1.2では動いておりません。
今週中になんとかしたいと考えています。
posted by デベマネ at 10:47| Comment(0) | EZ-USB/FX3

2012年09月06日

SVI-05

下の写真は弊社製USB3.0画像入力ボード「SVI-05」です。
20120906_150205.jpg

このボードはサイプレスさんから提供されている、UVCサンプルをFX3に組み込んで
カメラモジュールを実際に接続してUVCカメラとしてWindowsにて表示できています。
写真のカメラはQVGAサイズ、15fps、無圧縮画像の出力です。USB3.0ですので帯域は
スカスカです。「SVI-05」にはフレームメモリーが搭載されていますが、UVCサンプル
がカメラモジュールとFX3をGPIFで直に接続するものなので、FPGAはほぼスルーになって
います。1080pですと20fpsが限界のようです。

この”FPGAはほぼスルー”を少し手を加えることで、720x480などでも100fpsでるように
なります。1080pですと40fpsぐらいになりそうです。

最近FX3 SDKがV1.2になり、今日対応しましたが、いくつかのコンパイル/リンクーエラー
を対応後、無事に動作しております。SDKがV1.2なったことで、今まで接続できなかった
ルネサス以外のホストコントローラーでも動作するらしいです。(未確認ですが)

これから、UVCサンプルを修正してもっと高速化を目指します。
posted by デベマネ at 15:18| Comment(0) | EZ-USB/FX3

2012年03月19日

アプリケーションノート

3月に入ってCypress.comでアプリケーションノートの掲載がありました。

AN75432 - USB 3.0 EZ-USBレジスタードマーク FX3トレードマーク(TM) OrientationNew
AN75432 introduces EZ-USBレジスタードマーク FX3トレードマーク(TM) by describing the architecture, Windows application, and the debug and development environment of Cypress’s USB 3.0 product. This application note can help you develop a USB 3.0 peripheral.

開発環境の構築などが記述されています。

AN75705 - Getting Started with FX3
AN75705 guides you in getting started with the Development Kit (DVK). This Application Note also helps in verifying the working condition of DVK, its compatibility with the users host system, and also gives methods for troubleshooting process issues.

DVKの使用方法ですね。

AN68829 - Slave FIFO Interface for EZ-USBレジスタードマーク FX3トレードマーク(TM): 5-Bit Address Mode
AN68829 discusses asynchronous and synchronous Slave FIFO interfaces for the EZ-USBレジスタードマーク FX3トレードマーク(TM) SuperSpeed USB controller. This application note also describes the mode in which the interface supports a 5-bit address bus and lets you access all 32 internal sockets of EZ-USB FX3.

Slave-FIFOモードのアドレス5bit版の方法です。またEndpointのスイッチングの方法も書いておりこれは興味がありますので、今後やってみたいと思います。

UVCですが、別ジョブで手がつけられてません。早くカメラにつなぎたい。
posted by デベマネ at 10:26| Comment(0) | EZ-USB/FX3

2012年03月07日

USB Video Classに挑戦2

前回、UVCフォルダの中身を説明しましたが、すでにDebugでビルド済みなので
サンプルを動かしてみたいと思います。
SVI-06のPMODE(FX3のブートオプション設定スイッチ)をUSBブートにします。
 PMODE0=PMODE1=1、PMODE2=F
SVI-06の電源を入れると、デバイスマネージャのUSBコントローラーのところが
下図のようになります。
image0307-2.jpg
Cyress USB BootLoaderが警告なしに表示されればOKです。上図では!が付いているので
FX3用のUSBドライバを署名なしで使用するためにリブートしてF8する必要があります。
image0307-3.jpg
再度、デバイスマネージャーを見ると、Cypress USB BootLoaderから!が消えました。
次にCypressのコントロールセンターを立ち上げます。下図のようになりました。
image0307-4.jpg
Cypress USB BootLoaderを選択し、メニューのProgram->FX3->RAMと進み、ビルド済みの
UVCイメージ(USBVideoClass.img)を流し込みます。
image0307-5.jpg
流し込が終わるとコントロールセンターからデバイスが消えます。ステータスバーにはFailedと
表示されます。
image0307-6.jpg
これは、コントロールセンターがデバイス”Cypress FX3”を見つけているためです。UVCカメラと
なったFX3は実はデバイスマネージャーのイメージングデバイスに”FX3”が追加されてました。
image0307-7.jpg
サンプルでここまで動くんですから、まさにEasyですね。このUVCとしてWindowsに認識させるのが
結構面倒だったりするので助かります。まだ何も修正してませんよ。
これでUSBカメラとしてWindowsに認識されたので、アプリで表示してみましょう。
アプリは、AMcapというDirectShowのサンプルアプリを使用します。
下図のように表示されました。
image0307-8.jpg
コーヒーカップがぐるぐるするだけのものです、デバイスとして”FX3”も列挙されています。
表示はできるのですが、表示されるまで2分ほど待ちます。(応答なし状態)
これは、なぜなのか? 今後調べたい思います。
UVCカメラとしてのデバイスのプロパティは下図のようにほとんどありません。
image0307-9.jpg
これは、ディスクリプタでの設定が反映されていますので、今後追加したいと思います。
長くなりましたので、今日はここまでとします。
posted by デベマネ at 17:20| Comment(0) | EZ-USB/FX3

USB Video Classに挑戦1

弊社SVI-06をUVCで使用したいとのお客様からのリクエストにより
FX3のサンプルファーム”USBVideoClass”をやってみたいと思います。
FX3のSDKはBeta4で行います。(1.0でも動作的に違いがなさそうなので)
まずはファイル構成です。FX3 SDK B4をインストールするとfirmware
フォルダの中にUVCフォルダが作成されます。で、この中はというと、
cyfxuvcinmemフォルダとmakefileがあります。
実際のソースはcyfxuvcinmemフォルダの中にあり、makefileはEclipseの
ビルド用ですね。(Eclipseを使わないでもできるんだろうね)
で、cyfxuvcinmemフォルダの中はというと、以下の通りです。
image0307-1.jpg
DebugフォルダはEclipseでImportすると勝手にビルドが始まって作成されます。
Projectファイルが2つと、アセンブラが1つと、Cソースが4つと、ヘッダーが1つ、
makefile、readme.txtとなっております。
readme.txtの先頭をちょっとコピペ。

USB VIDEO CLASS EXAMPLE
-----------------------
This example implements a USB video class (Webcam) device that streams
a set of four MJPEG frames repeatedly to the USB host. The MJPEG video
frames are stored in the memory of the FX3 device as constant data.

UVCのサンプルで4つのMotionJPEGのファイルを繰り返しホストへ転送するそうです。
MotionJPEGのファイルはメモリーに格納してあるそうです。
もう少し下を読むとアイソクロナスエンドポイントを使用するようです。
UVCプロトコルについては標準的なものをインプリできるそうです。
各ソースの説明は以下の通りです。

* cyfx_gcc_startup.S : FX3内蔵ARM9のスタートアップコードです。

* cyfxuvcinmem.h : UVCサンプル用のCヘッダーです。必要に応じて変更してくれと。

* cyfxuvcdscr.c : UVCのUSBディスクルプタを定義しています。VID、PIDなど定義しています。

* cyfxuvcvidframes.c : UVC Probeコントロールの定義データとMotionJPEGの
              フレームデータを定義しています。データファイルですね。

* cyfxtx.c : ThreadX RTOS ラッパー関数やユーティリティー管巣が入ってます。
        たぶん変更する必要なし。

* cyfxuvcinmem.c : メインソースですね、USBのスタンダートリクエスト処理をやったり、
            アイソクロナス転送をやったり、メインです。

変更するのは、cyfxuvcinmem.h、cyfxuvcinmem.c、cyfxuvcdscr.cぐらいでしょうか。

ちょっと記事が長くなったので休憩、続きをお楽しみに。
posted by デベマネ at 16:56| Comment(0) | EZ-USB/FX3

2012年03月06日

GPIF II Designer 1.0

GPIF-II デザイナーをインストールしてちょっと触ってみました。
Recent ProjectsにSyncSlaveFifo-5bit、ASyncSlaveFifo-5bitが
ベーター版から追加になったようです。
ドキュメントもスタートガイド、ユーザーガイドとかあり、これを見ながら
作り込めればいろいろできそうです。
管理人は、ソフト屋なのでハードル高いです。
ハード屋さんは使えそうだと言っております。
ちなみにRecentProjectsに入っているデザイン(?)は編集できません
でしたので、これらを参考に自分で作っていくしかないようです。ハードル
高いです。
posted by デベマネ at 18:08| Comment(0) | EZ-USB/FX3

GPIF デザイナーU

Cypress.comでGPIF-IIデザイナーの新版がダウンロードできるように
なりました。ただし、Cypresアカウント登録が必要。
http://www.cypress.com/?id=3521&rtID=119
これからダウンロードしてみます。
posted by デベマネ at 16:12| Comment(0) | EZ-USB/FX3

2012年03月05日

FX3を量産品に交換しました part-2

前回FX3を量産品に交換したことはお伝えしましたが
SDKがV1.0で試してみることは次回に持ち越しました。
結果ですが、V1.0でも何も変わりません。
ソース的には結構変わっているんだが、でも、動作に
違いが出るよりもいいかもしれません。
速度的には現在の倍にしたいと思っているので、これ
からチューニング&安定化をやっていきたいと思います。
posted by デベマネ at 10:08| Comment(0) | EZ-USB/FX3

2012年03月02日

FX3を量産品に交換しました

現在SVI-06で使用しているFX3はRev.A品だったのですが、
代理店から量産品(3月出荷?)を少し入手し、張り替えて
動作を確認しました。
動作的に何も変化ありません。パフォーマンスも変わり
ませんでした。
ただ、FX3のファームがBeta4-SDKで作成したものなので
V1.0-SDKでどうなるか今後やってみたいと思います。
ただ、Beta4とV1.0は結構変わっていて、リコンパイル
だけではないんですよね。
確認したら、またご報告します。
posted by デベマネ at 15:01| Comment(0) | EZ-USB/FX3

2012年03月01日

Tech-Onで

日経BPのTech-OnページでFX3&評価ボードを使用した
HDカメラのデモの記事が載っています。
http://techon.nikkeibp.co.jp/NEAD/focus/cypress/cypress_15.html#
早く量産品がでないかなぁ。
posted by デベマネ at 14:39| Comment(0) | EZ-USB/FX3

2012年02月29日

アプリケーションノート

久しぶりにサイプレスのFX3のサイトを見にいったら、
FX3 SlaveFIFO Interfaceのアプリケーションノートの
日本語版がありました。
http://www.cypress.com/?docID=34040
また、FTPサイトではGPIF-II Designerのベータ版が
ありました。(英語版)
このGPIF-II Designerをちょっとさわりましたが、なんか
使えそうな気が。。。
ただ、ソフト屋にはハードルが高いような。。。
勉強あるのみか。
gpif-ii-appl.jpg
posted by デベマネ at 11:59| Comment(0) | EZ-USB/FX3

2011年11月09日

開発環境の構築8

Cypressの評価ボード、弊社SVI-06もFX3内ARMをデバッグするためにJTAG端子が付いています。
CypressのSDK内のFX3 Programing ManualではSEGGER社のJ-LlinkというJTAGデバッガを
使用していますので、さっそくDigiKeyで購入しました。ARMデバッガとしてはメジャーなようで
J-Link互換の他社のデバッガもあるみたいです。購入するとJ-Link本体、JTAGケーブル、USB2.0
ケーブルが同梱されるのみで、ソフトはSEGGER社よりダウンロードする必要があります。
URLはFX3 Programing Manualに記載されています。
ソフトをインストールし、J-LinkにUSB2.0ケーブルを接続し、
J-Link GDB Server via JTAGをスタートメニューからクリックし、Serverソフトを起動します。
image14.jpg
JTAGケーブルをターゲット(評価ボードまたはSVI-06)に接続し、電源を入れるとTarget
Connectedになります。これでデバッグの物理的な準備は終わりました。
再び、FX3 Programing ManualにJTAGデバッグの章にのっとり、Eclipsの必要な設定を
していきます。英語で書いていることがよくわからないので、言われたとおりにして、何とか
デバッグできるようになったと思います。一応ブレークポイントも張れるし、ブレークするし
何とかなりそうです。
posted by デベマネ at 18:01| Comment(0) | EZ-USB/FX3

2011年11月04日

SVI化

開発環境の構築は終わったと思うので、これからは実際にSVI-06として
動作するよう改造をしていきます。
まずは、USBのスタンダードデバイスリクエストをSVI化します。
今回のSVI-06では、USBのスタンダードデバイスリクエストはFX3のARM
マイコンで行い、ベンダーデバイスリクエストをSH-2マイコンで行います。
FX3SDKにはいくつかのサンプルファームがありますが、今回はSlaveFIFO
サンプルをベースにSVI化します。
SlaveFIFOサンプルは、FX3をFIFOとして使用できるようにするサンプルで
接続される外部コントローラからはFIFOのように見えます。
ホストPCからUSBパケットが来たら、このFIFOがNotEmptyになり、ホストPC
へUSBパケットを送信したい場合は、このFIFOがEmptyであればFIFOに
パケットを書き込んであげるという感じで行います。
SlaveFIFOのサンプルは、slfifosyncというフォルダに入っており、先日
すでにビルド済みなので、slfifosync.imgをダウンロードして、サンプル
を動かしてみたいと思います。
ControlCenterを立ち上げて、評価ボードの電源を入れ、BootLoaderが
表示されているのを確認して、slfifosync.imgをダウンロードします。
が、またほかのデバイスにFX3がびっくり付きで表示されてしまいました。
デバイスマネージャーを見ると、プロダクトIDが00F2になっています。
また、cyusb3.infを変更しなければなりません。プロダクトID変更後
ドライバー再インストールでFX3がユニバーサルシリアルバスコントローラー
に移動し、びっくりも消えました。
では、ControlCenterでslfifosync版FX3デバイスに何か書いてみます。
その前にこのslfifosync版FX3デバイスがどのようなInterfaceを
持っているか見てみます。
ControlCenterでConfigディスクリプタを見ることができます。
image11.jpg
エンドポイントはIN用、OUT用でひとつずつ持っています。
まずはOUT(ホストPC->FX3)から。DataTransferタブに移動して、
Bulk out endpoint(0x01)を選択してTransferボタンをクリックします。
image12.jpg
このような画面になりました。NULLデータが1024バイト送信(OUT)されたみたいです。
これがちゃんとFX3に行っているのかはFX3のデバッガなどで見るしかありません。
FX3の評価ボードでは、FX3の先に外部コントローラーがいないので、外部に対して
データが出ているかはわかりません。SVI-06では外部コントローラーにFPGAを
接続しますので、実機でやるまでデバッガで確認します。
IN転送は、Bulk in endpoint(0x81)を選択してTransferボタンをクリックします。
image13.jpg
エラーになってしまいました。これは外部コントローラーがいないので、FX3の中でホストに
送るべきデータがいないのでエラーになったのではないかと推測します。エラーコード997の
意味はわかりません。これもデバッガですね。ということで次回はデバッガ導入で行きたいと
思います。お楽しみに。
posted by デベマネ at 18:56| Comment(0) | EZ-USB/FX3

2011年11月02日

開発環境の構築7

プロパティ->詳細->ハードウェアIDを見るとPIDが00F0になってます。最初のころcyusb3.infの
PIDを00BCに変更したのがいけなかったのか??
cyusb3.infには
%VID_04B4&PID_00BC.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00BC
%VID_04B4&PID_4720.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4720
の定義しかないので、1行コピペして以下の行を追加します。
%VID_04B4&PID_00F0.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F0
それと、デバイス名定義も追加します。
VID_04B4&PID_00BC.DeviceDesc="Cypress USB BootLoader"
VID_04B4&PID_4720.DeviceDesc="Cypress USB BootProgrammer"
以下の行を追加します。
VID_04B4&PID_00F0.DeviceDesc="FX3"
これで、”FX3”に対してデバイスドライバーをインストールしなおして、
無事にFX3が認識されました。
image9.jpg
で、現状デバイスFX3はUSBのどのバスにつながっているかをしらべるために
WDKとかについているusbview.exeで調べます。以下のようになってます。
image10.jpg
USB3.0上に登録されたようです。

開発環境の構築としては、何とかなるようです。今後SVI-06を接続して、どれかのFX3の
サンプルを変更してSVI-06としてPCに認識させようと思います。
−つづく−
posted by デベマネ at 19:12| Comment(0) | EZ-USB/FX3

開発環境の構築6

cyfxbulklpautoが登録されない件は、PCを再起動で登録できるようになりました。
image6.jpg
やれやれです。WorkspaceにProjectが登録されると勝手にビルドするようです。
cyfxbulklpautoのビルドした結果、IDEのProjectExplorerは下図のようになりました。
image7.jpg
DebugツリーでBulkLoopAuto.imgが作られています。これは本来BulkLoopAuto.elfから
コンバートをかけて作るものらしいですが、プロジェクト設定でなっているんでしょう。
 elf2img.exe –i BulkLoopAuto.elf –o BulkLoopAuto.img
で、再びGetting Startに戻りましょう。
3.5 Firmware Downloadに進みます。
CyControl center utilityを使うみたいです。
Start->Programs->Cypress->Cypress SuperSpeed USBSuite->Control Center
image8.jpg
このようにウィンドウが表示されました。”Cypress USB BootLoader”が表示されているので
デバイスドライバーも正常にインストールされているようです。
次にBulkLoopAuto.imgをFX3のRAMにダウンロードするようです。
Program->FX3->RAMでBulkLoopAuto.imgを指定します。
エラー発生! Programming Failedになってしまいました。
デバイスマネージャーを見ると、ほかのデバイスにFX3がびっくりマーク付きで表示されています。
プロパティ->詳細->ハードウェアIDを見るとPIDが00F0になってます。最初のころcyusb3.infの
PIDを00BCに変更したのがいけなかったのか??
ちょっと調べてみます。
posted by デベマネ at 18:09| Comment(0) | EZ-USB/FX3

開発環境の構築5

Getting Started with FX3 SDK.pdfに戻りましょう。

次に、
3. Bind the driver for the FX3 device.
これは前回で済みですね。

次に、
4. Launch the IDE, import the example projects and build them
とあります。IDEとはEclipseでしょうか。たぶんそうでしょう。
昨日、Eclipseはインストールしたので、スタートメニューから、すべてのプログラム->
Cypress->Eclipse->Eclipse IDEをクリックします。
Workspace launcherウィンドウが表示されました。
Select a workspaceとのことなので、
C:\Cypress\FX3 SDK\firmware\basic_examples\cyfxbulklpauto
を参照で探して、OKボタンをクリックします。
image4.jpg
こんなウィンドウが表示されました。う〜ん、何をさせたいのでしょうか。
ビルドをしたいのですが、この画面を消して、IDE画面になってもWorkspaceが表示されていません。
Getting Started with FX3 SDK.pdfを見ると、3.2 Building the firmwareで
detail in Section 9.2.2 of the FX3 Programmers Manual.とあるので
そのマニュアルを見てみます。
9.2.2 Eclipse Projectsに手順が書いてありました。
まずは、9.2.2.1 Importing Eclipse ProjectsでFile>Importをクリック。
次に、2. Select General > Existing projects into Workspaceをクリック。
次に、3. Select the root directory where the eclipse projects are available. This is the directory where the FX3 SDK is installed.
とありますので、C:\Cypress\FX3 SDK\firmwareを指定して、OKをクリック。
4. All the available FX3 projects are shown. Select all the projects displayed and click Finish.で有効(?)なプロジェクトワークスペースの一覧が画面に表示されました。
Finishをクリックとのことなので、クリック! でもエラーが!
image5.jpg
Detailを見ると、Invalid project description.
C:\Cypress\FX3 SDK\firmware\basic_examples\cyfxbulklpauto overlaps the
workspace location: C:\Cypress\FX3 SDK\firmware\basic_examples\cyfxbulklpauto
なるほど、最初にIDEを起動するときにこのWorkspaceを指定したからかもしれない。
再度IDEを起動しなおしてみると、すでにいくつかのWorkspaceが登録されたみたい。
もう1回Importing Eclipse Projectsからやってみた。やっぱりエラーが表示される。
エラー内容は同じ。しょうがないのでcyfxbulklpautoだけチェックを外し、cyfxbulklpauto
を除いてほとんど登録された模様。cyfxbulklpautoはどのようにして登録されるのでしょうか。
ちょっと、調べてみます。
posted by デベマネ at 16:47| Comment(0) | EZ-USB/FX3

開発環境の構築4

64bitOSでデジタル署名をちゃんととっていないカーネルドライバーで問題と
なる件、いくつか回避策があるようです。
ひとつは、OS起動時のWindows起動前にF8キーを押して
 ドライバー署名の規制を無効にする
方法です。F8キー押しでWindowsの起動メニューが表示され、上記の
ドライバー署名の規制を無効にするで起動すると今回のドライバーでも
使用可能になります。当面はこの方法でいきたいと思います。
そのほかに、bdedit、SetupReadyDriverPlusというツールがあって
これらは、Windows起動時に毎回F8を押さなくてもいいようです。
ただし、Windowsのブート領域を変更するので注意がひつようです。
管理人は小心者なので毎回F8をぽちっとすることに決めました。

で、ドライバーは下図の通り、無事インストールすることができました。
image2.jpg

これでFX3の評価ボードが認識され、使用することができるようになりました。
まあ、これからが本番ですが、第1関門クリアです。
posted by デベマネ at 14:40| Comment(0) | EZ-USB/FX3

2011年11月01日

開発環境の構築3

Getting Started with FX3 SDK.pdfを見ると、今まで書いてきた内容が書かれていました。
これからは、このドキュメントの3章「Working with the SDK」を実際にやってみます。

3.1 Programming the FX3 device
1. Install the components of the SDK (Firmware, Toolchain, IDE and Host drivers) on the host machine.

これは済みですね。

2. Connect the FX3 board to the host machine and power the board up.

はい、入れてみます。ちなみにFX3評価ボードはあるルートでお借りしているもので、
ボードバージョンはアルファ版だそうです。PCはマウスコンピューターのSlimDesktopです。
もちろんUSB3.0付です。評価ボードのUSB3.0ポートのコネクタはMicro-Bコネクタというもので
横に平べったいものです。最近はこの手のケーブルも入手しやすくなりました。アキバで売っています。
評価ボードにUSBケーブルを差してデバイスドライバーをインストールしてますの画面になったけど
インストールできませんでしたのメッセージが表示されます。まあ、当然ですね。
これようのデバイスドライバーはUSBSuiteに入っていますのでそこからインストールします。
※ここで注意が必要です。デバイスマネージャーを見ると、”ほかのデバイス”に”WestBridge”が
びっくりマーク付きで表示されています。
C:\Cypress\Cypress SuperSpeed USBSuite\driver\bin\win7\x64
にドライバーはいるのですが、さっきの”WestBridge”にここのフォルダを指定しても
「このデバイス用のドライバーソフトウェアが見つかりませんでした」と怒られます。
それで、デバイスマネージャーでWestBridgeのプロパティ->詳細でハードウェアIDを
見ると、上記のフォルダに入っているcyusb3.infのプロダクトIDが違うことがわかりました。
cyusb3.inf
 VID_04B4&PID_00F3.DeviceDesc="Cypress USB BootLoader"
 VID_04B4&PID_4720.DeviceDesc="Cypress USB BootProgrammer"
デバイスマネージャー WestBridge->プロパティ->詳細->ハードウェアID
 USB\VID_04B4&PID_00BC&REV_0100
 USB\VID_04B4&PID_00BC
とりあえず、Cypress USB BootLoaderの00F3を00BCに変えてやってみます。他のPID_00F3も
PID_00BCに変えないといけないようです。
はい、次に進みました。(認証で怒られますが)
が、今度はWindowsにはデジタル署名されたドライバーが必要ですと怒られます。これはWindowsXP/7の
64bitOSで言われることでデジタル署名をちゃんととっていないカーネルドライバーだと指摘される
問題です。
posted by デベマネ at 19:57| Comment(0) | EZ-USB/FX3

開発環境の構築2

では、SSUSBSuiteからインストールしていきましょう。

CySuiteUSB3_x64_V1.0.0.B209.msiにてインストールします。
CySuiteUSB3_x64_V1.0.0.B209.msiをダブルクリックし、インストーラが起動します。
画面の指示に従ってインストールを行います。
Installation Completeまで来れば成功です。
このインストーラーでは以下のフォルダを生成してインストールが行われます。
 c:\Cypree\Cypress SuperSpeed USBSuite
当然スタートメニューにもCypressが追加され下図のようになりました。
 image1.jpg

中身は後にして、次にARM開発環境をインストールします。
FX3ReleaseNotes.pdfを見ても何からインストールをしていいのかわからないので
ARM_GCC_B540.msi->Eclipse_B540.msi->FX3_SDK_B540.msiの順番でインストールしてみます。
では、ARM_GCC_B540.msiからインストール。x86版みたいですね、
c:\Progrma Files (x86)にインストールされました。
次に、Eclipse_B540.msiをインストール。こちらもx86版ですね。
次に、FX3_SDK_B540.msiをインストール。こちらは関係ないのか、
c:\CypressにFX3 SDKというフォルダを掘ってインストールされました。
管理人は、Eclipsは初めてで、ARMマイコンも久しぶりなので、どこから手を
つけていいのかわからないけど、先ほどのFX3 SDKの中に
Getting Started with FX3 SDK.pdfを発見して、とりあえず読みます。
posted by デベマネ at 17:23| Comment(0) | EZ-USB/FX3

まずは開発環境の構築1

まずはCypress EZ-USB/FX3の開発環境を構築です。
”FX3 SDK”でググるとCypressの開発者フォーラムのページがヒットします。
で、http://www.cypress.com/?app=forum&rID=51892 にてSDKのダウンロード
方法が報告されてます。CypressのFTPサイトからダウンロードするようです。
記載されている、FTPサーバー名、UserID、PasswordにてFFFTPなどのツールで
必要なものをダウンロードします。(注:このFTPは時々止まりますので再開可能なツールがいいです)
管理人は、Beta3_SDK_FX3フォルダをダウンロードしました。(212MBです)
日付の新しいFX3SDK_Beta2というフォルダもありますが、ファイル名を信用してBeta3にしました。
Beta3_SDK_FX3フォルダの中身は以下のようになってます。
Beta3_SDK_FX3
 |− FX3 SDK
 |− SSUSBSuite
2つのフォルダがあります。さらに掘っていくと以下のようになってます。
Beta3_SDK_FX3
 |− FX3 SDK
 |  |− ARM_GCC_B540.msi
 |  |− Eclipse_B540.msi
 |  |− FX3_SDK_B540.msi
 |  |− FX3ReleaseNotes.pdf
 |− SSUSBSuite
    |− CySuiteUSB3_x64_V1.0.0.B209.msi
    |− CySuiteUSB3_x86_V1.0.0.B209.msi
    |− ReleaseNotes.pdf
リリースノートとインストーラだけです。
FX3 SDKフォルダはFX3内蔵ARMマイコンを開発するためのツールが格納されており、
SSUSBSuiteフォルダはPC側のソフトを開発するためのツールが格納されています。
詳しくはそれぞれのReleaseNoteをご覧ください。
で、SSUSBSuiteのReleaseNoteを見ると、以下のように動作環境が記載されています。
 Operating System name:
  Windows XP SP3(wxp) (32-bit only)
  Windows Vista (wlh)
  Windows 7(win7)
 CPU Type:
  x86(32bit-i386)
  x64(64bit-amd64)
 Microsoft Visual Studio:
  All libraries and sample examples are compatible with Visual Studio 2008.
管理人のMyPCはWindows7_x64なので64bit版でインストールしてみます。
posted by デベマネ at 16:22| Comment(0) | EZ-USB/FX3