FT2232D

2010年5月20日 (木)

FT2232DでI2C(その2)

FT2232をFTCI2C.dllで使ってみました。

I2CのEEPROMから16byteリードするところを
デジタルオシロでI2Cの波形を見てみたら、
なんだか8bit転送?する間隔(先頭から次の先頭まで)が
1ms以上ありました。

USB to I2C IntefaceにあるDelphiサンプルについていた
eeprom読み出しのexeファイルでも、

FTCI2C.dllを使っておらず直接ftd2xx.dllを使っているためか
若干間隔が短いですが、それでもそれなりの間隔がありました。
(こちらは1byteずつアドレス指定して読み出してますけど。)

I2C用のdllまであるということで期待してましたが、
だからといってI2Cの1リードパケット分実行したら
それをUSB経由で返す、というわけじゃなさそうです。多分。
1byteリードしたらそのままそれをUSBで返してるのかも。
※SnoopyProで見たら、ホストからコマンドがきたときに
1byteずつ返している様子がわかりました。
確かにi2cで100kHzでデータ転送してるけど
転送部分だけ100kHzでもなあ。

これだったら78kとかでプログラム組んだ方が
波形も追いやすいし、もう少し早くできるかも。
トラ技付録78kにルネサスの仮想comポートのサンプルを
修正してためしてみていたのでそんな気がしてきました。

あまり手をかけたくないのですが、
やっぱりF/Wを作成するほうが柔軟にできそうです。
もう一回78kのほうをいじってみようかな。

| | コメント (0) | トラックバック (0)

2010年5月19日 (水)

FT2232DでI2C

I2Cの制御ができるUSBデバイスで、手ごろな値段のものが
秋月で売ってあるというので、ためしに買ってみました。
「FT2232D USB-シリアル2ch変換モジュール」というやつです。
I2CやJTAGのような機能を使う場合は、EEPROMも必要とのことで、
一緒に購入。でも、DIPだったので「AE-FT2232ボードにEEPROMを実装する
をまねてつなぎました、意外と大変。

FT2232DにはFTCI2C.dllというI2C制御用のdllが用意されています。
FTDIでダウンロードできます。また、EEPROMに設定を保存するツールや
PCのドライバなどもFTDIからダウンロードできます。

で、このdllを使えば簡単にI2Cが使えると思ってたら
なぜかとっかかりのI2C_GetNumDevices()で検出できません。
もちろんI2C_Open()もできません。
でも、USB to I2C IntefaceにあるDelphiサンプルについていたeeprom読み出しの
exeファイルではあっさり動きます。


で、FTCI2Cのソースをチェックしていたらわかりました。
FT2232DのEEPROMのUSB String Descriptersに
「USB <-> I2C and UART」と書いていたのですが、
ソースではdevice descripterを読み出して、「 A」があれば
それも含めてそれ以降が2文字であればI2Cが使えるデバイスという
判断になってました。私の場合、途中に「 a」があり大文字に変換されていたようで
これが原因でデバイスなしとなってました。
結局、「USB<->I2C/UART」のように変更したら
FTCI2Cで動かせるようになりました。

多分、descripterの一番後ろ2文字が「 A」だったらという判断に
したかったのでは。

で、I2Cを動作させてみましたが、思ったよりかなり遅くて驚きました。
うーん。まだなんかあるのかな。
※FT2232Dの抜き差しで少し早くなりました、何だったのかな。

| | コメント (0) | トラックバック (0)