December 13, 2008Super Sylphide 進捗状況(22) -- MSD + CDC 改め MSD + FTDI MimicオートパイロットシステムSuper Sylphideですが、USBを使用したデバック用インターフェイスを設けることが悲願でした。これまでの経緯としては、USBメモリスティックのように機器を見せるMass Storgae Device Class (MSDまたはMSC)と、擬似的なシリアルポートによって通信を確立するCommunication Device Class (CDC)、この2つを同時に実装したcomposite Deviceとして機能することを狙っていました。しかしMSD + CDCを同時に実装するとWindowsではM$が提供している標準デバイスドライバの出来がよろしくないようで、認識はされるもののCDCによる通信が途絶してしまうという問題が発生しました(詳しくは『Super Sylphide 進捗状況(16) -- Windows XPでMSD+CDCのUSB compositeが相変わらず動かない』の記事をどうぞ)。しかしながら今回ようやくMSD + CDCの機能を同時に実現することができましたので、記事にしてみたいと思います。ただし断っておきますが、ここで紹介する方法はタイトルから予想されるとおり、USBシリアル変換チップを作っているFTDIというメーカーのデバイスドライバを代替として使うもので、使用許諾条件に違反していると思われます。従って製品を作られる際には、くれぐれも参考にしないでください。 この方法を思い至ったのは、PICで有名なMicrochipのユーザーフォーラムを見ていた際に、FTDIのドライバを利用することによって、USB付きデバイスであるPIC18Fで2チャンネル分のシリアルポートを確保できたという話を見つけたことに遡ります。シリアルポートを2チャンネル確保する方法としては、USBの標準的な規格であるCDCを2チャンネル実装することが最も適当な方法だと思われますが、残念ながらWindowsではこの構成において必要となる複合デバイス用のドライバ(usbccgp.sys)とCDCドライバ(ubsser.sys)がうまくかみ合わず、1チャンネル分の通信しかうまくいかない問題が発生するそうで、このFTDIのドライバを使う方法はそれを解消したといえます。 そこで上記のリンクで公開されているソース、またLinuxのFDTIのKernel Driver(/drivers/usb/serial/ftdi_sio.*)を参考に、FTDIのドライバに適合したファームウェア(MSD + FTDI Mimic)を実装してみました。実装した結果のうちFTDIに関わる部分(および変更前のCDCの部分)はUSB_CDC.c, USB_CDC.hで、USB_CDC.h上でCDC_IS_REPLACED_BY_FTDIを定義するとFTDIのドライバを使用するようになります。ディスクリプタの定義はf34x_USB_Descriptor.cで、MSD + FTDI Mimicでは下図のような構成になっています。 Interface Associaton Descriptorを使ってFTDIドライバが想定していないMSDの部分を切り離してあります。またFTDIドライバに関するINエンドポイントはBulkではなくInterrupt転送としました。これはMSDアクセスがあった場合でもFTDIのINエンドポイントを存続させるためで、なぜかWindowsでMSDアクセスをすると全ての転送がMSDに関するBulk転送で埋められてしまい、他のBulkエンドポイントの入出力をしてくれない問題を解消してあります。 さらにWIndowsで認識のために必要となるinfファイルですが、F34x_FTDIBUS.inf, F34x_FTDIPORT.infを作りました。FTDIの現時点での最新の安定版ドライバ(2.04.06)を想定しています。また認識の際にはFTDIドライバが想定するベンダIDと違うものを作っているため、VCPドライバを手動で導入(やねうらおさんの『FT232RLの周辺』の記事の後ろにある『FT232RLのシリアルナンバーだけ変更しておけば~』のくだりを参考)する必要がありました。 認識されるとWindowsのデバイスマネージャでは下図のようになります。 これでSuper SylphideからMSDを使って保存されたデータの吸出し、そしてFTDI Mimicを使ったSuper Sylphideを使ったハードウェアインザループ(Hardware in the loop)試験の両方ができるようになりました。転送速度を考えると排他的な使い方になってしまうのですが、設定を変えることなく一つのデバイスで2つのことができるのは快適です。 ※その後、通信プロトコルの話を書きました。 コメント
コメントする
|
スポンサード リンク
|