FTDI Chip製FT232HのBit Bangモードの速度測定とソフトウェアI2C通信
2015/08/30作成

従来よりFTDI Chip製USB接続RS-232C変換チップの上位モデルでは無償で公開されている専用のデバイスドライバを用いる事で、Bit Bangモードという機能が利用できるようになり、コンピュータ上でGPIOのように扱える事が知られています。
秋月電子通商ではその中でも最上位モデルの一つ(2回路入り、4回路入りを除く)であるFT232Hを搭載したモジュール基板が販売されています。
今回はそのモジュールを購入し、動作速度の測定とソフトウェアI2C通信の実装を行ってみました。

FT232H搭載基板

まずは普通に基板に付属のピンヘッダを半田付けし、モジュールを組み立てました。
普通に作っても面白くないため、今回はUSBケーブルの入手性を考慮し、USBコネクタを実装済みのMini-BタイプからMicro-Bタイプへ換装しました。

I2C変換回路

続けて制作するI2C変換基板の回路を設計しました。
一応メーカーのサイトにはI2C用の回路例が公開されているのですが、今回はスレーブ側からのSCLラインのプルダウン(Clock Stretch機能、速度が犠牲になるため実装されていない場合も多い)も検出できるように、SCLにも入力を割り当ててあります。
モジュール側の3V3端子から3.3Vを供給し、AD0端子をSCL入力、AD1端子をSCL出力、AD2端子をSDA入力、AD3端子をSDA出力として扱い、AD2およびAD4の1kΩの抵抗をSCLおよびSDAのプルアップ抵抗と電流制限の兼用としています。
なお、入出力端子はモジュール全体でAD0~7の8本存在し、また8本の端子は全て同等でそれぞれ独立に入力または出力のいずれかとして動作できるため、この組み合わせである必要はありません。

I2C変換基板

I2C変換基板を制作しました。
これを先ほど組み立てたモジュールに取り付けて使用します。

使用時の様子

USBケーブルをコンピュータに接続し、さらにI2Cデバイスを取り付けて完成です。

次にコンピュータ側からI2Cデバイスを制御するためのソフトウェアを作成しました。
以下のソースコードは、専用のドライバを読み込んでFT232HをBit Bangモードで動作させ、浜松ホトニクス製のカラーセンサS11059-02DTを使用し、赤、緑、青、赤外の4種類の光の強さをlx単位で表示するものです。
I2Cとしての動作速度はUSB 2.0接続で2kHz程度、USB 1.1接続で250Hz程度ですが、カラーセンサの露光時間の都合により、このような低速動作でも問題ありません。
Windows 7上のVisual Studio 2008およびWindows 8.1上のVisual Studio 2013でコンパイルと実行を確認しています。
ソースコードはMITライセンス(修正BSDライセンスと互換)で公開しますので、ご自由にお使いください。



ここからはFT232Hの動作速度を検証します。

まず先述のBit Bangモードの説明ですが、このモードでは1クロックにつき、8本の端子のうち入力として設定したものの電位をHまたはLとして取得し、出力として設定したものの電位をHまたはLに変更し、それらを設定したクロックの周期で行う事が出来ます。
このような動作によりコンピュータからは8本のGPIOのように扱えるため、AVRマイコン用のライタ等にも利用されてきました。

FT232HがFT232R等の従来品と大きく異なるのは、USB 2.0 High Speedモードに対応し、データ転送速度の向上に伴い、動作速度が大幅に改善された点です。
これについて少し検索してみたところ、FT232HをBit Bangモードの動作速度について検証しているサイトが見つからなかったため、自分で検証してみました。

今回は以下のソフトウェアを作成し、最高速度を測定しました。
コンピュータからFT232Hへ各クロックの状態(クロック毎に8本の端子でHとLを交互に出力する)を示すデータを転送する際のバッファのサイズを変化させながら速度を測定します。
ソースコードを以下に示します。
こちらのコードもMITライセンスとします。



波形1

波形2

結果は最高で約9MB/sであり、1端子あたり平均で9MHz(波形としては4.5MHzの矩形波)である事が分かりました。
端子にオシロスコープのプローブを当ててみたところ、瞬間的には18MHz(用意したオシロスコープが48MS/sで帯域不足のため30MHzの可能性もあるが不明)であり、間欠的に動作しているようです。
従来品はUSB 1.1接続であり、その場合の速度は平均で1MHz、瞬間的に2.4MHzのため、USB 2.0接続により8~9倍程度の高速化が実現されているようです。


目次 質問フォーム Q&A このサイトについて トップページ