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