旧フォーラム投稿日:2010.03.24 (この記事は旧サポートフォーラムより転載されたものです)


小島です, USB101 にようやく火を入れました.
それで,どう動かしたもんかと悩んでいるのでヒントがあれば教えてください.

やりたかったことは Cygwin で動かせるパラレルIOです.仮想COMポートなんだから
RS232C にデータを送るのと同じやり方で USB101 にデータを送れば出力端子に
ポンポンとBIT列が出るだろうと思っていたのですが,そんなに簡単でないことが
わかってきました.

まず FT2232H を Asyncronous BitBang mode というのに変更しなくてはいけない
らしいのですが,FTDI のページを探してみても具体的にどうすれば出来るのか
さっぱりわからないでいます.EEPROM ではなく,アプリケーションソフトで
設定しろと書いてあるのですが,具体的にどうすれば設定できるのかが書いて
ありません.

アプリケーションノートを探すと,dll を Visual C++ かなにかで叩くやりかたは
乗っているのですが,使いたいのは Cygwin + gcc なのであまり参考になりません.
仮想COMポートしか見えない状態で何かのコードを送って何とかするという方法を
とりたいのです.

それで考えたのは,例えば,Windows に付属のターミナルのような COM ポート
に何かを書いたり読んだりする単純なソフトで FT2232 を動かせないか?という
ことです.これができれば Cygwin だろうが何だろうがOKになります.こういう
ことは可能でしょうか?

書込をありがとうございます。
Cygwinの環境についてよく理解しておりませんが、Windows上のCOMポートが利用できるのでしたら、別 の仮想COMポートを生成し、Windows側で、送られてきたデータをもとに、DLLを制御するような常駐アプリケーションを作る方法しかないかも知れ ません。

例:
https://www.hdl.co.jp/freesoft/bpsxchg/index.html
上記はただ中継するだけですが、中継するのではなく、COMXXで受けたデータに基づいて、DLLを制御しパラレル出力(あるいは入力)をやらせるようなアプリケーションがあれば良いとおもいます。
フリーの仮想COMポートドライバを検索したら、下記のようなものがありました。
http://www.vector.co.jp/soft/winnt/hardware/se355108.html
これはフリーでなく、SAMPLEのようです。

[Cygwin上のアプリケーション]<---comX---->【comX<-->comY】<--->『comY--dll』<-->USB-101(FT2232H)
【comX<-->comY】と『comY--dll』の部分とを、Winodows上で下請けアプリとして常駐させる方法です。
速度も犠牲になるかも知れません。

Cygwin環境から、WindowsのDLLを呼び出す方法があればそれが一番良いとおもいます。
 


外部に回路を追加することで、仮想COMポート経由で出力したデータを読み出すことは可能です。
(EEPROMの書込でFIFOモードなどに設定が必要)
下記などを参考にごらんください。

https://www.hdl.co.jp/USB-001/usb001-t8.html

https://www.hdl.co.jp/USB/mitsutoyo/index.html

FT2232Hは、FIFOとして動作しますので、仮想COMポートを用いるならば主体的にデータを出力させることはできず、外部から読み出すことが必要になるのです。


検索により、下記のサイトを見つけました。

http://www3.atword.jp/kmgs/2008/10/28/bit-bang%E7%94%A8dll%E3%81%AE%E4%BD%9C%E8%A3%BD/

ご参考になれば幸いです。


ありがとうございます.これ↓のおかげでうまく出来ました.
http://www3.atword.jp/kmgs/2008/10/28/bit-bang%E7%94%A8dll%E3%81%AE%E4%BD%9C%E8%A3%BD/
Cygwin で DLL を叩くというのは初めての試みでしたが,なんとかなりました.

転送速度を測ってみたところ,連続送出では 14Mbyte/s (114Mbit/s) ぐらいの転送ができるようなので,
USB2.0 の理論的な上限 (480Mbit/s) に比べてまあまあの性能かと思います.

しかしFT2232 の ch A に8bit 書き込み ch B から 8bit 読み出しのようなことを連続でやらせると,
1K byte/s ぐらいしか行かないようです.Async Bit-Bang だとそんなもんかもしれません.
昔 ISA BUS で作った I/O は 読み書きしても 1Mbyte/s ぐらいは出たので,そこまで
早くしたければ FT2232 で FIFO モードを使うとか,そういう解しかないのでしょうね.

1byte 出して 1byte 受けて,というような I/O が必要だったのですが,
それを USB 経由でやろうとすること自体が非効率なのでしょうか.
FIFOに乗っけるような回路を作るしかないのかもしれないですね.

USBの通信形態では、通信できるときにできるだけたくさん送信したほうが効率がよくなります。
1バイトのやりとりは与えられたタイムスロットを有効に利用できません。
USB1.1ではタイムスロットが1ms間隔ですが、USB2.0のHi-Speedでは125usです。
USBをすべて占有したとしても、1バイト送るのに125usかかるわけです。
そうだとすると8Kbytes/secにしかなりません。


なるほどそういうことでしたか.USB の勉強が足りませんでした.
なんか考えて USB101 を使うことにしますね.
(koji)


[kw] 2010-03-24 USB-101 FT2232H FAQ-FA


[]