この記事でわかること
・USBインターフェースICの種類と特徴
・FTDI製ICを使用するのに必要なUSBドライバ(VCPとD2XX)
・設定ツールFT_PROGについて
パソコンをマイコン等の外部機器と通信させたい場合、
USBインターフェースICがよく使用されています。
USBインターフェースICの種類は豊富で、
定番メーカーであるFTDI(※1)製だけでも40種類以上もあるため、
どれを選べば良いか迷ってしまいます。
※1:Future Technology Devices International 英国の半導体メーカー
本記事では、USBインターフェースICの種類と特徴を説明すると共に、
FTDI製ICを使うための基礎知識として、
USBドライバや設定ツールFT_PROGについても解説します。
USB通信の基礎知識については下記記事で解説しています。
USBインターフェースICについて
過去(USB登場前)のPCにはCOMポートと呼ばれるD-SUBコネクタがあり、
RS-232C規格によるシリアル通信を行っていました。
このRS-232C通信は、一般的なマイコンのインターフェースであるUART(※2)通信と
伝送形式が似ており、基本的には電圧レベル変換を行うことで、
PCとマイコン間を通信させることができました。

※2:Universal Asynchronous Receiver Transmitter(汎用 非同期式 受信機 送信機)
ユーアートと呼ばれ、クロック信号を使用せず、送信側と受信側とで、
互いにタイミングとスピードを合わせて通信するため、調歩同期式とも呼ばれます。
UART通信については下記記事で解説しています。
しかし、USBポートに置き換わった現在のPCが行うUSB通信はNRZI方式(※3)で伝送されるため、
UARTとは仕組みが全く異なることから、そのための変換回路を経由させる必要があり、
この回路を持つUSBインターフェースICは、USBシリアル変換ICや、
USBブリッジIC(※4)とも呼ばれます。

※3:Non Return to Zero Invertの略で、直訳すると「非ゼロ復帰反転」となり、
ビット毎に一度電圧をゼロに復帰(リセット)せず、ビットデータが0の時のみ電圧を反転させることを意味します。
詳しくはUSBの基礎知識で解説しています。
※4:ブリッジ「橋渡しをする」という意味で、USBからUARTなどの別の通信方法に変換させる機能のこと。
USB通信機能を持つマイコンもありますが、種類が限られています。
また、使用の際はUSB通信ソフトが必要で、複雑な処理となるためプログラム作成は難しく、
メモリ容量も多く確保しなくてはなりません。
殆どのマイコンにはUARTインターフェースが搭載されており、
USBに比べ動作がシンプルなので複雑なプログラムを必要とせず、少ないメモリ容量で済みます。
USBインターフェースICを使用すれば、UART通信をUSB通信に変換してくれるので、
マイコン側ソフトはUSBを意識することなく、PCとの通信処理を行うことができます。
USBインターフェースICの種類
USBインターフェースICの定番メーカーであるFTDI製のICは、
登場時期によって、第〇世代というカテゴリに分類されており、
機能毎に幾つかのシリーズに展開されています。
また、パッケージタイプが複数種あるICの場合、ここに記載した型名の末尾にQやLなど、
パッケージ種類を示す1文字が続きます。
(例えば、FT232Rについては、FT232RQはQFNパッケージ、FT232RLはSSOPパッケージとなる)

<基本タイプ>
1999 年に最初のUSBシリアル変換IC FT8U232AMと、
USBパラレル変換IC FT8U245AMが発売されています。
USBシリアル変換ICはUSB信号をシリアルIF(UART信号)に変換し、
USBパラレル変換ICはパラレルIF(データバス信号)に変換します。

以後、FT232はシリアルIF、FT245はパラレルIFを持つICとなっています。
その後、リセット回路やUSB信号のプルアップ抵抗(※5)が内蔵され、
Bit-Bang(ビッドバング)モード機能(※6)を追加したFT232B、FT245Bが登場します。
※5:USB 2.0の場合、USB信号(D+,D-)のどちらがプルアップされているかで
ホストは転送モード(Full-SpeedかLow-Speed)を判断します。
詳しくはUSBの基礎知識で解説しています。
※6:FT232ならUART信号、FT245ならデータバス信号のピンを、8個のGPIO(汎用入出力信号)に切り替えるモード

2005年に発売されたFT232RとFT245Rは、それまで外部に必要だった発振器や、
設定保存用のEEPROMを内蔵しています。
USBシリアル変換ICの定番品となったFT232Rについては、
様々な機能を割り当てられる5本のCBUS信号も持っています。

Rシリーズは現在、NAND(Not Recommended for New Design:新規設計非推奨品)となり、
その改良型であるRNシリーズ(FT232RN、FT245RN)が販売されています。
RNシリーズは、Rシリーズと基本的には互換性あり(ピンコンパチ)ですが、
電源(Vcc)が3.3Vでも内蔵発振器が使えるようになりました。
但し、外部発振器を使用する場合は、入力電圧の上限が低下しています。
OSCI入力電圧(max) FT232R:3.63V FT232RN:1.98V(FT245も同様)
このため、RシリーズからRNシリーズへ置き換えを行う際は、
内蔵発振器や外部水晶振動子を使用している場合は問題ありませんが、
外部発振器を使用する際は出力が1.98V未満にする必要があります。
<廉価版タイプ>
Xシリーズは小型・廉価版タイプです。
これは、よく使うピンに絞る(※7)ことで、ピン数を減らして小型パッケージにし、
また、電源電圧を3.3V~5.25Vから1.8V ~ 3.3Vに低電圧化(※8)したことで、
低消費電力&低コスト化を実現しています。
※7:外部発振器or振動子の入力ピンが無くなり、発振回路は内蔵発振器のみ利用可。
※8:5Vトレラント機能があるので、5V系信号は入力可能。
FT231XはFT232Rの廉価版に相当し、8本のUART信号と4本のCBUS信号を持ちます。
FT234Xについては、UART信号を基本となる4つの信号(RXD,TXD, RTS,CTS)に絞り、
CBUS信号も1本に減らしたことで、最も小型となる12ピンパッケージとなっています。
<高速対応タイプ>
転送速度は殆どのICがFull-Speedモード(12Mbps)対応ですが、
高速対応タイプもあり、Hi-Speedモード(480Mbps)対応のHシリーズ、
更に高速化したSuper-Speedモード(5Gbps)対応のFT60xシリーズがあります。
また、Hシリーズの上位機種として、USB PD(※9)対応のHPシリーズもあります。
※9:POWER DELIVERYの略で、USBケーブル(TYPE-C)を使った電力供給機能のこと
Hシリーズは発振器やEEPROMは内蔵していませんが、
RやRNシリーズには無いMPSSE機能があります。
(MPSSEについては後述するFT2232で説明)
<複数の外部IFを持つタイプ>
外部インターフェース(IF)を複数チャンネル(ch)持つタイプとして、
2chのFT2232、4chのFT4232があります。
これらの初期設定は全chがシリアルIFですが、
ch毎にシリアル/パラレルIFどちらでも設定できることから、
FT232とFT245を合体した機能を持ちます。

また、MPSSE(※10)モードと呼ばれる外部IF機能を持ち、
JTAG、SPI、I2C等のクロック同期式のシリアル通信に切り替えることができます。
※10:Multi Protocol Synchronous Serial Engine(マルチプロトコル同期シリアル エンジン)
具体的には、PCから送信されるコマンドによって、
各種シリアル通信方式に対応した信号を生成します。
FT2232DまではMPSSEモードにできるのは1ch(チャンネルA)のみでしたが、
FT2232Hからは2chとも使用可能になりました。
これら外部IFモードへの変更はPCからのコマンドで行うか、
外付けのEEPROMに設定を記憶させるかで行います。
(FT2232シリーズはEEPROMは内蔵していません)
PCからのコマンドは、FTDI専用USBドライバであるD2XXドライバを
インストールすることで利用できます。
EEPROMの読み書きについてもコマンドで行えますが、
専用の書込みツールFT_Progを使えば簡単にできます。
(FT_Progの詳細は後述します)
<専用ドライバのインストール不要タイプ>
これまで説明したUSBインターフェースICを使用する際は、
専用のUSBドライバをPCにインストールする必要がありますが、
FT260は標準クラスドライバのHID(※11)を使用し、
FT120はDMA(※12)による制御を行うことで、
専用ドライバをインストールしなくても使用できます。
※11:標準クラス ドライバは、WindowsなどのOSに標準で入っているドライバのことで、
HIDはHuman Interface Device(ヒューマン インターフェイス デバイス)の略で、
マウスやキーボード等の、人がPCと情報をやり取りするために使用する機器に使用します。
※12:Direct Memory Access(ダイレクト・メモリ・アクセス)
PC内にあるDMAコントローラ(DMAC)によって、CPUを使用せずに、
PC内のメモリと接続した外部機器との間でデータ転送を直接行う方法。
デバイスメーカーが提供する専用ドライバはベンダクラス ドライバと呼びます。
FTDI製IC用の専用ドライバ(VCPドライバ、D2XXドライバ)については後述します。
<ホスト側対応タイプ>
USBインターフェースICの多くは外部機器(USBデバイス)側に設けるタイプで、
USB通信の相手先はホストであるPCであり、USBメモリ等のUSBデバイスとは通信できません。

マイコンをUSBデバイスと通信させたい場合は、ホスト側対応タイプを使用することで、
マイコンにホスト機能を持たせることができ、
例えば、USBメモリのデータをマイコンで読み出すことが可能になります。
VNC2はVinculum(ヴィンキュラム) と呼ばれるUSB ホスト/デバイス コントローラで、
ホスト側だけでなく、デバイス側でも使用でき、設定するプログラムによって、
USBシリアル変換やパラレル変換ICにもなります。
FT311やFT312は、アンドロイド向け USBホストコントローラとなっています。
USBドライバについて
PCに接続したUSBデバイスを使用するためには、USBドライバと呼ばれるソフトが必要で、
先程説明したように、OSに標準搭載の標準クラスドライバと、
デバイスメーカー専用のベンダクラスドライバがあります。
<標準ドライバ(標準クラス)>
標準ドライバにはUSB機器の種類(クラス)毎に対応したドライバが用意されており、
これらをUSBデバイスクラスと呼びます。
主なUSBデバイスクラス
CDC(Communication Data Class) :通信機器(RS-232C等)用
MSC(Mass Storage Class) :ストレージ機器(メモリーカード、USBメモリ等)用
HID(Human Interface Device Class) :ヒューマンIF機器(キーボード、マウス等)用
Audio Class :オーディオ機器(スピーカーやマイク等)用
Printer Class :プリンタ用
デバイスクラスに対応したUSB機器ならば、メーカーに関係なく
機器の種類に該当する標準ドライバが呼び出されて動作します。
WindowsのバージョンUPに伴い、デバイスクラスは増加しており、
USB機器の接続時にドライバをインストールする機会は減っています。
<専用ドライバ(ベンダクラス)>
ベンダとは販売業者のことで、FTDI等のデバイスメーカーが提供する専用のドライバです。
このドライバによって、標準クラスでは対応していない機能を持たせることができ、
FTDI製ICの殆どはベンダクラスのドライバを使用します。
FTDIのUSBドライバは、OSによってはインストール済の場合があります。
また、インストール済でなくても、FTDI製ICを接続すると、
OSが自動的にインターネット経由でドライバをダウンロードし、インストールを行います。
但し、自動でインストールされない場合もあるので、
その際は、FTDIのサイトからドライバを入手し、手動でインストールします。
FTDI製IC用のデバイスドライバは3種類あります。
・VCPドライバ
VCP(Virtual COM Port)とは仮想COMポートのことであり、
FTDI製ICが仮想的にCOMポート接続されているようにOSが認識することで制御を行います。
COMポートは、USB登場前のPCにおけるシリアルIFとして標準装備されており、
マイコンの標準インターフェースであるUART通信との接続が容易でした。
仮想COMポートを経由することで、PC側もマイコン側もUSB通信を意識することなく、
USB登場前のPCと同様に通信を行うことができます。
基本的には、RXD(受信データ)信号とTXD(送信データ)信号を使って通信します。
FTDI製ICの初期設定では、このVCPドライバが適用されます。
FTDIのサイトよりVCPドライバを入手する際、ダウンロードしたドライバのインストーラには、
この後紹介するD2XXドライバも入っており、同時にインストールされます。

ドライバがインストールされた状態はデバイスマネージャーで確認することができます。
デバイスマネージャーを開くには、タスクバーのスタートメニューを右クリックし、
デバイスマネージャーを選択します。

・D2XXドライバ
D2XX(direct driver interface)はICを直接アクセスして制御することから、
ダイレクトドライバと呼ばれます。
D2XXには、ICを制御するための各種コマンド(関数)が用意されており、
C言語等のプログラムにコマンドを組み込むことで、様々な制御を行います。
具体的には、EEPROMの内容を書き換えることで、ICの設定を変更したり、
Bit-BangモードやMPSSEなどの各種機能を使用することができます。
・D3XX ドライバ
Super-Speed 対応IC(FT60x シリーズ等)のみ対象のダイレクトドライバです。
<各ドライバを使用したUSB通信>
各ドライバを使用したPCーマイコン間の通信構成の例として、
VCPドライバの場合はTeraTermを、D2XXドライバの場合はC言語プログラムを
使用した場合について説明します。

TeraTermを使用する際は、VCPドライバによって割り当てられたCOMポート番号を
TeraTermの接続設定画面で指定することで通信可能となります。


※TeraTermの使い方については下記記事で紹介しています。
D2XXドライバコマンドを使ったプログラム例として、
FT232Rのクロック入力を外部発振器に設定するために
EEPROMに書込む処理について以下に示します。
プログラムはFTDIサイトにあるアプリケーションノート
「AN_100 Using the FT232R/FT245R with an External Crystal or Oscillator」より引用
D2XXドライバコマンドの種類と使い方は、FTDIのサイトから入手できる
「D2XX Programmer’s Guide」を参照して下さい。

FTDI専用設定ツール FT_Prog
EEPROMへの書込み(ICの設定変更)はD2XXドライバのコマンドを使用する方法以外に、
FTDIのサイトから無償で入手できるソフトFT_Progを使えば簡単にできます。

ICの種類によって、EEPROMが内蔵されていない場合は外部回路に設ける必要があります。
使用可能なEEPROMは以下になります。
93C46:1kbit (64Word×16bit) H、HPシリーズを除く
93C56:2kbit (128Word×16bit) HPシリーズを除く
93C66:4kbit (256Word×16bit)
また、EEPROM以外に、FLASH ROM(フラッシュメモリ)への書込みもできます。
これは、USBホストコントローラICであるVinculumシリーズのVNC1LやVLC2用の機能で、
制御プログラムを内蔵フラッシュメモリに書き込む際に使用します。
ここでは、EEPROMへの書込み機能(ICの設定変更)の概要を説明します。
設定変更できる内容は以下になります。
<USBデバイス記述子/USB文字列記述子>
ベンダIDやプロダクトID、シリアル番号など、USB通信を行う際にホスト側に伝える情報です。
ID(IDentification number)とは識別番号のことで、
ベンダIDは各メーカに対し、USB規格団体であるUSB-IF (USBインプリメンターズ・フォーラム)によって
登録されたコードで、
プロダクトIDはベンダIDを持つメーカーが各製品に対して割り振ったコードとなっており、
共に4 桁の16 進数で入力されます。

この2つのIDによって、ホストは接続機器が何であるかを識別できます。
シリアル番号については、EEPROM内蔵タイプは製造時に割り振られた番号が保存されています。
非内蔵タイプは、USB記述子にシリアル番号が含まれていない状態になっており、
ICにEEPROMを接続することで設定できます。

このシリアル番号によって、同じICが複数接続されても、ホスト(PC)で区別することができ、
VCPドライバを使用している場合、それぞれ別のCOMポート番号が割り当てられます。
接続時、PCではシリアル番号に対して使用するCOMポート番号が紐づけされるので、
再び同じICを同じUSBコネクタに接続した際は、前回使用したCOMポート番号になります。
TeraTerm等のターミナルソフトを使用して通信を行う際、
割り当てられたCOMポート番号を指定する必要がありますが、
別のUSBシリアル変換モジュールを接続した場合、
同一機種でも割り当てられるCOMポート番号が変わるため、
COMポート番号の指定を変更しないと通信できません。
このような場合、シリアル番号が同じになるようにPT_Progで書き換えれば、
同じCOMポート番号が割り当てられます。
(同じCOMポート番号になるのは、同じPCに限定されます。
また、シリアル番号が同じ状態で複数接続した場合、使用できるUSB機器は1台だけです)
<USB設定記述子>
FTDI製ICは機種によって様々な機能があり、初期設定から変更することで利用可能になります。

・IC電源の供給元を選択
ホストに伝えるICの電源情報を設定します。
バスパワー(USBコネクタ(ホスト側)から供給)か、
セルフパワー(自回路の電源から供給) を選択します。
また、バスパワーからの最大供給電流値も設定できます。
USB 2.0までの規格は最大500mAですが、
USBハブを経由した場合はハブの電源供給能力を考慮して設定します。
また、この電流値の設定がゼロでない場合、セルフパワー選択時でも、
バスパワーからも一部供給を受けることをホストに伝えます。
・リモート・ウェイクアップの有効化
ホスト(PC)を USB サスペンド (スリープ) 状態から復帰させる機能です。
本機能を実行させる際に使用する信号(外部(マイコン等)からICへの入力信号)は
ICの種類によって名称が異なります。(FT232の場合はRI#ピン)
・サスペンド時のI/Oピン プルダウン設定
USB サスペンド時に外部回路への I/O ピンをプルダウンさせるかを指定します。
プルダウンさせるケースとしては、
図の様に電源制御出力 (PWREN#)信号と外部P-ch FETを利用して、
USBサスペンド状態(PWREN#=L)時に外部回路の電源をオフさせる場合です。

プルダウンすることで、電源オフとなった外部回路にHレベル信号を入れない様にします。
<ハードウェア個別設定>
USB接続したICの種類によって、設定できる項目が異なりますが、主な機能は以下になります。

・CBUSピンの機能割り当て
様々な機能を持つ信号をCBUSピンに割り当てることができます。
上記の例では、PWREN#やTXLED#出力ピンをC0(CBUS0)からC3(CBUS3)まで
任意のピンに割り当てることが可能です。
接続したFT234XにはC0しかありませんが、デバイス設定がXシリーズの単位でしか選択できないため、
このような設定画面になっており、C1~C3の設定はICに反映されません。
・外部インターフェース信号のモード変更
UART等に使用されている信号ピンを、Bit-BangモードやMPSSEモードの信号に変更します。
・出力ドライブレベルの変更
外部インターフェース信号の出力電流レベルを変更できます。
FT232Rの場合、有効にすると通常の4mAから12mAに増加し、
ドライブ能力を上げることができます。
・外部クロック有効化
内蔵発振器があるタイプで、外部クロックを使用する際は、ここを有効化します。