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 件のコメント:

コメントを投稿

自作CPUで遊ぶ 25

まだ制御ソフトが完成していないので今まではスピンドルを移動するために一々簡単なプログラムを書いて移動させていたのだが、非常に面倒なのでCNCペンダント的なものを作ることにした。 右側の縦に2つ並んでいるスイッチ...