2013年11月28日

OV7670とSVI-06をつなぐ中継基盤をつくろう〜後編〜

OV7670とSVI-06をつなぐ中継基盤をつくろう〜前編〜の続きです。

オムニビジョン(OmniVision)製OV7670とSVI-06を接続する中継基盤を作っていました。
しかし、前回左右逆に配置をしてしまいましたので、再度配置表から作り直します。

まずは、Excel上に配線図を作っていきます。作ったものが下記になります。

OV7670配線イメージ図-正.jpg


この配線図上に配線をしていきます。配線まで行ったものがこちらです。


pin配線-正.jpg
※2014/1/30:配線図を修正いたしました。
※2014/2/24:XCLKへの配線を修正いたしました。


配線図のExcelファイルはこちらです。
配線図_OV7670.xls

この配線図をもとに、基盤に回路をはんだづけしていきます。
1度作っていますので、2度目は簡単に作れます。


中継基盤.jpg


これでは、配線が正しい中継基盤が出来上がりました。

中継基盤がやっとできましたので、SVI-06につないで、設定ファイル(ov7670_VGA_UYVY.txt)を送ってみます。

やはり応答がありません。。。。ただの屍のようだ

配線は正しいのですが、何がいけないのでしょうか。

初めから確認してみましょう。
まず、配線は正しいので、その配線が正しくつながっているか、テスターで導通チェックをしてみます。

確認の結果、5か所も導通チェックNGの配線がありました。

初心者の方は要注意ですが、はんだづけしてつながっていると思われても、深く差しすぎていたりしてうまくつながっていない可能性があります。
はんだ付けが終了したら、動かす前に導通チェックをお勧めします。

<作成のポイント5>
すべてはんだづけしたら、テスターを用いて導通チェック!

さて、導通チェックがOKになるように、再度はんだつけを行います。
これで中継基盤の作成は完了しました。


あとはI2C通信で、カメラモジュールのレジスター設定を行うだけです。
でもこのオムニビジョン(OmniVision)のOV7670は電源を入れただけでVGAサイズの画像を取得することができます。
その時に取得した画像がこちらです。


初期設定前画像.bmp


色見本表を映していますが、全体的に紫がかっていて神秘的ですね。
とはいえ、色味がおかしいです。

今回OV7670からの画像取得には、SVI-06を購入すると標準でついてくるSVIMonという画像描画用のアプリケーションを使用しています。
たとえばこのような形で表示されます。


svimon描画.jpg


PCの裏側を撮影していますが、全体に紫色がつよくてなんだか不思議な世界感を醸し出しています。

オムニビジョン(OmniVision)OV7670カメラの映像を見るためには、SVIMonのオプション設定の変更が必要になります。
Sync Mode」と「Data Input Timing」の設定を下記の画面と合わせます。
(この設定もデータシートに書いてある、Frame Timingを確認して設定します。)


SVIMonとその設定値.jpg


では次にこの色味などの調整をしていきます。

イメージセンサには色や各種機能を調整することができるようになっており、具体的には、イメージセンサのあらかじめ決められたレジスターに値を設定することで、これらの調整を行います。
では、あらかじめ決められたレジスター値はどこに記載されているかというと、イメージセンサについてくる、データシートと呼ばれるものです。

今回イメージセンサを株式会社日昇テクノロジーの通販サイトで購入しましたので、その通販サイトにデータシートも一緒に置いてあります。

OV7670購入サイト

OV7670データシートPDFファイル

OV7670のデータシートのP11に「Register Set」という項目があります。
このような記載の箇所に設定用のレジスター表が掲載されているので、そこを探します。
レジスター表がどこにあるかわかったら、あとは各値の意味を一つ一つ確認して設定を行っていきます。
この設定値を決める作業はなれないと難しいと思います。
手探りで探し当てるしかないか、もしくは、Linuxのソースコードに初期設定値があったりするようなので、Google検索でカメラの型番を入れて、検索してみるのがよいかと思います。

今回は、トランジスタ技術2012年3月号の特集記事「始めよう!チョコっとカメラ」に初期設定値が掲載されていましたのでそれをI2C通信で設定します。
設定ファイル(ov7670_VGA_UYVY.txt)はこちらです。

初期設定を行った後の、イメージセンサの画像が下記になります。

初期設定後画像.bmp

ということで、正しく表示されるようになりました。
今回作成した中継基盤は完成となります。

それでは最後にポイントのまとめです。


1.材料をそろえる前に中継基盤の配線図を作っておこう!

2.いきなり基盤に配線していくのではなく、Excelシート上で配線してみてイメージをつかみましょう!

3.ピン配置表・イメージセンサの両方に目印があるから、まずは目印を探しましょう!

4.はんだづけ初心者は絶対フラックスを使いましょう!

5.すべてはんだづけしたら、テスターを用いて導通チェック!



いかがだったでしょうか。OV7670とSVI-06接続用の中継基盤を作成しました。

今後もオムニビジョン(OmniVision)社以外のカメラ接続用中継基盤も作ってまたブログ記事として公開していきたいと思います。

posted by デベマネ at 12:36| Comment(0) | 中継基盤

2013年11月26日

OV7670とSVI-06をつなぐ中継基盤をつくろう〜前編〜

弊社ではイメージセンサから映像を取り出すための、画像キャプチャーボードSVI-06を販売しておりますが、導入を検討されているお客様から、「イメージセンサとSVI-06をつなぐにはどうしたらよいのですか」と質問を良く受けることがあります。
弊社からは「中継基盤を作成する必要があります」とご回答をさせていただいておりますが、もう少しわかりやすい回答をしたいと考えておりました。

そこで今回の開発者ブログでは、SVI-06とイメージセンサをつなぐための中継基盤を作ってみました。
今回ははんだづけを行うだけの一番シンプルな中継基盤を作成しています。

今回中継基盤をつくるのは、はんだごてを大学の授業で1度しか使ったことがない超が付くハードウェア製作の初心者です!!!

そんな私が、中継基盤を作成して感じたポイント苦労したこと等を含めて初心者の視点でブログにまとめてみます。

まずは、中継基盤を作るための準備するものはこちらです。

ユニバーサル基盤(穴数:25×15)

ピンソケット(メス)2×25(50P)

L型ピンソケット2×10(20P)

ジュンフロンETFE電線 0.26mm 10m(青)

OV7670カメラモジュール(SCCBインタフェース)

SVI-06

・はんだごて・はんだ・FS‐200 フラックス

・ピンセット

・中継基盤の配線図(Excelで作成)(配線図_OV7670.xls)
※2013/11/28:OV7670の配線図に一部誤りがありましたので修正したものに変更いたしました。

ピンセットは細い導線を配線したり、はんだづけするときに導線をつまむなどに役立ちます。
初心者の方は特にあったほうがやりやすいと思います。

SVI-06につなぐイメージセンサとしてオムニビジョン社のカメラOV7670を使いました。
(ちなみに、一部配線変更を行うとOV5642カメラも今回の中継基盤を使うと接続可能です。)

まず、イメージセンサのピン数とSVI-06ピン数を調べてみて材料を購入しに行ったのですが失敗したと思いました。
それは、今回なにげなく購入したピンソケットを使うと、中継基盤の配線がしづらいピン配置になってしまったからです。
またカメラの向きも想定していたものと偶然一致していましたが、それもおかしな方向を向いていたかもしれません。
そう考えると、材料をそろえる前に中継基盤の配線図を作っておくほうがベターだといえます。

<作成のポイント1>
材料をそろえる前に中継基盤の配線図を作っておこう!

とはいえ、材料を買ってしまったので、今回はこのピンソケットに合わせて、中継基盤の配線図を作ります。

配線図を作るのに必要なのは、中継基盤と接続するSVI-06とOV7670のピンアサイン表になります。
SVI-06のピンアサインは、ハードウェアマニュアルに記載されていますご確認ください。

それぞれのピンアサイン表からピン配置をExcelのシートに並べたものが下記になります。

配線図1.jpg

※このピンアサインは間違っています。
初めての私が躓いた過程も含めて記載のためこのまま掲載しています。
正しいものは次回もしくはこちら(配線図_OV7670.xls)をご覧ください



左側の背景色が青の部分がSVI-06のピンアサインで、右側にある橙色背景色の部分がOV7670のピンアサインになっています。
実際の基盤上では、表面にOV7670接続用のピンソケットを、裏面にSVI-06接続用のピンソケットを接続します。
このExcelで作ったピンアサイン図をもとに、実際に配線する線もExcelシートに記載して、配線のイメージをつかみます。
途中までですがこのような感じに行いました。
作っている人しかわからないくらいごちゃごちゃしていますが。

pin配線1.jpg

※このピンアサインは間違っています。
初めての私が躓いた過程も含めて記載のためこのまま掲載しています。
正しいものは次回もしくはこちら(配線図_OV7670.xls)をご覧ください


<作成のポイント2>
いきなり基盤に配線していくのではなく、Excelシート上で配線してみてイメージをつかみましょう!

このようにして、最後まで線で結んでいき、配線のイメージをつかんだところで、実際の回路基板に配線を行っていきます。

最後まで配線したものがこちらになります。

カメラコネクタ側-NG.jpg
<OV7670ピンソケット側>

SVI-06側-NG.jpg
<SVI-06ピンコネクタ側>

SVI-06ピンコネクタ側の配線がやや回りくどいことになってしまいました。
途中から気が付いたのですが、コネクタのヘリをぐるっと回さないほうが見栄えがよいです。

また、はんだづけですが、フラックスをつけてはんだづけを行うとほとんど失敗しなくなりますのでぜひフラックスをつけてはんだづけをしましょう。
初心者の私でもこのようにきれい??かどうかはわかりませんが一応はんだ付けに失敗せずに行うことができました。

<作成のポイント3>
はんだづけ初心者は絶対フラックスを使いましょう!


さて、実際にSVI-06とOV7670をつなげて動くかどうか確認してみましょう。

ここで実際にカメラをつなぐ前にカメラに供給する電圧を調整します。
今回カメラの電源とはSVI-06のVDD_Hピンで接続しています。そのため、SVI-06のVDDHの電圧を調整します。
購入サイトの表記に低動作電圧:2.5V〜3.0VDCとあるので、VDDHを2.8Vに調整します。調整の仕方はSVI-06説明動画をご覧ください。

カメラへの供給電圧を調整したら、カメラに初期設定を行います。
初期設定をおこなうにはまず、SVI-06に付属のI2Cコントロールソフトを起動します。
OV7670のデータシートのP11にslave addressの指定の記載があります。

「slave addresses are 42 for write and 43 for read」(数値は16進表記です)

弊社のSVICtrlは上記のアドレスを1ビット右にシフトした値「0x21」を設定します。(弊社の仕様として、APIの中でRead、Writeの値を1ビット左シフトして使用しています。)
また設定ファイルはこちら(ov7670_VGA_UYVY.txt)を使用しています。


SVIctl画面.jpg

通信を行わせようとしますが、Errとなってしまい、何も設定できません。
何度もやってみましたが全くできません。

おや???何でしょうか???

今までの作業としては配線しかしていませんので、もう一度配線を見直しましょう。


OV7670ピンアサイン比較.jpg

これは、実際のOV7670で見た時にはいったいどっち向き何でしょうか???
カメラが付いていないから裏面の図なんじゃないかと思っていたのですが。。。


OV7670前後画像.jpg

OV7670の前の左下(丸印のところ)に△の印とはんだづけの形が異なっているところがあります。

そこで再度OV7670のピンアサイン表を確認します。やはり上の左下のところに■と矢印があります。

OV7670ピンアサイン確認.jpg

そこで、OV7670の実機をもう一度確認すると、OV7670の前からの写真と同じ位置にも同じものがあるわけです。ようするに、中継基盤のOV7670ピンソケットのピンアサインが左右逆でした。がっかりしました。


<作成のポイント4>
ピン配置表・イメージセンサの両方に目印があるから、まずは目印を探しましょう!


ということで、今回はここまでとします。
次回新たに中継基盤を作り直して動作させるところまで進めたいと思います。

次回の更新は2013/11/28(木)を予定しています。
posted by デベマネ at 15:30| Comment(0) | 中継基盤

2013年11月18日

ET2013出展!!

2013/11/20(水)〜22(金)までパフィコ横浜で行われますET2013にネットビジョンも出展いたします。

ブースはF-25で、ザイリンクス社の前のブースになります。

今回の展示では、大きく2つのデモを展示いたします。
1.SVI-06の優れた特徴である「各社のイメージセンサーに簡単につなげる」ことができるデモ

2.ステレオカメラを用いた距離計測のデモ

そのほかパネル展示では、FX3の高速化を行った経験をもとに、USB3.0で高速に転送できる
ソリューションの提供を展示いたします。
また、弊社SVI-06につながる、モニターボードの説明も展示いたします。

詳細は下記の説明をご覧いただき、当日ブースで実際にデモをご覧いただければ幸いです。


2-1  ステレオカメラを用いた距離計測のデモ
FPGA動的再配置の使用例として、SVI-06一枚に2個のVGAカメラモジュールを接続し、ステレオカメラ画像処理の実演をいたします。
被写体に鉄道模型を動かしながら、距離算出と特徴点座標のリアルタイム表示を展示します。
この2CH入力、特徴抽出はサンプルIPとして、動的再配置契約ユーザーに提供されます。
URL:http://www.net-vision.co.jp/solution/svi-logic.html


ステレオ画像距離測定展示説明パネル.jpg


2-2 SVI-06の優れた特徴である「各社のイメージセンサーに簡単につなげる」ことができるデモ
弊社は各社COMSセンサー検査ジグとして、SVシリーズを長年ご愛用していただいております。
最近は1台のPCで複数センサーモジュールを接続したいというご要望が増えてきました。
複数枚のSVI-06を使用し画タイプ、画サイズ、フレームレートの異なるセンサーを同時接続して展示いたします。
また、録画した画像再生として、イメージジェネレーターSVO-02からの出力も同時再生します。
URL:http://www.net-vision.co.jp/solution/stereocamera.html


ET2013展示パネル.jpg


2-3 受託開発&ボード展示
 USB3.0-ICを使用した、受託開発のご提案です。
サイプレス社EZ-USB-FX3を使用し、高速転送の場合はFPGA&FX3、1080P-30fps程度の場合はFX3単体での提案です。
 ドライバもUVC、Vendor Class、アプリケーションプログラムも開発いたします。
開発したボードを展示する予定です。
 受託開発品ではありませんが、Spartan-6-XC6SLX150を搭載したSVI-08も展示予定です。
posted by デベマネ at 16:30| Comment(0) | おしらせ

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