2012年3月2日金曜日

FT232RのBit Bang Mode

FT232RというUSB-UART変換ICがある。このICにはBit Bang Modeという機能があって、UART用の端子がGPIO的制御が可能になる。  FT232Rを搭載したUSB-UART変換基板は秋月電子やマルツパーツ等色んなところで売られていて私もSparkfunのFTDI Basicを1つ持っている。 また、Internetで検索するとBit Bang Modeを利用したJTAG プログラマの情報等も幾つか見ることができる。 私もいつかjwrtでFT232Rを対応してみたいと考えていたのだが、今般、やってみた。

Hardwareは以下のように、FRISKの箱に入れた。




Spartan3E基板で動作確認しているところ


Bit Bang ModeにはAsynchronous ModeとSynchronous Modeがあるが、 プログラムはSynchronous Modeを使っている。 ただし、読み出しはFT_ReadではなくFT_GetBitModeで行っている。 FT_Readが上手く使えればいいのだが、私の使い方ではFT_GetBitModeよりもLatencyが大きくなってしまう。 以下のプログラムでRead Latencyを評価した。



Synchronous ModeはWriteに同期してReadが行われるので、FT_Writeの後にFT_Readを実行して、1バイトのデータがリードできるかを、FT_SetTimeoutsのタイムアウト値を変えながら見てみた。
リードのタイムアウト値が1msecの場合は以下のようになった。


少しずつ増やしてみたが、結局70msecでまともにリードできた。


ということは、つまり、FT_Readを使った場合少なくともRead Latencyは70msecを要するということだと思う。 FT_232Rは256深度のRX Buffer(FIFO)を持っているので、FT_Readを256個単位で実行するようにすれば、1個あたりのLatencyは小さくできるかも知れない。ただし、リードがライトと同期すること、そして、JTAGのTCKの波形をライトで作るので意味のあるリードデータは半分の128個になるので、良くて0.5msec位だろう。 また、jwrtの構造上、最大16bit分しかまとめ書きできないので、Latencyは4msec位にしかならないだろう。これに対してGetBitModeのLatencyは3msec程度でリードできているので、FT_GetBitModeを使うことにした。
しかし、何か腑に落ちないんだよねー。
もちっと高速にリード出来てもいい気がするんだよなー。

以下はSpartan3E 250Eに書き込んでみたところ。
な、なんと763secもかかっている。


以下はROM(xcf02s)に書き込んでみたところ。
1718sec!!


ちなみに、以下はプリンタポートにつなぐタイプの自作JTAGプログラマでXCF02Sに書き込んだ場合だ。


両者の比較
体積はおよそ30分の1、
性能は100分の1。。。だぁ~~ orz


という訳でFT232Rを使いこなすためには、もっと修行が必要なようだ。
でも、今はFT232Hというデバイスも出ているので、FT232Rで頑張るよりも
そっちを使った方が楽かも知れない。

0 件のコメント:

コメントを投稿

ERROR: Failed to spawn fakeroot worker to run ...

なにかと忙しくてなかなか趣味の時間を確保できない。 ...orz  家の開発機のOSはLinux Mintなのだが、最近バージョンを22に更新したところ、myCNC用のpetalinuxをビルドできなくなってしまった。ビルドの途中で ERROR: Failed to spawn ...