その1:FT232RでLEDを光らせる

2015.12.23 東京大学大学院 工学系研究科電気系工学専攻 准教授 三田吉郎

(本ページは、参考文献[1] 応用物理学会誌 「応用物理」特集「今さら聞けない?測定・制御のコツ」寄稿記事の第2節の補足です。)

目次

  1. はじめに
  2. (昔話)パソコンでLチカを行なう方法
  3. FT232Rによるパラレル入出力
  4. FT232Rによる入出力基板を使う

はじめに

PC(パーソナルコンピュータ)やマイコン、「ワンボードパソコン(注1)」などを使って、意味のある電気信号をやりとりするために、最初に必要なことは「指令に従って電気信号を特定の端子から出力/入力する」ことでしょう。出力は正論理で語られることが普通で、従って「やりたいこと(作業の到達目標)」は、

動作の実現となります。

出力端子にLEDなどの発光素子を接続し、論理の高低を適当な(目に見える)時間感覚で切り替えることで、LEDをチカチカと点滅させることができるようになります。これを俗にLチカと呼んでおり、PCによる制御を云々する者達が、最初に通過するべき関門になります。

(昔話)パソコンでLチカを行なう方法

(昔のことを語るのは自分が歳を取った証拠ともいい、言いたくないところですが、それでもやはり、)制御の一丁目一番地「Lチカ」を実現するには、昔むかしのPCが最適でした。昔のPCには、プリンタと接続するための専用のポートとして、「プリンタポート」というものが付いており(図1)、これを使えば、極めて簡単に「Lチカ」が実現できたのです。

プリンタポートは、図2の接続表にあるとおり、

の、合計12本の出力端子と、 ならびに、 の、合計5本の入力端子を持っていました。

Parallel Port Photo Parallel Port Photo
図1: 「パラレルポート」(D-SUB25ピン)図2: 接続図

パラレルポートの入出力データには、「IO(入出力)ポート」とよばれる特定の番地に置かれた「レジスタ」経由してアクセスできました。0x378 (16進数の378番地)などが有名で、378番地に8ビットのデータを書き込むと、内容がそのままDATA1〜8に出力されたので、とても便利でした。一方、直接I/Oレジスタをユーザが読み書きするのはセキュリティ的に危険という考えかたもあり、PC-UNIXの草分け的存在であるFreeBSDでは、ユーザランドから安全にパラレルポートを制御できるppbusという仕組みを非常に早い時期(FreeBSD 3.0 - 1998年10月16日リリース)から提供していました。例えば、以下のような1行のioctl命令を発行するだけで出力に0x5a(01011010)が出力されました。

int fd;
uint8_t val;

val = 0x5a;
ioctl(fd, PPISDATA, &val);

このように、非常に勘弁に、かつそれなりのスピード(毎秒200kバイト、従って毎秒1.6メガビット)でデータの出力ができるため、Lチカのような作業をするのに便利に利用されていましたが、ご承知のとおり、USB (Universal System Bus)の普及につれてパラレルポートは「レガシーポート」と呼ばれるようになり、次第にパソコンから姿を消してゆきました。自作派には辛い、冬の時代の到来です。

FT232Rによるパラレル入出力

パソコンからパラレルポートが姿を消してしまいましたが、需要のあるところに供給ありで、Future Technology Device International Ltd. (FTDI)社から、USBポートに接続して、パソコンと周辺機器の間で通信を行なうためのインターフェースICが発売されました。有名なチップとしては、

  1. シリアル通信入出力が可能なFT232
  2. 2チャンネルのシリアル通信入出力が可能なFT2232
  3. 8ビットメモリとしてアクセス可能なFT245

の3種類が知られています。チップ単体でも入手が可能ですが、実装の具合で動かなかったりすることが多いので、必要な部品と集積化され、24ピン0.6インチ幅の変換基板に実装されたチップを利用するのが便利です。日本では、おなじみ秋葉原の秋月電子通商が、

  1. シリアル通信入出力が可能なFT232を実装したAE-UM232R
  2. 2チャンネルのシリアル通信入出力が可能なFT2232を実装したAE-FT2232
  3. 8ビットメモリとしてアクセス可能なFT245を実装したAE-FT245RL

を販売しています。手頃な価格(1000円〜2000円)で入手できるので、こちらを利用するのがお勧めです。

どのチップを選べばよいか〜選択ガイド〜

3種揃っている理由はそれなりにあるわけですが、「とりあえず試すために新たに購入する」場合はAE-UM232がお勧めです。この点、AE-FT245Rを使った応用物理2015年12月号の記事と若干ずれているのですが、これは筆者の試した順番のせいで(すみません)、

  1. BitBang modeならびにlibftdiライブラリが無かったその昔は、8ビットパラレルの外部メモリ素子として利用できるAE-FT245RLがお勧めでした。
  2. 昔のパソコンの「プリンタポート」をエミュレートするには、AとBとの2チャネルを持つAE-FT2232がお勧めです(パラレルポートは全17ピンなので1ピン足りないのですが実用上は問題なし)
  3. BitBang modeを使えるようになった今、AE-FT232では一台でシリアル通信の実験と、パラレル制御の実験が両方できるので、AE-UM232Rが最もお勧めになりました。

入出力基板の設計試作

秋月電子通商のFTDIシリーズは、幅0.6インチの標準Dual-Inline-Package(DIP)ICですので、購入したボードをブレッドボードにさしこめばすぐに実験ができます。しかしながら、講義で15年にわたり学生に電子情報機器を試作発表させている身として

ブレッドボードで組んだ回路は、いざ発表する段になって、動作不良を起こす


という経験則から、単純な回路でも、プリント基板を起こして、メカニカルに安定な状況を作ってから実験を行なうべしという指導原理を鉄則としています。本実験でも、プリント基板を起こして部品を実装しましたので、何個実験しても全て一発で問題なく動作させることができました。

プリント基板の設計は、どのようなCADソフトウェアを使ってもよいわけですが、筆者は10年来使い慣れているEagleを利用して設計を行ないました。基板には、

  1. BitBangモードでの8本のデータ線(D0-D7)が「1」のときに光るLED
  2. D0-D3までの下位4ビットを入力できる押しボタンスイッチ(押すと端子の電位がGNDに落ちる)、そして
  3. データ線8本とGND線、VDD線を取りだすことのできるヘッダ端子

を実装しています。

CADデータ

FT232R-LEDインターフェース基板回路図

AE-UM232R Schematic on Eagle

FT232R-LEDインターフェース基板ボードアートワーク

AE-UM232R Board on Eagle

FT232R-LEDインターフェース基板実装済み基板の写真

AE-UM232R Board Photo

注: FT232と245の入出力回路の違い

参考文献[2]ドキュメントにあるように、FT232と245とのどちらのICを利用しても、BitBang Mode で8ビットパラレル出力を取り扱うことができます。ピン配置を表1にまとめたとおり、AE-FT245RLボードでは、1,2,3,4,5,6,7番ピンが素直にBitBang ModeのD0〜D7番に対応しているので、配線をすっきりまとめることができます。対してAE-UM232Rボード方は、データの出力ピン番号が1,5,3,10,2,8,9,6番なので、すっきりとした配置になりません。試作ではボード上の配線で端子の並べ替えをしていますが、どうしても2ピンだけ他のピンをまたいで入れ替えをする必要がありました(アートワーク上、赤で示された配線(TopLayer))。

表1: FT245と232をBitBang Modeで利用するときのピン配置の比較
FT245BM端子名AE-FT245RL端子番号FT232BM端子名AE-UM232R端子番号Bit-Bang端子名
Data01TXD1Data0
Data12RXD5Data1
Data23RTS3Data2
Data34CTS10Data3
Data45DTR2Data4
Data56DSR8Data5
Data67DCD9Data6
Data78RI6Data7

FT232Rによる入出力基板を使う

FT232やFT245Rは、Virtual COM Port ドライバをインストールしたPCに接続をして、シリアルポート(COMポート)として認識されるのが通常の利用方法ですが、今回の実験のように、端子から直接ディジタルデータを入出力するには、FTDI社が出しているFTD2XXドライバまたは、オープンソースのlibftdiドライバを利用します。

実験には、Cプログラミング環境が利用できるOperating Systemを必要とします。PCで動作するUNIX環境が一番の候補となるでしょう。筆者は長年FreeBSDを利用していますので、実験はそちらの例をまず報告しますが、ユーザランドがFreeBSDをベースに構成されている「MacOS X」や、Linus Torvalds氏が独自にコーディングを行なったPC-UNIX「Linux」の方がより広く使われています。libftdiドライバは、これら全てのメジャーなOperating System上で当然動作します。Windowsでも動くわけですが、「いちいちプログラミング環境を用意しなければならない煩雑さ」から、筆者個人は避けて通っています[3]。libftdiは、ユーザーランドからUSB機器に簡単にアクセスするための枠組みであるlibusbを利用しているので、libusbが動作する多数のメジャーなOSで、全く同じソースコードを用いて動作させることができます。

ソースコード

FTDI経由でLEDを点滅させるためのサンプルコードを用意しました。
筆者の環境は

です。このほか、BeagleBone Black(Angstrom Linux)やRaspberry Pi(FreeBSDを搭載)などでも動作を確認しました。

動作の様子を動画に記録しました(リンク)。 FT-232インターフェース基板をUSB端子に接続すると、D0,D2,D4の3個のLEDが点灯します(写真)。これは、シリアル通信モードとして動作しているためで、D0:TX, D2:RTS, D4:DTR端子が点灯しています。
コンパイル時に、オプションにてftdi.hならびにlibftdiライブラリのインストール一を指定します。
% cc -I/usr/local/include -L/usr/local/lib -lftdi -o 02setBitBang 02setBitBang
スーパーユーザー権限で、生成したバイナリ02setBitBangを実行すると、1秒おきに、LED全消灯→全点灯、D0→D1→D2→D3…D7→D0→…D7→D0→…D7の順にLEDが点滅を繰り返します。
# ./02setBitBang

参考文献

[1] 三田吉郎、制御技術(パソコン)のコツ / Tips for control technologies (personal computer) 応用物理、 第84巻 第12号 pp. 1108-1112 (2015.12)
[2] "FT232BM /FT245BM BIT BANG MODE", Application Note AN232BM-01

脚注