FT232RLの周辺

USB-シリアル変換LSIと言えば、FTDI社のFTなんちゃらが一番入手性、価格の面で優れている。


先日紹介したデジットのABL-168(http://d.hatena.ne.jp/yaneurao/20080628)に搭載されているのはこのFTDI社のFT232RLだ。こいつは12MHzの発振器とEEPROMを内蔵している。USB接続のマウスなんかにも使われているほどのメジャーな石だ。


ところで、このABL-168を複数接続しても仮想COMポートは一つしか認識できない。1PCから複数のABL-168を制御したかったので、仮想COMポートは複数認識されて欲しい。そのためには、このFT232RLのEEPROMを書き換えて、VenderIDかProductIDかSerial Numberかのいずれかを変更したものを用意する必要がある。


ああでもない、こうでもないと2,3時間ハマったので注意点をここにまとめて書いておく。


■ 注意点


・西日本常盤商行(http://www.tokiwa-west.co.jp/)のUSBモジュールのところにある説明をまず最初に読むべき。


・FTDI社のサイト(http://www.ftdichip.com/)には、VCP(仮想COMポート)ドライバと、D2XX(直接チップにアクセスできる)ドライバとがある。併用できない。もう片方を使うためには前のものを完全にアンインストールする必要がある。この完全なアンインストールというのが結構手間で、素人にはお勧めできない。D2XXをインストールするパソコンは別のものにするか、VirtualPCのような作業環境で行なうようにしたほうが無難。


・FTDI社のサイトにある、FTD2XXST.EXEというのを使うとこのEEPROMを書き換えることが出来る。しかし、その上位版であるMProgを使ったほうが細かな書き換えが出来るのでこちらを使うほうが良い。FTD2XXSTとMProgを動かすためにはD2XXがインストールされている必要がある。


・VenderIDかProduceIDのいずれかを変更した場合、異なるハード的な性質を持つUSB機器として認識されるためinfファイルを書き換える必要がある。例えば、デジットのABL-168ならVenderID : 1A48 , ProduceID : 4151が設定されている。


・FTDI社のFT8U232ならば VenderID : 0403 , ProductID : 6001 , SerialNumber : 12345678 が設定されている。このVenderIDはUSB Implementors Forum,IncよりベンダーIDを取得しないといけない。これは正会員にるため $2,500-/年 必要だが個人のホビーや零細企業で開発する程度でこんなものは払えないので、実際は、FTDI社のVenderID : 0403とFT8U232のProductID : 6001(FTDIの機器のdefaultのProductIDであり、FT232RLでもdefaultはこれのようだ。defaultではFT232RLのEEPROMにはすべてFFが書き込まれている状態で、すべてFFだとこのようにみなされるようだ)をそのまま利用して(さらに複数機器を1PCから同時に使用したいならば)SerialNumberだけ変更しておけば良い。まあ、他社製品と極々稀にSerialNumberがぶつかったりするかも知れないが、それはそれで仕方ないですよ、と(´ω`)


・MProgを用いればEEPROMに書き込まれているNamufacture名、Product Descriptionを変更できる。これはPCに接続されたときにタスクバーの通知領域から出るバルーンに表示される文字列である。また、コントロールパネルのシステムのところから見えるデバイス名は、infファイルを書き換えることにより変更できる。ABL-168を独自のUSBデバイスに見せかけることも出来る。


・ABL-168では、Manufacture名、Product Descriptionをチェックしているので、ここを変更してしまうと、同梱されているプログラム転送ソフトからは使えなくなってしまう。


・VenderID、ProductIDを変更してしまうと、次にUSBポートに刺したときにそれに対応したinfファイルをOSが要求してくる。きちんとそれに対応したinfファイルを用意して、いったんD2XXのドライバで認識させなければMProgからアクセスできないので、デタラメなVenderID,ProductIDを割り付けてしまうと大変なことになる。(USBDeview(http://www.nirsoft.net/utils/usb_devices_view.html)というソフトを用いれば、VenderID,ProductIDを調べることが出来るらしいのだが未調査。)


・D2XXのドライバはドライバのインストール中の画面が出たあと停止することがある。VCPのドライバが残っていた時に起きる現象のようだ。ドライバ自体は正常にインストールされていてMProgからはアクセスできるのでタスクマネージャからrundll32.exeを停止させるか、SerialPortをOSが見つけてもインストールせずダイアログを出したままにしておけば良い。


・ABL-168を1PCに複数つないで使いたいなら、MProgでEEPROMの情報のうち、シリアルナンバーだけ書き換えてしまうのが賢い。それならinfファイルの書き換えは不要だ。


・MProgの操作性が独特で、ハマる。Device→ScanしてUSB接続されている機器を調べ、Tools→Read and ParseでEEPROMの内容を読み込み、File→Editで編集できるモードにして、「USE Fixed Serial Number」のチェックを入れ(ここにチェックを入れないと下位6桁をランダムに生成されてしまう)、ここに好きな8文字の文字列(8 digitsと書かれているがアルファベットも使える)を入れて、File→Saveでファイルに情報をいったん保存する。この保存をしないと何故か書き込みができる状態にならない。この保存をすれば、「Device」→「Program」でFT232RLのEEPROMに書き込める。


・FT232RLのシリアルナンバーだけ変更しておけば、ABL-168を1PCに2つ接続したときにもCOMポートが2つ追加される。ところが、何故か2つ目のVCPドライバがインストールされないことがある。そのときには、コントロールパネル→デバイス→USBのところに出ているBB-BL mega168のプロパティを出して、AdvanceのタブにあるLoad VCPのチェックボックスにチェックを入れ、OSを再起動しないといけない。(これが、なかなか気づきにくい)


・よくはわからないが、ABL-168に付属のdriverとFTDI社のサイトにある最新のVCPドライバとは同名のファイル名のため競合しているような気はする。(OSの仕様の問題と言えばそうなのだが) インストールするドライバ名の頭に ABL168_ とかをつけて公式のVCPドライバとは違う名前にしておいたほうが良かったような気は少しする。(詳しく調べてないのでよくわからない)


・FTDI公式のVCPドライバはVistaやWindowsMobileも対応。ABL-168付属のドライバはVistaに対応しているのかは知らないが、仮に未対応だとしても、公式のVCPドライバを持ってきて、infファイルのVenderIDとProductIDのところをABL-168のVenderID(1A48)とProductID(4151)に置換して、これを用いてインストールすれば良いように思う。(私は、この動作は未確認)


・C2XX付属のなんやかやを用いるとFT232RLなどにダイレクトにアクセス出来るので、FT232RLを載せたUSB機器を自分で開発したい時などはこれを使うようだ。USB機器の自作やデバイスドライバを書くというのはそれほど敷居の高いものでもないようだ。いずれUSB機器を作るのにも挑戦してみようと思った。


・どうやっても認識しないなーと思ったら、USBケーブルが半刺しになってたこともあった。(´ω`)


とりあえず、それぐらいわかっていれば、ABL-168を1PCに複数接続しても大丈夫ですよ、と。


USBターゲット機器開発のすべて―各種USBコントローラの使い方と基本ソフトウェアの作成法 (TECHI―Bus Interface)

今回のABL-168を1PCに複数接続するためにいろいろ調べていたが、この本が一番役に立った。オンラインで読める技術資料の丸写しや、公式サイトの英語のドキュメントを訳しただけというようなひどい技術書がいろいろあるなか、この本は著者が地道に一つ一つ調べてあるように思った。